diff --git a/cour_note/D3QD_OperatingSystem/Unit1/index.html b/cour_note/D3QD_OperatingSystem/Unit1/index.html
index 7f8b1f9d..f9fc2512 100644
--- a/cour_note/D3QD_OperatingSystem/Unit1/index.html
+++ b/cour_note/D3QD_OperatingSystem/Unit1/index.html
@@ -1352,7 +1352,7 @@
Unit 1: 进程管理 | Process Management
-
约 7267 个字 60 行代码 预计阅读时间 37 分钟
+
约 7283 个字 60 行代码 预计阅读时间 37 分钟
进程
一段本质上程序是静态的、存储在硬盘上的指令数据,而当它附带运行程序所需要的必要信息进入内存,得到相关资源后,它成为一个动态的、与计算机资源互动的实体,这个实体就是进程(process) 。
@@ -1763,7 +1763,7 @@ 算
算法 | Round-Robin (RR)
- RR 调度就是使用分时技术 后的 FCFS 调度,因此它也是非抢占式 的。每一个进程最多连续执行一个时间片的长度,完成后被插入到 FIFO ready queue 的末尾,并取出 FIFO ready queue 的队首进行执行。
+RR 调度是使用分时技术 的调度算法。由于时间片到期后,操作系统会强制停止进程,因此它是抢占式 的。每一个进程最多连续执行一个时间片的长度,完成后被插入到 FIFO ready queue 的末尾,并取出 FIFO ready queue 的队首进行执行。
我们之前提到分时 的时候也说过,分时技术通过优化响应时间解决了用户交互问题,RR 调度虽然相比 SJF 有了更长的等待时间,但是有了更短的响应时间,而实际直接影响用户交互问题的应该是响应时间。
一个需要注意的是,RR 调度有一个“超参数”,即时间片的长度。理论上,时间片约短,响应时间越短;但更短的时间片将带来更频繁的进程切换,从而带来更多的 dispatch latency。
算法 | Priority Scheduling
@@ -1851,7 +1851,7 @@ 多线程模型
diff --git a/search/search_index.json b/search/search_index.json
index 17f5a8d2..49fb00ea 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 105 \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
\ud83d\udcc4 \u4f7f\u7528 reveal-md \u6765\u5199 Slides \ud83d\uddc2\ufe0f Git Something \ud83d\uddc2\ufe0f \u64cd\u4f5c\u7cfb\u7edf | Operating System \ud83d\uddc2\ufe0f \u6570\u5b57\u903b\u8f91\u8bbe\u8ba1 | Digital Design \ud83d\uddc2\ufe0f \u9ad8\u7ea7\u6570\u636e\u7ed3\u6784 | Advanced Data Structure \u7ad9\u70b9\u7edf\u8ba1
\u672c\u7ad9\u76ee\u524d\u5171 96 \u9875\uff0c\u7d2f\u8ba1 230333 \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
\u667a\u4e91\u94fe\u63a5\uff1a\ud83d\udd17 \u6388\u8bfe\uff1a\u5434\u56fd\u6862 \u6559\u6750\uff1a\u300a\u6982\u7387\u8bba\u4e0e\u6570\u7406\u7edf\u8ba1\u300b\uff0c\u5f20\u5e3c\u594b\uff0c\u9ad8\u7b49\u6559\u80b2\u51fa\u7248\u793e \u8f85\u52a9\u6559\u6750\uff1a\u300a\u6982\u7387\u8bba\u4e0e\u6570\u7406\u7edf\u8ba1\u6559\u7a0b \u7b2c\u4e09\u7248\u300b\uff0c\u8306\u8bd7\u677e\uff0c\u9ad8\u7b49\u6559\u80b2\u51fa\u7248\u793e\uff08\u540e\u7b80\u79f0\u6a59\u4e66\uff09 Notes
[1.x] \u6982\u7387\u8bba\u7684\u57fa\u672c\u6982\u5ff5 [2.x] \u968f\u673a\u53d8\u91cf\u53ca\u5176\u6982\u7387\u5206\u5e03 [3.x] \u591a\u5143\u968f\u673a\u53d8\u91cf\u53ca\u5176\u5206\u5e03 [4.x] \u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81 [5.x] \u5927\u6570\u5b9a\u5f8b\u53ca\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406 [6.x] \u7edf\u8ba1\u91cf\u4e0e\u62bd\u6837\u5206\u5e03 [7.x] \u53c2\u6570\u4f30\u8ba1 [8.x] \u5047\u8bbe\u68c0\u9a8c "},{"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
\u53ef\u4ee5\u590d\u73b0\uff1b \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
\u7279\u522b\u7684\uff0c\u53ea\u542b\u6709\u4e00\u4e2a\u6837\u672c\u7684\u5b50\u96c6\u79f0\u4e3a\u57fa\u672c\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
\u4e24\u4e92\u9006\u4e8b\u4ef6\u53c8\u79f0\u5bf9\u7acb\u4e8b\u4ef6\u3002 \u82e5 \\(AB=\\varnothing\\)\uff0c\u5219\u79f0\u4e24\u4e8b\u4ef6\u4e0d\u76f8\u5bb9\uff08\u6216\u4e92\u65a5\uff09 \u82e5 \\(A\\subset B \\;and\\;B\\subset A\\)\uff0c\u5219\u79f0\u4e24\u4e8b\u4ef6\u76f8\u7b49 \u5176\u4e2d\uff0c\u548c\u3001\u4ea4\u3001\u9006\u4e8b\u4ef6\u6709\u5982\u4e0b\u8fd0\u7b97\u89c4\u5f8b\uff1a
\u4ea4\u6362\u5f8b\uff1a\\(A\\cup B=B\\cup A\\;,\\;A\\cap B=B\\cap A\\)\uff1b \u7ed3\u5408\u5f8b\uff1a\\(A\\cup(B\\cup C)=(A\\cup B)\\cup C\\;,\\;A(BC)=(AB)C\\)\uff1b \u5206\u914d\u5f8b\uff1a\\(A(B\\cup C)=(AB)\\cup(AC)\\;,\\;(AB)\\cup C=(A\\cup C)(B\\cup C)\\)\uff1b \u5bf9\u5076\u5f8b / \u5fb7\u6469\u6839\u5b9a\u5f8b(De Morgan's law)\uff1a\\(\\overline{\\bigcup\\limits^n_{j=1}A_j}=\\bigcap\\limits^n_{j=1}\\overline{A_j}\\;,\\;\\overline{\\bigcap\\limits^n_{j=1}A_j}=\\bigcup\\limits^n_{j=1}\\overline{A_j}\\)\uff1b \u4e32\u8054\u7cfb\u7edf\u4e0e\u5e76\u8054\u7cfb\u7edf\uff1a
\u4e32\u8054\u7cfb\u7edf\uff1a\\(A=\\bigcap\\limits_{i=1}^nA_i\\) \u5e76\u8054\u7cfb\u7edf\uff1a\\(A=\\bigcup\\limits_{i=1}^nA_i\\) "},{"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
\u975e\u8d1f\u6027 \\(P(A)\\geq0\\)\uff1b \u89c4\u8303\u6027 / \u6b63\u5219\u6027 \\(P(S)=1\\)\uff1b \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
\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 \\(P(A)=1-P(\\overline A)\\)\uff1b\u7279\u522b\u7684\uff0c\u53ef\u4ee5\u5f97\u5230 \\(P(\\varnothing)=0\\)\uff1b \u5f53 \\(A\\supset B\\) \u65f6\uff0c\\(P(A-B) = P(A)-P(B)\\) \u4e14 \\(P(A)\\geq P(B)\\)\uff1b \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 \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
\\(S\\) \u4e2d\u6837\u672c\u70b9\u6570\u6709\u9650\uff1b \\(\\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
\\(B_iB_j=\\varnothing,i,j,...,n,i\\not=j\\)\uff1b \\(\\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
\u82e5 \\(A_1,...,A_n,...\\) \u4e92\u4e0d\u76f8\u5bb9\uff0c\u5219 \\(P(\\cup_{n=1}^{\\infty}A_n|B)=\\sum\\limits_{n=1}^{\\infty}P(A_n|B)\\)\uff1b \u4e58\u6cd5\u516c\u5f0f\uff1a\u5f53 \\(P(A)\\not=0\\;\\,\\;P(B)\\not=0\\) \u65f6\uff0c\u6709 \\(P(AB)=P(A)*P(B|A)=P(B)*P(A|B)\\)\uff1b \u5168\u6982\u7387\u516c\u5f0f\uff1a\\(P(A)=\\sum\\limits_{j=1}^nP(B_j)P(A|B_j)\\)\uff1b \u8d1d\u53f6\u65af\u516c\u5f0f\uff1a\\(P(B_k|A)=\\frac{P(B_kA)}{P(A)}=\\frac{P(B_k)P(A|B_k)}{\\sum\\limits_{j=1}^nP(B_j)P(A|B_j)}\\)\uff1b \u5176\u4e2d\uff0c\u6211\u4eec\u79f0 \\(P(B_j)\\) \u8fd9\u79cd\u4e8b\u5148\u77e5\u9053\u7684\u6982\u7387\u4e3a\u5148\u9a8c\u6982\u7387\uff1b\u800c \\(P(B_j|A)\\) \u8fd9\u79cd\uff0c\u5f53\u4e8b\u4ef6 \\(A\\) \u53d1\u751f\u540e\u9700\u8981\u4fee\u6b63 \\(B_j\\) \u7684\u6982\u7387\u6210\u4e3a\u540e\u9a8c\u6982\u7387\u3002 "},{"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
\u663e\u7136\u6709\uff1a\u76f8\u4e92\u72ec\u7acb \\(\\Rightarrow\\) \u4e24\u4e24\u72ec\u7acb \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
\u72ec\u7acb\u8bd5\u9a8c\u5404\u4e2a\u8bd5\u9a8c\u7ed3\u679c\u4e92\u4e0d\u5f71\u54cd\uff1b \u91cd\u590d\u8bd5\u9a8c\u7684\u6bcf\u4e00\u6b21\u5b50\u8bd5\u9a8c\u90fd\u5728\u76f8\u540c\u60c5\u51b5\u4e0b\u8fdb\u884c\uff1b "},{"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 \\] \u5982\u679c\u9047\u5230\u6765\u81ea\u4e8e\u4e24\u70b9\u5206\u5e03\u7684\u603b\u4f53\u7684\uff0c\u5bb9\u91cf\u4e3a \\(n\\) \u7684\u6837\u672c\u7684\u5747\u503c \\(\\overline X\\)\uff0c\u5219\u6709 \\(n\u00b7\\overline X=\\sum\\limits_{i=1}^n X_i \\sim B(n,p)\\) "},{"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)\\)
\u5176\u610f\u4e49\u4e3a\uff0c\u5982\uff1a\\(a\\) \u767d\u7403\uff0c\\(b\\) \u7ea2\u7403\uff0c\u53d6 \\(n\\) \u6b21\u5f97\u5230 \\(X\\) \u4e2a\u767d\u7403 \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
\\(F(x)\\) \u5355\u8c03\u4e0d\u51cf\uff1b \\(0\\leq F(x) \\leq 1\\) \u4e14 \\(F(-\\infty)=0\\)\uff0c\\(F(+\\infty)=1\\)\uff1b \\(F(x)\\) \u53f3\u8fde\u7eed\uff0c\u5373 \\(F(x+0)=F(x)\\)\uff1b \\(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
\\(f(x) \\geq 0\\)\uff1b \\(\\int_{-\\infty}^{\\infty}f(x)dx=1\\)\uff1b \\(\\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 \u5728\\(f(x)\\) \u7684\u8fde\u7eed\u70b9 \\(x\\) \u5904\uff0c\\(F'(x)=f(x)\\) \\(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 \\] \u5219\u663e\u7136\u6709 \\(\\Phi(x)+\\Phi(-x)=1\\) \u7136\u800c\u7531\u4e8e\u5176\u65e0\u6cd5\u8ba1\u7b97\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u67e5\u8868\u83b7\u5f97\u5177\u4f53\u503c\uff0c\u4ee5\u4e0b\u4e3a\u6807\u51c6\u6b63\u6001\u5206\u5e03\u8868\uff1a https://www.shuxuele.com/data/standard-normal-distribution-table.html https://www.chip1stop.com/sp/knowledge/019_normal-distribution-table_zh \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
\u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(P\\{a<X<b\\}= P\\{\\frac{a-\\mu}{\\sigma}< \\frac{X-\\mu}{\\sigma} < \\frac{b-\\mu}{\\sigma} \\}=\\Phi(\\frac{b-\\mu}{\\sigma})-\\Phi(\\frac{a-\\mu}{\\sigma})\\) \u7279\u522b\u7684\uff1a\u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(P\\{|X-\\mu|<k\\sigma\\} = \\Phi(k)-\\Phi(-k)=2\\Phi(k)-1\\) \\(3\\sigma\\) \u6cd5\u5219 "},{"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
\\(X\\) \u4e3a\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff0c\u4e14\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a \\(f_X(x)\\)\uff1b \u968f\u673a\u53d8\u91cf \\(Y=g(X)\\)\uff1b \u51fd\u6570 \\(y=g(x)\\) \u4e3a\u4e00\u4e25\u683c\u5355\u8c03\uff08\u589e/\u51cf\uff09\u51fd\u6570\uff0c\u5e76\u4e14\u53ef\u5fae\uff1b \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} \\] \u5176\u4e2d \\(D\\) \u4e3a \\(y=g(x)\\) \u7684\u503c\u57df\u3002 \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)\\)
\u6807\u51c6\u5316\uff1a\u7279\u522b\u7684\uff0c\u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(\\frac{X-\\mu}{\\sigma}\\sim N(0,1)\\)\uff1b \u5373\u6b63\u6001\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u7ebf\u6027\u53d8\u6362\u540e\u6b63\u6001\u6027\u4e0d\u53d8\uff1b "},{"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":" \u8054\u5408\u5206\u5e03\u5f8b\uff08Joint Mass Function\uff09 \\(P(X=x_i,Y=y_j)=p_{ij}, \\; i,j=1,2,\\dots\\)\uff1b "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5206\u5e03\u5f8b","title":"\u8fb9\u9645\u5206\u5e03\u5f8b","text":" \u8fb9\u9645\u5206\u5e03\u5f8b\uff08Marginal Mass Function\uff09\u662f\u8054\u5408\u5206\u5e03\u5f8b\u7684\u884c/\u5217\u6c42\u548c\uff1b \\(P(X=x_i)=P(X=x_1,\\bigcup_{j=1}^{\\infty}(Y=y_j))=\\sum_{j=1}^{\\infty}p_{ij}:=p_{i\u00b7}\\)\uff1b \\(P(Y=y_j)=P(\\bigcup_{j=1}^{\\infty}(X=x_i),Y=y_j)=\\sum_{i=1}^{\\infty}p_{ij}:=p_{\u00b7j}\\)\uff1b "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5206\u5e03\u5f8b","title":"\u6761\u4ef6\u5206\u5e03\u5f8b","text":" \u6761\u4ef6\u5206\u5e03\u5f8b\uff08Conditional Mass Function\uff09 \\(P\\{X=x_i|Y=y_j\\}=\\frac{P(X=x_i,Y=y_j)}{P(Y=y_j)}=\\frac{p_{ij}}{p_{\u00b7j}}\\;\\;i,j=1,2,...\\)\uff1b \\(P\\{X<x|Y<y\\}=\\frac{P\\{X<x,Y<y\\}}{P\\{Y<y\\}}\\)\uff0c\u7136\u540e\u6839\u636e\u8054\u5408\u5206\u5e03\u5f8b\u548c\u8fb9\u9645\u5206\u5e03\u5f8b\u8bfb\u8868\u8ba1\u7b97\uff1b "},{"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
\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 \\(0\\leq F(x,y)\\leq 1\\)\uff0c\u4e14 \\(F(x,-\\infty)=F(-\\infty,y)=F(-\\infty,-\\infty)=0\\;,\\;F(+\\infty,+\\infty)=1\\)\uff1b \\(F(x,y)\\) \u5173\u4e8e \\(x\\) \u548c \\(y\\) \u5206\u522b\u53f3\u8fde\u7eed\uff08\u79bb\u6563\uff09\uff1b \\(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\\) Tips\uff1a\u8003\u8651\u51e0\u4f55\u610f\u4e49\uff01 "},{"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
\u5bf9 \\(y\\) \u6765\u8bf4\u540c\u7406\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
\\(f(x,y)\\geq 0\\)\uff1b \\(F(+\\infty,+\\infty)=\\int_{-\\infty}^{+\\infty}\\int_{-\\infty}^{+\\infty}f(u,v)\\mathrm{d}u\\mathrm{d}v=1\\)\uff1b \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 \\((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 \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 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
\u5bf9 \\(Y\\) \u6765\u8bf4\u540c\u7406\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
\u4e8c\u7ef4\u6b63\u6001\u5206\u5e03\u7684\u4e24\u4e2a\u8fb9\u9645\u5206\u5e03\u90fd\u662f\u5bf9\u5e94\u53c2\u6570\u7684\u4e00\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u4e0e \\(\\rho\\) \u65e0\u5173\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
\\(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
\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
\\(F_{max}(z)=P(M\\leq z)=P(X\\leq z,Y\\leq z)\\xlongequal{\\text{X,Y independent}}P(X\\leq z)P(Y\\leq z)=F_X(z)F_Y(z)\\)\uff1b \\(F_{min}(z)=P(N\\leq z)=1-P(N>z)=1-P(X>z,Y>z)\\xlongequal{\\text{X,Y independent}}1-P(X>z)P(Y>z)=1-(1-F_X(z))(1-F_Y(z))\\)\uff1b "},{"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":" \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C) = C\\)\uff1b \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C\u30fbX)=C\u30fbE(X)\\)\uff1b \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 \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
\u82e5\\(X\\)\u53d6\u503c\u96c6\u4e2d\uff0c\u5219 \\(Var(X)\\) \u8f83\u5c0f\uff1b \u82e5\\(X\\)\u53d6\u503c\u5206\u6563\uff0c\u5219 \\(Var(X)\\) \u8f83\u5927\uff1b \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
\u79bb\u6563\u578b\uff1a\\(Var(X)=E\\{[X-E(X)]^2\\}=\\sum_{i=1}^{+\\infty}[x_i-E(X)]^2p_i\\)\uff1b \u8fde\u7eed\u578b\uff1a\\(Var(X)=E\\{[X-E(X)]^2\\}=\\int_{-\\infty}^{+\\infty}[x-E(X)]^2f(x)\\mathrm dx\\)\uff1b \u5229\u7528\u671f\u671b\u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5f97\u5230 \\(Var(X)=E(X^2)-E^2(X)\\)\uff1b "},{"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":" \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C) = 0\\)\uff1b \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C\u30fbX)=C^2\u30fbVar(X)\\)\uff1b \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)\\) \\(Var(X)\\leq E[(X-c)^2]\\)\uff0c\u5e76\u4e14\u5f53\u4e14\u4ec5\u5f53 \\(E(X)=c\\) \u65f6\u7b49\u53f7\u6210\u7acb\uff1b \\(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":" \\(Cov(X,Y)=Cov(Y,X)\\)\uff1b \\(Cov(X,Y)=E(XY)-E(X)E(Y)\\)\uff1b \\(Cov(aX,bY)=abCov(X,Y)\\;,\\;\\;a,b\\in\\R\\)\uff1b \\(Cov(X+Y,Z)=Cov(X,Z)+Cov(Y,Z)\\)\uff1b \\(Cov(X,X)=Var(X)\\)\uff1b \\(Cov(c,Y)=E(cY)-E(c)E(Y)=0\\;,\\;\\;c\\in\\R\\)\uff1b \\(Cov(X+Y,X-Y)=Cov(X,X)-Cov(Y,Y)=Var(X)-Var(Y)\\)\uff1b \\(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 \\(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":" \\(|\\rho_{_{XY}}|\\leq 1\\)\uff1b \\(|\\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 \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
\\(|\\rho_{_{XY}}|\\) \u6bd4\u8f83\u5927\u65f6\uff0c\u5747\u65b9\u8bef\u5dee\u8f83\u5c0f\uff0c\u8868\u793a \\(X,Y\\) \u7ebf\u6027\u5173\u7cfb\u7684\u7a0b\u5ea6\u597d\uff1b \\(|\\rho_{_{XY}}|=1\\) \u65f6\uff0c\u5747\u65b9\u8bef\u5dee\u4e3a \\(0\\)\uff0c\u8868\u793a \\(X,Y\\) \u4e4b\u95f4\u4ee5\u6982\u7387 \\(1\\) \u5b58\u5728\u7ebf\u6027\u5173\u7cfb\uff1b \\(|\\rho_{_{XY}}|\\) \u6bd4\u8f83\u5c0f\u65f6\uff0c\u5747\u65b9\u8bef\u5dee\u8f83\u5927\uff0c\u8868\u660e \\(X,Y\\) \u7ebf\u6027\u5173\u7cfb\u7684\u7a0b\u5ea6\u5dee\uff1b \\(\\rho_{_{XY}}>0\\) \u65f6\uff0c\\(X,Y\\) \u6b63\u76f8\u5173\uff1b \\(\\rho_{_{XY}}<0\\) \u65f6\uff0c\\(X,Y\\) \u8d1f\u76f8\u5173\uff1b \\(\\rho_{_{XY}}=0\\) \u65f6\uff0c\u79f0 \\(X,Y\\) \u4e0d\u76f8\u5173\u6216\u96f6\u76f8\u5173\uff08\u4ec5\u4ec5\u5bf9\u4e8e\u7ebf\u6027\u5173\u7cfb\u6765\u8bf4\uff0c\u4e0e\u72ec\u7acb\u7684\u542b\u4e49\u4e0d\u540c\uff09\uff1b \\(\\rho_{_{XY}}=0\\) \u6709\u5982\u4e0b\u7b49\u4ef7\u6761\u4ef6\uff1a \\(Cov(X,Y)=0\\)\uff1b \\(E(XY)=E(X)E(Y)\\)\uff1b \\(Var(X\\pm Y)=Var(X)+Var(Y)\\)\uff1b \u6ce8\u610f\u533a\u5206\u72ec\u7acb\u6027\u548c\u76f8\u5173\u6027\uff1a
\\(X,Y\\) \u4e92\u76f8\u72ec\u7acb \\(\\;\\;\\Rightarrow \\;\\;\\) \\(X,Y\\) \u4e0d\u76f8\u5173\uff1b \\(X,Y\\) \u4e0d\u72ec\u7acb \\(\\;\\;\\Leftarrow \\;\\;\\) \\(X,Y\\) \u76f8\u5173\uff1b "},{"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":" \\(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 \\(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 \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 \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
\u8fd9\u79cd\u6536\u655b\u4e0d\u662f\u6570\u5b66\u610f\u4e49\u4e0a\u7684\u4e00\u822c\u6536\u655b\uff0c\u800c\u662f\u6982\u7387\u610f\u4e49\u4e0b\u7684\u4e00\u79cd\u6536\u655b\uff1b \u5176\u542b\u4e49\u662f\uff1a\\(Y_n\\) \u5bf9 \\(Y\\) \u7684\u7edd\u5bf9\u504f\u5dee\u4e0d\u5c0f\u4e8e\u4efb\u4f55\u4e00\u4e2a\u7ed9\u5b9a\u91cf\u7684\u53ef\u80fd\u6027\u968f \\(n\\) \u7684\u589e\u5927\u800c\u8d8a\u6765\u8d8a\u5c0f\uff1b\u6216\u8005\u7edd\u5bf9\u504f\u5dee \\(|Y_n-Y|\\) \u5c0f\u4e8e\u4efb\u4f55\u4e00\u4e2a\u7ed9\u5b9a\u91cf\u7684\u53ef\u80fd\u6027\u968f \\(n\\) \u7684\u589e\u5927\u65f6\u800c\u8d8a\u6765\u8d8a\u63a5\u8fd1\u4e8e \\(1\\)\uff1b \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} \\] \u5207\u6bd4\u96ea\u592b\u4e0d\u7b49\u5f0f\u662f\u9a6c\u5c14\u53ef\u592b\u4e0d\u7b49\u5f0f\u7684\u63a8\u8bba\uff1b \u5207\u6bd4\u96ea\u592b\u4e0d\u7b49\u5f0f\u5e94\u7528\u8303\u56f4\u66f4\u5e7f\uff0c\u4f46\u662f\u8ba1\u7b97\u7ed3\u679c\u66f4\u7c97\u7cd9\uff1b "},{"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\u4e3b\u8981\u8ba8\u8bba\u4ec0\u4e48\u6761\u4ef6\u4e0b\uff0c\u968f\u673a\u53d8\u91cf\u5e8f\u5217\u7684\u7b97\u672f\u5e73\u5747\u4f9d\u6982\u7387\u6536\u655b\u5230\u4e00\u4e2a\u7a33\u5b9a\u503c\uff08\u4f2f\u52aa\u5229\u5927\u6570\u5b9a\u5f8b\u4e2d\u7684\u6982\u7387\uff0c\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u4e2d\u7684\u5747\u503c\uff09\u3002 \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 \\] \u4f2f\u52aa\u5229\u5927\u6570\u5b9a\u5f8b\u5efa\u7acb\u4e86\u5728\u5927\u91cf\u91cd\u590d\u8bd5\u9a8c\u4e2d\u4e8b\u4ef6\u51fa\u73b0\u9891\u7387\u7684\u7a33\u5b9a\u6027\uff0c\u6b63\u56e0\u4e3a\u8fd9\u79cd\u7a33\u5b9a\u6027\uff0c\u6982\u7387\u7684\u6982\u5ff5\u624d\u6709\u5ba2\u89c2\u610f\u4e49\uff1b \u4f2f\u52aa\u5229\u5927\u6570\u5b9a\u5f8b\u8fd8\u63d0\u4f9b\u4e86\u901a\u8fc7\u8bd5\u9a8c\u6765\u786e\u5b9a\u4e8b\u4ef6\u6982\u7387\u7684\u65b9\u6cd5\uff1a\u65e2\u7136\u9891\u7387 \\(\\frac{n_A}{n}\\) \u4e0e\u6982\u7387 \\(p\\) \u6709\u8f83\u5927\u504f\u5dee\u7684\u53ef\u80fd\u6027\u5f88\u5c0f\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u505a\u8bd5\u9a8c\u6765\u786e\u5b9a\u67d0\u4e8b\u4ef6\u53d1\u751f\u7684\u9891\u7387\uff0c\u5e76\u628a\u5b83\u4f5c\u4e3a\u76f8\u5e94\u7684\u6982\u7387\u4f30\u8ba1\u3002\u8fd9\u662f\u4e00\u79cd\u53c2\u6570\u4f30\u8ba1\u6cd5\uff0c\u8be5\u65b9\u6cd5\u7684\u91cd\u8981\u7406\u8bba\u57fa\u7840\u4e4b\u4e00\u5c31\u662f\u5927\u6570\u5b9a\u5f8b\u3002 \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":" \u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8ba8\u8bba\u4ec0\u4e48\u6761\u4ef6\u4e0b\uff0c\u72ec\u7acb\u968f\u673a\u53d8\u91cf\u7684\u548c\u7684\u5206\u5e03\u51fd\u6570 \\(Y=\\sum X_i\\) \u4f1a\u6536\u655b\u4e8e\u6b63\u6001\u5206\u5e03\u3002 "},{"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":" \u603b\u4f53\u4e0e\u4e2a\u4f53\uff1a\u4e00\u4e2a\u7edf\u8ba1\u95ee\u9898\u603b\u6709\u5b83\u660e\u786e\u7684\u7814\u7a76\u5bf9\u8c61\uff0c\u7814\u7a76\u5bf9\u8c61\u7684\u5168\u4f53\u79f0\u4e3a\u603b\u4f53\uff08\u6bcd\u4f53\uff09\uff0c\u603b\u4f53\u4e2d\u7684\u6bcf\u4e2a\u6210\u5458\u79f0\u4e3a\u4e2a\u4f53\uff1b \u603b\u4f53\u5bb9\u91cf\uff1a\u603b\u4f53\u4e2d\u5305\u542b\u7684\u4e2a\u4f53\u6570\uff1b \u6709\u9650\u603b\u4f53\u662f\u5bb9\u91cf\u6709\u9650\u7684\u603b\u4f53\uff1b \u65e0\u9650\u603b\u4f53\u662f\u5bb9\u91cf\u65e0\u9650\u7684\u603b\u4f53\uff0c\u901a\u5e38\u5c06\u5bb9\u91cf\u975e\u5e38\u5927\u7684\u603b\u4f53\u4e5f\u6309\u65e0\u9650\u603b\u4f53\u5904\u7406\uff1b \u968f\u673a\u6837\u672c\uff1a\u4e3a\u63a8\u6d4b\u603b\u4f53\u7684\u5206\u5e03\u53ca\u5176\u5404\u79cd\u7279\u5f81\uff0c\u6309\u4e00\u5b9a\u89c4\u5219\u4ece\u603b\u4f53\u4e2d\u62bd\u53d6\u82e5\u5e72\u4e2a\u4f53\u8fdb\u884c\u89c2\u5bdf\u8bd5\u9a8c\uff0c\u4ee5\u83b7\u5f97\u5173\u4e8e\u603b\u4f53\u7684\u4fe1\u606f\uff0c\u8fd9\u4e00\u8fc7\u7a0b\u79f0\u4e3a\u62bd\u6837\uff0c\u6240\u62bd\u53d6\u7684\u90e8\u5206\u4e2a\u4f53\u79f0\u4e3a\u6837\u672c\uff0c\u901a\u5e38\u8bb0\u4e3a \\(X=(X_1,X_2,...,X_n)\\)\uff1b \u6837\u672c\u5bb9\u91cf\uff1a\u6837\u672c\u4e2d\u6240\u5305\u542b\u7684\u4e2a\u4f53\u6570\u76ee \\(n\\)\uff1b \u6ce8\u610f\uff0c\u6bcf\u4e00\u4e2a\u6837\u672c \\(X_i\\) \u90fd\u662f\u968f\u673a\u53d8\u91cf\uff0c\u7ef4\u6570\u4e0e\u603b\u4f53\u4e00\u81f4\uff1b \u7b80\u5355\u968f\u673a\u6837\u672c\uff1a\u6ee1\u8db3\u4ee3\u8868\u6027\u548c\u72ec\u7acb\u6027\u7684\u6837\u672c\u79f0\u4e3a\u7b80\u5355\u968f\u673a\u6837\u672c(Simple Random Sample)\uff0c\u83b7\u5f97\u7b80\u5355\u968f\u673a\u6837\u672c\u7684\u62bd\u6837\u65b9\u6cd5\u79f0\u4e3a\u7b80\u5355\u968f\u673a\u62bd\u6837\uff1b \u4ee3\u8868\u6027\uff1a\\(X_1,X_2,...,X_n\\) \u4e2d\u7684\u6bcf\u4e00\u4e2a\u4e0e\u6240\u8003\u5bdf\u7684\u603b\u4f53 \\(X\\) \u90fd\u6709\u76f8\u540c\u7684\u5206\u5e03\uff1b \u72ec\u7acb\u6027\uff1a\\(X_1,X_2,...,X_n\\) \u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff1b \u540e\u9762\u63d0\u5230\u7684\u6240\u6709\u6837\u672c\uff0c\u6307\u7684\u90fd\u662f\u7b80\u5355\u968f\u673a\u6837\u672c\u3002
\u82e5\u603b\u4f53\u6709\u5206\u5e03\u51fd\u6570 \\(F(x)\\)\uff0c\u5219\u6837\u672c\u5177\u6709\u8054\u5408\u5206\u5e03\u51fd\u6570 \\(F_n(x_1,x_2,...,x_n)=\\prod_{i=1}^{n}F(x_i)\\)\uff1b \u82e5\u603b\u4f53\u4e3a\u8fde\u7eed\u578b\uff08\u6216\u79bb\u6563\u578b\uff09\u968f\u673a\u53d8\u91cf\uff0c\u5176\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08\u6216\u5206\u5e03\u5f8b\uff09\u4e3a \\(f(x)\\)\uff0c\u5219\u6837\u672c\u5177\u6709\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\uff08\u6216\u8054\u5408\u5206\u5e03\u5f8b\uff09 \\(f_n(x_1,x_2,...,x_n)=\\prod_{i=1}^{n}f(x_i)\\) "},{"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
\u7edf\u8ba1\u91cf\u4ecd\u7136\u4e3a\u968f\u673a\u53d8\u91cf\uff1b \u7edf\u8ba1\u91cf\u7684\u5206\u5e03\uff08\u79f0\u4e3a\u62bd\u6837\u5206\u5e03\uff09\u4e00\u822c\u4e0e\u603b\u4f53\u5206\u5e03\u6709\u5173\uff0c\u53ef\u4ee5\u4f9d\u8d56\u672a\u77e5\u53c2\u6570\uff1b \u5f53\u6837\u672c\u7684\u89c2\u5bdf\u503c\u786e\u5b9a\u65f6\uff0c\u7edf\u8ba1\u91cf\u7684\u503c\u4e5f\u5c31\u968f\u4e4b\u786e\u5b9a\u4e86\uff1b "},{"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
\\(E(\\overline{X})=\\mu\\)\uff0c\\(Var(\\overline{X})=\\sigma^2/n\\) \\(\\sum_{i=1}^{n}(X_i-\\overline{X})=0\\)\uff1b \u6570\u636e\u89c2\u6d4b\u503c\u4e0e\u6837\u672c\u5747\u503c\u7684\u504f\u5dee\u5e73\u65b9\u548c\u6700\u5c0f\uff0c\u5373\u5728\u5f62\u5982 \\(\\sum(X_i-c)^2\\) \u7684\u51fd\u6570\u4e2d\uff0c\\(\\sum(X_i-\\overline{X})^2\\)\u6700\u5c0f\uff1b \u82e5\u603b\u4f53\u670d\u4ece \\(N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(\\overline{X}\\) \u7684\u7cbe\u786e\u5206\u5e03\u4e3a \\(N(\\mu,\\sigma^2/n)\\)\uff1b \u82e5\u603b\u4f53\u5206\u5e03\u672a\u77e5\u6216\u4e0d\u662f\u6b63\u6001\u5206\u5e03\uff0c\u5219\u5f53 \\(n\\) \u8f83\u5927\u65f6\uff0c\\(\\overline{X}\\) \u8fd1\u4f3c\u670d\u4ece \\(N(\\mu,\\sigma^2/n)\\)\uff1b "},{"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
\\(E(S^2)=\\sigma^2\\)\uff1b \\(\\sum(X_i-\\overline{X})^2=\\sum X_i^2-\\frac{1}{n}(\\sum X_i)^2=\\sum X_i^2-n\\overline{X}^2\\)\uff1b \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
\u5047\u8bbe \\(X_1,X_2,...,X_n\\) \u662f \\(X\\) \u4e2d\u62bd\u53d6\u7684\u6837\u672c\uff0c\\(\\mu_k=E(X^k)\\) \u5b58\u5728\uff0c\u7531\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u53ef\u77e5\uff1a \\(A_k=\\frac{1}{n}\\sum_{i=1}^{n}X_i^k\\xrightarrow{P}\\mu_k,\\;\\;k=1,2,...\\) \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
\u8bbe \\(X \\sim \\chi^2(n)\\)\uff0c\u5219\u6709 \\(E(X)=n\\)\uff0c\\(Var(X)=2n\\)\uff1b \u8bbe \\(Y_1 \\sim \\chi^2(m)\\)\uff0c\\(Y_2\\sim\\chi^2(n)\\)\uff0c\u4e14\u4e24\u8005\u4e92\u76f8\u72ec\u7acb\uff0c\u5219 \\(Y_1+Y_2\\sim \\chi^2(m+n)\\)\uff1b \u8fd9\u4e00\u6027\u8d28\u88ab\u79f0\u4e3a \\(\\chi^2\\) \u5206\u5e03\u7684\u53ef\u52a0\u6027\uff0c\u53ef\u4ee5\u63a8\u5e7f\u5230\u6709\u9650\u4e2a\u76f8\u52a0\u7684\u60c5\u5f62\uff1b \\(\\chi^2\\) \u5206\u5e03\u7684\u4e0a \\(\\alpha\\) \u5206\u4f4d\u6570\uff1a \u5bf9\u4e8e\u7ed9\u5b9a\u7684\u6b63\u6570 \\(\\alpha,\\;0<\\alpha<1\\)\uff0c\u79f0\u6ee1\u8db3\u6761\u4ef6 \\(P\\{\\chi^2>\\chi^2_\\alpha(n)\\}=\\int^{+\\infty}_{\\chi^2_\\alpha(n)}f_{\\chi^2}(x)\\mathrm{d}x=\\alpha\\) \u7684\u70b9 \\(\\chi^2_{\\alpha}(n)\\) \u4e3a \\(\\chi^2(n)\\) \u5206\u5e03\u7684\u4e0a \\(\\alpha\\) \u5206\u4f4d\u6570\uff1b
"},{"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
\u8bbe \\(T\\sim t(n)\\)\uff0c\u5219\u5f53 \\(n\\geq 2\\) \u65f6\uff0c\u6709 \\(E(T)=0\\)\uff1b\u5f53 \\(n\\geq 3\\) \u65f6\uff0c\u6709 \\(Var(T)=\\frac{n}{n-2}\\)\uff1b \u5f53 \\(n\\) \u8db3\u591f\u5927\u65f6\uff0c\\(t\\) \u5206\u5e03\u8fd1\u4f3c\u4e8e\u6807\u51c6\u6b63\u6001\u5206\u5e03 \\(N(0,1)\\)\uff1b \u8bbe \\(T\\sim t(n)\\)\uff0c\\(N\\sim N(0,1)\\)\uff0c\u5219\u5bf9\u4efb\u610f\u7684 \\(n\\geq 1\\)\uff0c\u90fd\u5b58\u5728 \\(a_0>0\\)\uff0c\u4f7f\u5f97 \\(P(|T|\\geq a_0)\\geq P(|N|\\geq a_0)\\)\uff1b \\(t_{1-\\alpha}(n)=-t_{\\alpha}(n)\\)\uff1b
"},{"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
\u8bbe \\(F\\sim F(n_1,n_2)\\)\uff0c\u5219 \\(F^{-1}\\sim F(n_2,n_1)\\)\uff1b \u8bbe \\(X\\sim t(n)\\)\uff0c\u5219 \\(X^2\\sim F(1,n)\\)\uff1b \\(F_{1-\\alpha}(n_1,n_2)=\\frac{1}{F_{\\alpha}(n_2,n_1)}\\)\uff1b
"},{"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
\\(\\overline{X}\\sim N(\\mu,\\frac{\\sigma^2}{n})\\)\uff1b \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff1b \\(\\overline{X}\\) \u4e0e \\(S^2\\) \u76f8\u4e92\u72ec\u7acb\uff1b \\(\\frac{\\overline{X} - \\mu}{S/\\sqrt{n}}\\sim t(n-1)\\)\uff1b \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
\\(\\frac{S_1^2/\\sigma_1^2}{S_2^2/\\sigma^2_2}\\sim F(n_1-1,n_2-1)\\)\uff1b \\(\\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 \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
\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 \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 \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
\u5982\u679c\u65b9\u7a0b\u4e2d\u5b58\u5728\u6052\u7b49\u5f0f\uff0c\u5219\u53ef\u4ee5\u987a\u5ef6\u6c42 \\(\\mu_{k+1},\\mu_{k+2},...\\)\uff1b \u7406\u8bba\u4e0a\u4efb\u610f \\(k\\) \u4e2a\u5173\u4e8e \\(\\mu_{i}\\) \u7684\u65b9\u7a0b\u7ec4\u90fd\u53ef\u4ee5\uff0c\u4f46\u8003\u8bd5\u8981\u6c42\u524d \\(k\\) \u4e2a\u624d\u7b97\u5bf9\uff1b "},{"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
\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 \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
\u89e3\u4f3c\u7136\u65b9\u7a0b \\(\\frac{\\partial L(\\theta)}{\\partial \\theta_i}=0\\)\uff0c\u68c0\u9a8c\u6781\u5927\u503c\u70b9\uff1b \u6216\u8005\u4e5f\u53ef\u4ee5\u89e3\u5bf9\u6570\u4f3c\u7136\u65b9\u7a0b \\(\\frac{\\partial \\ln L(\\theta)}{\\partial \\theta_i}=0\\)\uff0c\u68c0\u9a8c\u6781\u5927\u503c\u70b9\uff1b \u82e5 \\(L(\\theta)\\) \u5173\u4e8e\u67d0\u4e2a \\(\\theta_i\\) \u662f\u5355\u8c03\u7684\uff0c\u5219\u6700\u5927\u503c\u5728\u8fb9\u754c\u53d6\u5f97\uff1b \u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u6cd5\u7684\u6027\u8d28\uff1a
\u4e0d\u53d8\u539f\u5219\uff1a\u8bbe\u53c2\u6570 \\(\\theta\\) \u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u4e3a \\(\\hat\\theta\\) \u82e5 \\(g(\\cdot)\\) \u4e3a\u8fde\u7eed\u51fd\u6570\uff0c\u5219 \\(g(\\theta)\\) \u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u4e3a \\(g(\\hat{\\theta})\\)\uff1b "},{"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
\u82e5 \\(E(\\hat{\\theta})\\not=\\theta\\)\uff0c\u5219\u79f0 \\(|E(\\hat{\\theta})-\\theta|\\) \u4e3a\u4f30\u8ba1\u91cf \\(\\hat\\theta\\) \u7684\u504f\u5dee\uff1b \u82e5 \\(\\lim_{n\\to+\\infty}E(\\hat{\\theta})=0\\)\uff0c\u5219\u79f0 \\(\\hat{\\theta}\\) \u662f \\(\\theta\\) \u7684\u6e10\u8fdb\u65e0\u504f\u4f30\u8ba1(Asymptotic Unbiased Estimation)\uff1b "},{"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
\u82e5 \\(\\hat\\theta\\) \u662f\u53c2\u6570 \\(\\theta\\) \u7684\u65e0\u504f\u4f30\u8ba1\u91cf\uff0c\u5219\u6709 \\(Mse(\\hat\\theta)=Var(\\hat\\theta)\\)\uff1b \u5747\u65b9\u8bef\u5dee\u6709\u5206\u89e3\u5f0f \\(E[(\\hat\\theta-\\theta)^2]=Var(\\hat\\theta)+(E(\\hat\\theta)-\\theta)^2\\)\uff1b \u5747\u65b9\u8bef\u5dee\u51c6\u5219\u5e38\u7528\u4e8e\u6709\u504f\u4f30\u8ba1\u91cf\u4e4b\u95f4\uff0c\u6216\u6709\u504f\u4f30\u8ba1\u91cf\u4e0e\u65e0\u504f\u4f30\u8ba1\u91cf\u4e4b\u95f4\u7684\u6bd4\u8f83\uff1b\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u6709\u65f6\u5747\u65b9\u8bef\u5dee\u51c6\u5219\u6bd4\u65e0\u504f\u6027\u51c6\u5219\u66f4\u52a0\u91cd\u8981\uff1b "},{"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
\u8bbe \\(\\hat\\theta_n\\) \u662f \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u91cf\uff0c\u82e5 \\(\\lim_{n\\to \\infty}E(\\hat\\theta)=\\theta\\)\uff0c\\(\\lim_{n\\to\\infty}Var(\\hat\\theta_n)=0\\)\uff0c\u5219 \\(\\hat\\theta_n\\) \u662f \\(\\theta\\) \u7684\u76f8\u5408\u4f30\u8ba1\u3002 "},{"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
\u7f6e\u4fe1\u533a\u95f4\uff1a\u8bbe\u603b\u4f53 \\(X\\) \u7684\u5206\u5e03\u51fd\u6570 \\(F(x;\\theta)\\) \u542b\u6709\u4e00\u4e2a\u672a\u77e5\u53c2\u6570 \\(\\theta\\)\uff0c\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u503c \\(\\alpha\\)\uff0c\u5982\u679c\u6709\u4e24\u4e2a\u7edf\u8ba1\u91cf \\(\\theta_{L}=\\theta_{L}(X_1,X_2,...,X_n)\\)\uff0c\\(\\theta_{U}=\\theta_{U}(X_1,X_2,...,X_n)\\)\uff0c\\(\\theta_{L}<\\theta_{U}\\)\uff0c\u4f7f\u5f97 \\(P\\{ \\theta_{L}(X_1,X_2,...,X_n) < \\theta < \\theta_{U}(X_1,X_2,...,X_n) \\}\\geq 1-\\alpha \\;\\;,\\;\\; \\forall \\theta \\in \\Theta\\)\uff0c\u5219\u79f0\u968f\u673a\u533a\u95f4 \\([\\theta_{L},\\theta_{U}]\\) \u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha\\) \u7684\u53cc\u4fa7\u7f6e\u4fe1\u533a\u95f4\uff0c\u7b80\u79f0\u7f6e\u4fe1\u533a\u95f4\uff1b \u7f6e\u4fe1\u4e0b\u9650\u548c\u7f6e\u4fe1\u4e0a\u9650\uff1a\u5206\u522b\u662f \\(\\theta_{L}\\) \u548c \\(\\theta_{U}\\)\uff1b \u7f6e\u4fe1\u5ea6\uff08\u7f6e\u4fe1\u6c34\u5e73\uff09\uff1a\\(1-\\alpha\\)\uff1b \u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\uff1a\u5728\u7f6e\u4fe1\u533a\u95f4\u7684\u5b9a\u4e49\u4e2d\uff0c\u5982\u679c\u4fee\u6539\u4e3a \\(P\\{ \\theta_{L}(X_1,X_2,...,X_n) < \\theta \\}\\geq 1-\\alpha \\;\\;,\\;\\; \\forall \\theta \\in \\Theta\\)\uff0c\u5219\u79f0\u968f\u673a\u533a\u95f4 \\([\\theta_{L},+\\infty]\\) \u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha\\) \u7684\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\uff1b \u76f8\u5e94\u5730\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u5355\u4fa7\u7f6e\u4fe1\u4e0b\u9650\uff0c\u4ee5\u53ca\u5177\u6709\u5355\u4fa7\u7f6e\u4fe1\u4e0a\u9650\u7684\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4 \\((-\\infty,\\theta_{U})\\)\uff1b \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":" \u7f6e\u4fe1\u5ea6\u539f\u5219\uff1a \u5e0c\u671b\u968f\u673a\u533a\u95f4 \\([\\theta_{L},\\theta_{U}]\\) \u5305\u542b\u771f\u503c \\(\\theta\\) \u7684\u6982\u7387\u8d8a\u5927\u8d8a\u597d\uff1b \u7cbe\u786e\u5ea6\u539f\u5219\uff1a \u53ef\u4ee5\u7528\u968f\u673a\u533a\u95f4\u7684\u5e73\u5747\u957f\u5ea6 \\(E(\\theta_{U}-\\theta_{L})\\) \u53bb\u8861\u91cf\uff0c\u5e0c\u671b\u5176\u8d8a\u77ed\u8d8a\u597d\uff1b\u5e76\u79f0\u4e8c\u5206\u4e4b\u4e00\u533a\u95f4\u7684\u5e73\u5747\u957f\u5ea6\u4e3a\u7f6e\u4fe1\u533a\u95f4\u7684\u8bef\u5dee\u9650\uff1b \u8fd9\u662f\u4e00\u5bf9\u77db\u76fe\u7684\u6807\u51c6\uff0c\u73b0\u5b9e\u5e94\u7528\u4e2d\u6211\u4eec\u901a\u5e38\u5e0c\u671b\u5728\u4fdd\u8bc1\u7f6e\u4fe1\u5ea6\u7684\u524d\u63d0\u4e0b\uff0c\u5c3d\u53ef\u80fd\u63d0\u9ad8\u7cbe\u786e\u5ea6\uff1b "},{"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
\u6784\u9020\u67a2\u8f74\u91cf \\(G(X;\\theta)\\)\uff1b \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 \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
\u82e5\u8981\u6c42\u5355\u4fa7\u7f6e\u4fe1\u9650\uff0c\u53ea\u9700\u8981\u5c06 \\(P\\{ a<G(X;\\theta)<b \\}\\geq 1-\\alpha\\) \u76f8\u5e94\u5730\u6539\u4e3a \\(P\\{ a<G(X;\\theta) \\}\\geq 1-\\alpha\\) \u6216 \\(P\\{ G(X;\\theta)<b \\}\\geq 1-\\alpha\\) \u5373\u53ef\uff1b \u67a2\u8f74\u91cf\u548c\u7edf\u8ba1\u91cf\u7684\u533a\u522b\uff1a \u67a2\u8f74\u91cf\u662f\u6837\u672c\u548c\u5f85\u4f30\u53c2\u6570\u7684\u51fd\u6570\uff0c\u5176\u5206\u5e03\u4e0d\u4f9d\u8d56\u4e8e\u4efb\u4f55\u672a\u77e5\u53c2\u6570\uff1b \u7edf\u8ba1\u91cf\u53ea\u662f\u6837\u672c\u7684\u51fd\u6570\uff0c\u5176\u5206\u5e03\u5e38\u4f9d\u8d56\u4e8e\u672a\u77e5\u53c2\u6570\uff1b "},{"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
\u6bd4\u8f83\u5747\u503c\uff08\u4f30\u8ba1 \\(\\mu_1-\\mu_2\\)\uff0c\u4e5f\u79f0\u4e3a Behrens-Fisher \u95ee\u9898\uff09\uff1b \u6bd4\u8f83\u65b9\u5dee\uff08\u4f30\u8ba1 \\(\\frac{\\sigma_1^2}{\\sigma_2^2}\\)\uff09\uff1b 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
\u6a59\u4e66 P314 \u7eff\u4e66 P211 "},{"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":" \u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b \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 \u6839\u636e\u5b9e\u9645\u6837\u672c\u4f5c\u51fa\u5224\u65ad\uff1b \u6216\u8005
\u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b \u8ba1\u7b97\u68c0\u9a8c\u7edf\u8ba1\u91cf\u7684\u89c2\u5bdf\u503c\u548c\\(P\\_\\)\u503c\uff1b \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":" \u51af\u00b7\u8bfa\u4f9d\u66fc\u7ed3\u6784\uff1a\u4e00\u79cd\u5c06\u7a0b\u5e8f\u6307\u4ee4\u5b58\u50a8\u5668\u548c\u6570\u636e\u5b58\u50a8\u5668\u5408\u5e76\u5728\u4e00\u8d77\u7684\u7535\u8111\u8bbe\u8ba1\u6982\u5ff5\u7ed3\u6784\u3002 \u95ee\u4f60\u4e00\u4e2achar
\u578b\u53d8\u91cf\u7684\u503c\u662f\u591a\u5c11\uff0c\u8981\u4e48\u8bb0\u5f97\u5f15\u53f7\uff0c\u8981\u4e48\u8bb0\u5f97\u7528ASCII C\u8bed\u8a00\u7a0b\u5e8f\u6613\u4e8e\u79fb\u690d \u4e0e\u786c\u4ef6\u6709\u5173\u7684\u56e0\u7d20\u88ab\u4ece\u8bed\u8a00\u4e3b\u4f53\u4e2d\u5206\u79bb\u51fa\u6765 C\u8bed\u8a00\u6570\u636e\u7c7b\u578b\u68c0\u67e5\u4e0d\u4e25\u683c C\u8bed\u8a00\u8868\u8fbe\u5f0f\u51fa\u73b0\u4e8c\u4e49\u6027 C\u8bed\u8a00\u4e0d\u80fd\u81ea\u52a8\u68c0\u67e5\u6570\u636e\u8d8a\u754c \u6570\u636e\u6587\u4ef6\u53ef\u5206\u4e3a\u6587\u672c\u6587\u4ef6\u548c\u4e8c\u8fdb\u5236\u6587\u4ef6 \u6587\u4ef6\u7684\u6570\u636e\u6d41\u53c8\u5206\u4e3a\u5b57\u7b26\u6d41\u548c\u4e8c\u8fdb\u5236\u6d41 \u4e0b\u9762\u8fd9\u4e9b\u8bf4\u6cd5\u90fd\u6ca1\u9519\uff0c\u4f46\u662f\u6211\u60f3\u5230\u4e86\u66f4\u597d\u7684\u8bf4\u6cd5\u6240\u4ee5\u5212\u4e86\u4ed6\u4eec typedef
\u6570\u7ec4\u7684\u683c\u5f0f\u5982\u4e0b\uff1a \u5219\u4e0b\u9762\u4e24\u4e2a\u7b49\u6548\uff1a \u4f46\u7cfb\u7edf\u5bf9\u4ed6\u4eec\u7684\u7c7b\u578b\u8ba4\u5b9a\u4e0d\u540c\uff0carray
\u4f5c\u4e3a\u4e00\u4e2a\u65b0\u7684~~type~~
\u5b58\u5728 typedef
\u7684\u5b9a\u4e49\u7c7b\u4f3c\u4e8e\u53d8\u91cf\u7684\u5b9a\u4e49\uff1a \u300ceg\u300d\u4e8c\u7ea7\u6307\u9488\u6570\u7ec4\uff1atypedef int **P[10];
\u4e4b\u540e\u4f60\u53ef\u4ee5\u7528P
\u4ee3\u8868\u4e00\u4e2a\u6307\u5411\u4e00\u4e2a\u6307\u5411\u6574\u578b\u7684\u6307\u9488\u7684\u6307\u9488\u768410\u7ef4\u6570\u7ec4\u7684\u7c7b\u578b\uff0810\u4e2a\u4e8c\u7ea7\u6307\u9488\uff09 \u300ceg\u300d\u4e00\u7ea7\u6570\u7ec4\u6307\u9488\uff1atypedef int (*P)[10];
\u4e4b\u540e\u4f60\u53ef\u4ee5\u7528P
\u4ee3\u8868\u4e00\u4e2a\u6307\u541110\u7ef4\u6570\u7ec4\u7684\u6307\u9488\u7684\u7c7b\u578b(1\u4e2a\u4e00\u7ea7\u6307\u9488) \u76f8\u5173\u5185\u5bb9\uff1a\u8fd9\u91cc typedef
\u7684\u5185\u5bb9\u4e00\u822c\u7528\u5927\u5199\u5355\u8bcd(\u6bd4\u5982FILE)\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u81ea\u5b9a\u4e49\u7c7b\u578b\uff0c\u4f46\u4e0d\u7528\u5927\u5199\u4e5f\u4e0d\u4f1a\u51fa\u9519 break;
\u53ef\u4ee5\u51fa\u73b0\u5728loop\u6216\u8005switch\u5185 \u8981\u5c0f\u5fc3\u85cf\u5728\u53c2\u6570\u8868\u91cc\u7684\u7c7b\u578b\u8f6c\u6362 \u9898\u9762\u7b54\u6848 \u5982\u4e0b\u7a0b\u5e8f\u7684\u8f93\u51fa\u4e3a___\u3002 #include <stdio.h>\n\ndouble myFunction(int x){\nreturn x;\n}\n\nint main(){\nprintf(\"%lf\",myFunction(3.14));\n}\n
3 \u56e0\u4e3a 3.14 \u5728\u4f20\u5165 myFunction(int)
\u65f6\u53d1\u751f\u4e86\u7c7b\u578b\u8f6c\u6362\u3002
\u8fd9\u4e2a\u62a5\u9519
#include<stdio.h>\n\n{}\n\nint main(){\n}\n
\u8fd9\u4e2a\u4e0d\u62a5\u9519
#include<stdio.h>\n\nint main(){\n{}\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 \u5bf9\u4e8e\u5e38\u6570\uff1a sizeof(1) = 4
sizeof(1ll) = 8
sizeof(1.0) = 8
sizeof(1.0f) = 4
sizeof()
\u662f\u4e00\u4e2a\u8fd0\u7b97\u7b26\uff0c\u4e0d\u662f\u51fd\u6570\uff0c\u800c\u4e14\u5728\u7f16\u8bd1\u9636\u6bb5\u5c31\u5b8c\u6210\u66ff\u6362\u3002 \u5982\u679c k
\u7684\u7c7b\u578b\u53608B\u5185\u5b58\uff0c\u5219 sizeof(++k)
\u5728\u7f16\u8bd1\u9636\u6bb5\u88ab\u66ff\u6362\u4e3a8\uff0c\u800c k
\u7684\u503c\u4e0d\u4f1a\u6539\u53d8 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u7f16\u8bd1\u7f16\u8bd1\u9884\u5904\u7406","title":"\u7f16\u8bd1\u3001\u7f16\u8bd1\u9884\u5904\u7406","text":" \u7f16\u8bd1\u9884\u5904\u7406 \u7f16\u8bd1\u9884\u5904\u7406\u662f C \u8bed\u8a00\u7f16\u8bd1\u7a0b\u5e8f\u7684\u7ec4\u6210\u90e8\u5206\uff0c\u7528\u4e8e\u89e3\u91ca\u5904\u7406 C \u8bed\u8a00\u7a0b\u5e8f\u4e2d\u7684\u9884\u5904\u7406\u6307\u4ee4\uff08\u7279\u5f81\u662f\u4ee5 #
\u5f00\u5934\uff0c\u5b83\u4eec\u4e0d\u662f\u771f\u6b63\u7684 C \u8bed\u53e5\uff09 \u7f16\u8bd1\u9884\u5904\u7406\u5728\u6b63\u5f0f\u7f16\u8bd1\u4e4b\u524d #include
\u5982\u679c\u540e\u9762\u662f <xxx>
\uff0c\u5219\u5c06\u4f7f\u7528 C \u8bed\u8a00\u7684\u6807\u51c6\u5934\u6587\u4ef6 \u5982\u679c\u540e\u9762\u662f \"xxx\"
\uff0c\u5c06\u5148\u5230\u5f53\u524d\u5de5\u4f5c\u76ee\u5f55\u5bfb\u627e\u88ab\u5305\u542b\u7684\u6587\u4ef6\uff0c\u627e\u4e0d\u5230\u5219\u53bb\u7cfb\u7edf include
\u76ee\u5f55\u5bfb\u627e \u5b8f \u57fa\u672c\u683c\u5f0f #define \u5b8f\u540d(\u5b8f\u53c2) \u5b8f\u5b9a\u4e49\u5b57\u7b26\u4e32
\u5b8f\u53ea\u662f\u7eaf\u7cb9\u7684\u5bf9\u4ee3\u7801\u7684\u5b57\u7b26\u4e32\u66ff\u6362\uff01 \u6761\u4ef6\u7f16\u8bd1
#define FLAG 1\n#if FLAG\n//\u7a0b\u5e8f\u6bb51\n#else\n//\u7a0b\u5e8f\u6bb52\n#endif\n
\u7531\u4e8e\u8fd9\u4e9b\u90fd\u5728\u9884\u7f16\u8bd1\u4e2d\u5904\u7406\uff1a
#if
\u540e\u9762\u7684\u6761\u4ef6\u53ea\u80fd\u662f\u5b8f\u540d \u4e0d\u5728\u6761\u4ef6\u9009\u62e9\u8303\u56f4\u5185\u7684\u4ee3\u7801\u4e0d\u4f1a\u88ab\u7f16\u8bd1 \u7f16\u8bd1\u7a0b\u5e8f \u9996\u5148\u8981\u5bf9 \u6e90\u7a0b\u5e8f \u8fdb\u884c \u8bcd\u6cd5\u5206\u6790\uff0c\u7136\u540e\u8fdb\u884c \u8bed\u6cd5\u5206\u6790 \u548c\u8bed\u4e49\u5206\u6790
\u7f16\u5199\u7a0b\u5e8f -> \u7f16\u8bd1\u751f\u6210\u4e8c\u8fdb\u5236obj\u76ee\u6807\u7a0b\u5e8f\u6587\u4ef6 ->\u4e0e\u5e93\u51fd\u6570\u8fdb\u884c\u8fde\u63a5\uff0c\u5f62\u6210exe\u53ef\u6267\u884c\u6587\u4ef6 "},{"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":" sqrt(x)
\\(\\sqrt x\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b pow(x,n)
\\(x^n\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b exp(x)
\\(e^x\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b fabs(x)
\\(|x|\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b log(x)
\\(\\ln{x}\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b "},{"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":" \u5206\u652f\u8bed\u53e5\u6d4b\u8bd5\u6570\u636e\u81f3\u5c11\u9700\u8981\u51e0\u7ec4\u95ee\u9898\uff1a\u8981\u6ce8\u610f\u6570\u636e\u8fb9\u754c\u4e5f\u8981\u7b97\u4e00\u7ec4: \u5982\u4e0b\u5206\u652f\u8bed\u53e5\u9700\u8981\u8bbe\u8ba1\u81f3\u5c11___\u7ec4\u6d4b\u8bd5\u6570\u636e\uff1f \u9898\u9762\u7b54\u6848 if(x < 60){\n//\u8bed\u53e5\n}\n
\u7b54\u6848\uff1a3 \u89e3\u6790\uff1ax < 60
x = 60
x > 60
switch()
\u8bed\u53e5 \u9664\u4e86\u5e26\u5f15\u53f7\u7684\u5b57\u7b26\uff0ccase
\u540e\u9762\u8981\u6253\u7a7a\u683c\uff0c\u4e0d\u6253\u7a7a\u683c\u53ef\u80fd\u80fd\u8fc7\u7f16\u8bd1\u4f46\u662f\u65e0\u6cd5\u6b63\u5e38\u5224\u65ad case 'a'
\u6709\u6548 case'a'
\u6709\u6548 casea
\u65e0\u6548 case1
\u65e0\u6548 case
\u540e\u8ddf\u7684\u5fc5\u987b\u662f\u4e0d\u91cd\u590d\u7684\u5e38\u91cf\u8868\u8fbe\u5f0f\uff0c\u4e0d\u53ef\u4ee5\u662f\u53d8\u91cf\u53c2\u4e0e\u7684\u8868\u8fbe\u5f0f \u4e0d\u6253 break
\u4f1a\u4ece\u7b26\u5408\u6761\u4ef6\u7684 case
\u5f00\u59cb\u4e00\u76f4\u5f80\u4e0b\u5230\u5e95\u6216\u8005\u4e4b\u540e\u7b2c\u4e00\u4e2a break
\u6240\u4ee5 break;
\u4e0d\u4e00\u5b9a\u53ea\u80fd\u51fa\u73b0\u5728\u5faa\u73af\u91cc
C\u8bed\u8a00\u7684\u903b\u8f91\u8fd0\u7b97\u5177\u6709\u7701\u7565\u7279\u6027\uff1a\u5f53\u524d\u4e00\u4e2a\u8868\u8fbe\u5f0f\u5df2\u7ecf\u80fd\u591f\u51b3\u5b9a\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u503c\u7684\u65f6\u5019\uff0c\u4e0d\u8ba1\u7b97\u540e\u9762\u90a3\u4e2a\u8868\u8fbe\u5f0f
\u9898\u9762\u7b54\u6848 \u4e0b\u5217\u7a0b\u5e8f\u6bb5\u7ed3\u675f\u540e x
\u548c y
\u7684\u503c\u5206\u522b\u4e3a___ \uff0c ___\u3002 int x = 0 , y = 0;\nif((++x) || (++y)){\n//\u8bed\u53e5\n}\n
\u7b54\u6848\uff1a1\uff0c0 "},{"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
\u4e00\u65e6\u5728\u7a0b\u5e8f\u4e2d\u5b9a\u4e49\u4e86\u53d8\u91cf\uff0c\u8ba1\u7b97\u673a\u5728\u6267\u884c\u8fc7\u7a0b\u4e2d\u4f1a\u6839\u636e\u53d8\u91cf\u7684\u7c7b\u578b\u5206\u914d\u76f8\u5e94\u7684\u5185\u5b58\u5355\u5143\u4f9b\u53d8\u91cf\u4fdd\u5b58\u6570\u636e \u81ea\u52a8\u53d8\u91cf\u7684\u5b9a\u4e49\u4e3a\uff1aauto \u7c7b\u578b \u53d8\u91cf\u8868;
\u4e00\u822c\u60c5\u51b5\u4e0b auto
\u53ef\u4ee5\u7701\u7565 \u81ea\u52a8\u53d8\u91cf\u4f1a\u81ea\u52a8\u5206\u914d\u56de\u6536\u5185\u5b58 \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 ... \u9759\u6001\u5c40\u90e8\u53d8\u91cf\u7684\u5185\u5b58\u5b58\u50a8\u5728\u9759\u6001\u5b58\u50a8\u533a\u4e2d\uff0c\u751f\u547d\u5468\u671f\u6301\u7eed\u5230\u7a0b\u5e8f\u7ed3\u675f\uff0c\u4e0d\u4f1a\u5728\u9000\u51fa\u51fd\u6570\u7684\u65f6\u5019\u88ab\u56de\u6536\uff0c\u4e0b\u4e00\u6b21\u4f7f\u7528\u540e\u4f1a\u88ab\u91cd\u65b0\u6fc0\u6d3b \u4e0e\u52a8\u6001\u5168\u5c40\u53d8\u91cf\u76f8\u6bd4\uff0c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u5728\u5f53\u524d\u6587\u4ef6\u5185\uff0c\u52a8\u6001\u5168\u5c40\u53d8\u91cf\u5728\u591a\u6587\u4ef6\u9879\u76ee\u4e2d\u5728\u6bcf\u4e00\u4e2a\u6587\u4ef6\u90fd\u53ef\u4ee5\u7528 \u9759\u6001\u53d8\u91cf\u7684\u5b9a\u4e49\u4e3a\uff1astatic \u7c7b\u578b \u53d8\u91cf\u8868;
\u9759\u6001\u53d8\u91cf\u521d\u503c\u9ed8\u8ba4\u4e3a 0
"},{"location":"cour_note/D1QD_CXiaoCheng/#\u8865\u7801","title":"\u8865\u7801","text":" \u4e3a\u4e86\u65b9\u4fbf\u8ba1\u7b97\u673a\u5185\u7684\u8fd0\u7b97\uff0c\u4e00\u822c\u7528\u8865\u7801\u8868\u793a\u6570\u503c -\u8865\u7801\u7684\u8ba1\u7b97\uff1a\u8d1f\u6570\u9664\u4e86\u7b26\u53f7\u4f4d\u53d6\u53cd\u52a0\u4e00 \u300ceg\u300d\u4e24\u4e2a\u5b57\u8282\u5b58\u50a8-17\uff1a \u539f\u7801\uff1a1000``0000
0001``0001
\u53cd\u7801\uff1a1111``1111
1110``1110
\u8865\u7801\uff1a1111``1111
1110``1111
\u4f7f\u7528\u8865\u7801\u65b9\u4fbf\u7684\u539f\u56e0\u662f\uff1a\u5904\u7406\u8d1f\u6570\u548c\u6574\u6570\u76f8\u52a0\uff0c\u5b9e\u9645\u4e0a\u662f\u505a\u540c\u4f59\u8fd0\u7b97\uff1a \\(-3\\) = \\((1101)_{\u8865\u7801}\\) \\(6\\) = \\((0110)_{\u8865\u7801}\\) \\(-3 + 6\\) = \\((1101)_{\u8865\u7801} + (0110)_{\u8865\u7801}\\) = \\((0011)_{\u8865\u7801}\\) = \\(3\\) \u4f46\u662f\u5982\u679c\u628a\u8865\u7801\u90fd\u5f53\u505a\u662f\u67d0\u4e2a\u6570\u7684\u539f\u7801\u5462\uff1f \\((1101)_{\u539f\u7801}\\) = \\(13\\) \\((0110)_{\u539f\u7801}\\) = \\(6\\) \\((0110)_{\u539f\u7801}\\) + \\((1101)_{\u539f\u7801}\\) = \\(13+6\\) = \\(19\\) = \\((0011)_{\u539f\u7801} + (10000)_{\u539f\u7801}\\) \u663e\u7136\uff0c\u8fd9\u91cc\u7684 10000
\u6ea2\u51fa\u4e86\uff0c\u662f\u4e0d\u662f\u5f88\u50cf\u53d6\u6a21\uff1f \\(19 \\equiv 3 \\mod 16\\) \u800c\u8fd9\u4e2a 16
\u5c31\u662f\\(2^4\\)\uff0c\u8fd9\u4e2a4
\u662f\u4ec0\u4e48\u663e\u800c\u6613\u89c1 \u6240\u4ee5\u5b9e\u9645\u4e0a\u7684\u903b\u8f91\u5c31\u662f\uff1a \u5229\u7528\u7b26\u53f7\u4f4d\u628a x
\u4e2a\u5b57\u8282\u7684\u50a8\u5b58\u5b57\u8282\u5206\u6210\u4e24\u90e8\u5206\uff0c\u5176\u4e2d\\(0 \\;\\;\\sim\\;\\; (2^{8x-1}-1)\\)\u8868\u793a\u975e\u8d1f\u6570\u7684\u5b58\u50a8\u8303\u56f4\uff0c \\(2^{8x-1} \\;\\;\\sim\\;\\; (2^{8x}-1)\\)\u8868\u793a\u8d1f\u6570\u7684\u5b58\u50a8\u8303\u56f4\uff0c\u5e76\u901a\u8fc7\u4e0a\u9762\u63d0\u5230\u7684\u8f6c\u6362\u65b9\u5f0f\u5bf9\u8d1f\u6570\u8fdb\u884c\u987a\u5e8f\u6620\u5c04 \u8fdb\u884c\u8fd0\u7b97\u65f6\uff0c\u7b97\u4e0a\u7b26\u53f7\u4f4d\u53c2\u4e0e\u8fd0\u7b97\uff0c\u7b97\u51fa\u6765\u7684\u4e1c\u897f\u6574\u4e2a\u518d\u4f5c\u4e3a\u7b54\u6848\u7684\u8865\u7801 \u4e00\u8a00\u4ee5\u853d\u4e4b\uff0c\u5728\u5bf916\u53d6\u4f59\u2014\u2014\u4ea6\u5373\u8d85\u8fc74Bits\u90fd\u5c06\u6ea2\u51fa \u7684\u60c5\u51b5\u4e0b\uff0c\u201c+13\u201d\u4e0e\u201c-3\u201d\u662f\u7b49\u4ef7\u7684\uff0c\u8fd9\u5c31\u662f\u4ece\u53d6\u6a21\u89d2\u5ea6\u6765\u7406\u89e3\u201c\u8865\u7801\u201d\u3002 \u800c\u65e0\u7b26\u53f7\u6574\u6570\u5c31\u662f\u5c06\u539f\u6765\u5b58\u50a8\u8d1f\u6570\u7684\u8fd9\u90e8\u5206\u4f5c\u4e3a\u6574\u6570\u7684\u5ef6\u7eed\u90e8\u5206
\u5bf9\u4e8e\u5404\u7c7b\u578b\u6574\u578b\u6570\u636e\u7684\u957f\u5ea6\u4ec5\u6709\u5df2\u4e0b\u8981\u6c42\uff1a
\\(sizeof(\\text{short}) \\leq sizeof(\\text{int}) \\leq sizeof(\\text{long})\\) \u6574\u578b\u5e38\u91cf\u7684\u89c4\u5219\uff1a
\u524d\u7f00\uff1a -\u5341\u8fdb\u5236\u9996\u4f4d\u6570\u5b57\u5fc5\u987b\u975e0 \u300ceg\u300d\uff1a114514
-\u516b\u8fdb\u5236\u9996\u4f4d\u6570\u5b57\u5fc5\u987b\u662f0 \u300ceg\u300d\uff1a01616210
-\u5341\u516d\u8fdb\u5236\u5f00\u5934\u5fc5\u987b\u662f0x\u62160X \u300ceg\u300d\uff1a0xfff
\u540e\u7f00\uff1a\uff08\u5927\u5c0f\u5199\u4e0d\u654f\u611f\uff09 L \u8868\u793a\u957f\u6574\u578b \u300ceg\u300d\uff1a123456L
LL \u8868\u793a\u957f\u957f\u6574\u578b \u300ceg\u300d\uff1a123456LL
U \u8868\u793a\u65e0\u7b26\u53f7\u6574\u578b \u300ceg\u300d\uff1a123456U
U\u548cL\u53ef\u4ee5\u6df7\u5408\u4f7f\u7528\uff0c\u4e0d\u654f\u611f\u987a\u5e8f "},{"location":"cour_note/D1QD_CXiaoCheng/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":" \u7b97\u6570\u8fd0\u7b97\u7b26\u7684\u51e0\u4e2a\u89c4\u5219\uff1a \u6574\u6570\u9664\u6cd5\u5f97\u5230\u6574\u6570(\u5206\u5b50\u6216\u5206\u6bcd\u4efb\u610f\u4e00\u4e2a\u4e3a\u6d6e\u70b9\u6570\u5373\u53ef\u81ea\u52a8\u7c7b\u578b\u8f6c\u6362\u540e\u505a\u6d6e\u70b9\u8fd0\u7b97) -\u53d6\u4f59\u8fd0\u7b97\u4ec5\u5bf9\u6574\u578b\u6570\u636e\u4f7f\u7528 +
-
\u53ef\u505a\u5355\u76ee\u8fd0\u7b97\u7b26\u8868\u793a\u6b63\u8d1f \u53cc\u76ee\u8fd0\u7b97\u7b26\u4f1a\u4fdd\u8bc1\u4e24\u4fa7\u7684\u6570\u636e\u7c7b\u578b\u76f8\u540c(\u5bf9\u4e8e\u4e0d\u540c\u7684\u8f93\u5165\u6570\u636e\u4f1a\u8fdb\u884c\u81ea\u52a8\u7c7b\u578b\u8f6c\u6362) \u81ea\u52a8\u7c7b\u578b\u8f6c\u6362\uff1a \u975e\u8d4b\u503c\u8fd0\u7b97\uff1a\u603b\u662f\u7531\u4f4e\u5411\u9ad8\u8f6c\u6362 \u8d4b\u503c\u8fd0\u7b97\uff1a\u8f6c\u6362\u4e3a\u88ab\u8d4b\u503c\u7684\u53d8\u91cf\u7c7b\u578b "},{"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":" C\u8bed\u8a00\u89c4\u5b9a\uff0c\u6570\u7ec4\u540d\u8868\u793a\u8be5\u6570\u7ec4\u6240\u5206\u914d\u8fde\u7eed\u5185\u5b58\u7a7a\u95f4\u4e2d\u7b2c\u4e00\u4e2a\u5355\u5143\u7684\u5730\u5740\uff0c\u5373\u9996\u5730\u5740 \u4e8c\u7ef4\u6570\u7ec4\u7684\u5185\u5b58\u5b58\u653e\u4ecd\u7136\u91c7\u53d6\u987a\u5e8f\u5b58\u653e\uff0c\u5373\u6570\u7ec4 a[3][2]
\u4e2d a[1][1]
\u7684\u5730\u5740\u4e0e a[2][0]
\u76f8\u90bb \u4e8c\u7ef4\u6570\u7ec4\u7533\u8bf7\u65f6\u5982\u679c\u521d\u59cb\u5316\u53ef\u4ee5\u7701\u7565\u884c\u957f\u5ea6\uff0c\u5982 a[][3] = {1,2,3,4,5,6,7}
\u5bf9\u4e8e\u4e8c\u7ef4\u6570\u7ec4 a[x][y]
\uff1a\uff08x,y\u662f\u4e24\u4e2a\u5e38\u6570\uff09 &a
\u8868\u793a\u6570\u7ec4\u5730\u5740\uff0c&a+1
\u8868\u793a\u7684\u6570\u7ec4\u672b\u5c3e\u540e\u7684\u5730\u5740 \u5373\uff1a&a+1
= (&a
) + \\(1\\times x\\times y\\times sizeof(\\text{element})\\) a
\u6216\u8005&a[0]
\u8868\u793a\u6570\u7ec4\u9996\u884c\u5730\u5740\uff0ca+1
\u8868\u793a\u6570\u7ec4\u4e0b\u4e00\u884c\u5730\u5740 \u5373\uff1aa+1
= (a
) + \\(1\\times y\\times sizeof(\\text{element})\\) a
\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a x
\u7ef4\u6570\u7ec4\u7684\u6307\u9488\uff0c\u8be5\u6570\u7ec4\u7684\u5143\u7d20\u4e3a\u82e5\u5e72y
\u7ef4\u6570\u7ec4 &a[0][0]
\u6216\u8005a[0]
\u8868\u793a\u6570\u7ec4\u9996\u5143\u7d20\u5730\u5740\uff0c\u4e5f\u53eb\u5217\u5730\u5740\uff0c&a[0][0]+1
\u8868\u793a\u6570\u7ec4\u4e0b\u4e00\u5143\u7d20\u5730\u5740 \u5373\uff1a&a[0][0]+1
= (&a[0][0]
) + \\(sizeof(\\text{element})\\) \u4f46\u4e0a\u9762\u51e0\u4e2a\u6307\u9488\u7684\u503c\u90fd\u4e00\u6837 a[i][j]
\u7b49\u6548\u4e8e *( *(a+i) + j )
int *p[5]
\u5b9a\u4e49\u4e86\u4e00\u4e2asize\u4e3a5\u7684\u6574\u578b\u6307\u9488\u7684\u6570\u7ec4(\u8fd9\u91cc\u6709\u4e94\u4e2a\u6307\u9488) int (*p)[5]
\u5b9a\u4e49\u4e86\u4e00\u4e2asize\u4e3a5\u7684\u6570\u7ec4\u7684\u6307\u9488(\u8fd9\u91cc\u53ea\u6709\u4e00\u4e2a\u6307\u9488)
\u7ed9\u6307\u9488\u8d4b\u503c\u7684\u529e\u6cd5\uff1a
p = &x;
p = 0;
p = NULL;
p = (int *)1732;
\u6307\u9488\u8fd0\u7b97\uff1a
*p+1;
++*p;
\u7684\u64cd\u4f5c\u5bf9\u8c61\u90fd\u662fp
\u6307\u5411\u7684\u5143\u7d20\u503c *p++;
\u7684\u64cd\u4f5c\u5bf9\u8c61\u5219\u662f\u6307\u9488\u672c\u8eab\uff0c\u542b\u4e49\u662f\u6307\u5411\u4e0b\u4e00\u4e2a\u5730\u5740 -\u5f53\u51fa\u73b0\u4e0a\u8ff0\u8bed\u53e5\u53c2\u4e0e\u590d\u6742\u8868\u8fbe\u5f0f\u65f6\uff0c*p++
\u4f1a\u5728\u8f93\u51fa*p
\u540e\u518d\u6307\u5411\u4e0b\u4e00\u4e2a\u5730\u5740 \u53ef\u4ee5\u901a\u8fc7\u5c06\u4e00\u4e2a\u5b57\u7b26\u4e32\u5e38\u91cf\u8d4b\u503c\u7ed9\u4e00\u4e2a\u6307\u9488\u7684\u65b9\u5f0f\u6765\u7ed9\u8be5\u5b57\u7b26\u4e32\u5206\u914d\u5730\u5740
\u5373\u4f8b\u5982char *p; p = \"awa\";
\u662f\u5408\u7406\u7684 *strcpy(char *to,char *from)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u628a\u5b57\u7b26\u6570\u7ec4 from[]
\u590d\u5236\u5230 to[]
\u4e2d\u5e76\u8fd4\u56de to[]
*strcat(char *to,char *from)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u628a\u5b57\u7b26\u6570\u7ec4 from[]
\u6dfb\u52a0\u5230 to[]
\u672b\u5c3e\u5e76\u8fd4\u56de to[]
\u8865\u5145\uff1a\u6240\u8c13\u7684\u6dfb\u52a0\uff0c\u5c31\u662f\u7528 from[]
\u53bb\u66ff\u6362 to[]
\u7b2c\u4e00\u4e2a \\0
\u4e4b\u540e\u7684\u5143\u7d20 strcmp(char *a,char *b)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u6bd4\u8f83\u5b57\u7b26\u6570\u7ec4 a[]
\u548c b[]
\u5728 \\0
\u524d\u7684\u5185\u5bb9\u662f\u5426\u7b49\u4ef7 \u5982\u679c\u7b49\u4ef7 \u8fd4\u56de0 \u5982\u679ca<b \u8fd4\u56de-1 \u5982\u679ca>b \u8fd4\u56de1 strlen(char *s)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u8fd4\u56de\u5b57\u7b26\u6570\u7ec4 s[]
\u5728 \\0
\u524d\u7684\u5143\u7d20\u4e2a\u6570
\u5173\u4e8e\u6307\u9488\u548c\u7ed3\u6784\u4f53\u7684\u5173\u7cfb\uff0c\u53ea\u9700\u8981\u8bb0\u4f4f \u53d6\u503c\u7b26 *
\u7684\u4f18\u5148\u7ea7\u4f4e\u4e8e\u6210\u5458\u8bbf\u95ee\u7b26 .
\u7684\u4f18\u5148\u7ea7
void *malloc(size_t size)
\u7533\u8bf7 size
\u5927\u5c0f\u7684\u5185\u5b58\uff0c\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d\uff0c\u8fd4\u56de\u4e00\u4e2a\u6307\u5411\u8fd9\u4e2a\u5185\u5b58\u7684\u6307\u9488
void free(void *ptr)
\u91ca\u653e\u6307\u9488 ptr
\u6240\u6307\u7684\u5185\u5b58
\u5bf9\u4e8e\u8fd4\u56de\u6307\u9488\u7684\u51fd\u6570\uff0c\u4e0d\u80fd\u8fd4\u56de\u5728\u51fd\u6570\u5185\u5b9a\u4e49\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u6307\u9488
\u51fd\u6570\u6307\u9488\u7684\u5b9a\u4e49\uff1a\u7c7b\u578b\u540d(*\u53d8\u91cf\u540d)(\u53c2\u6570\u7c7b\u578b\u8868)
\u300ceg\u300dint(*fun)(int,int)
\u4e22\u4e00\u4e2axxjj\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u00a0\u00a0\u70b9\u51fb\u8df3\u8f6c
FILE *fp;
\u7533\u8bf7\u4e86\u4e00\u4e2a\u6587\u4ef6\u6307\u9488 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u547d\u4ee4\u884c\u53c2\u6570","title":"\u547d\u4ee4\u884c\u53c2\u6570","text":" main()
\u53ef\u4ee5\u6709\u4e24\u4e2a\u53c2\u6570\uff1a main(int argc,char *argv[])
argc
\u8868\u793a\u547d\u4ee4\u884c\u53c2\u6570\u6570\u91cf argv[]
\u6307\u5411\u5404\u4e2a\u547d\u4ee4\u884c\u53c2\u6570 argv[0]
\u6307\u5411\u547d\u4ee4 argv[1,]
\u6307\u5411\u53c2\u6570 \u300ceg\u300d\u547d\u4ee4\u884c\u8f93\u5165 ./code.exe hello world
\u5728\u7a0b\u5e8f\u4e2d\uff1a argc = 3
*argv[] = {\"./code.exe\\0\",\"hello\\0\",\"world\\0\"}
"},{"location":"cour_note/D1QD_CXiaoCheng/#\u6587\u4ef6\u64cd\u4f5c","title":"\u6587\u4ef6\u64cd\u4f5c","text":" FILE *fp;
\u7533\u8bf7\u4e00\u4e2a\u6587\u4ef6\u6307\u9488 fp = fopen(\"\u6587\u4ef6\u540d\",\"\u4f7f\u7528\u65b9\u5f0f\");
\u94fe\u63a5\u6307\u9488 fp
\u5230\u6587\u4ef6\u5e76\u6307\u5b9a\u6a21\u5f0f \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 \u8f93\u5165\u6587\u4ef6\u540d\u65f6\u53ef\u4ee5\u5199\u8def\u5f84\uff0c\u8def\u5f84\u4e2d\u8981\u4f7f\u7528 \\\\
\u6765\u533a\u5206\u5c42\u7ea7 fprintf(fp,\"\u683c\u5f0f\u5b57\u7b26\u4e32\",\u53d8\u91cf\u8868);
\u5199\u5165\u6570\u636e\u5230 fp
\u6307\u5411\u7684\u6587\u4ef6\uff0c\u540e\u4e24\u4e2a\u53c2\u6570\u7684\u683c\u5f0f\u548c printf()
\u4e00\u6837 fclose()
\u5173\u95ed\u6587\u4ef6\u5e76\u5237\u65b0\u7f13\u5b58\u533a \u987a\u5229\u6267\u884c\u4e86\u6587\u4ef6\u5173\u95ed\u64cd\u4f5c\u65f6\uff0cfclose()
\u51fd\u6570\u7684\u8fd4\u56de\u503c\u662f 0
\uff0c\u5426\u5219\u8fd4\u56de EOF
rewind(fp)
\u8ba9 fp
\u8fd4\u56de fp
\u6240\u6307\u7684\u6587\u4ef6\u7684\u5f00\u5934\u5730\u5740 rtell(fp)
\u8ba9 fp
\u8fd4\u56de fp
\u7684\u5f53\u524d\u4f4d\u7f6e(long int
\u7c7b\u578b\uff0c\u4ece 0
~ len
)\uff0c\u6210\u529f\u8fd4\u56de\u5f53\u524d\u503c(\u4e00\u5f00\u59cb\u662f0\uff0c\u6bcf\u5411\u540e\u79fb\u52a8\u4e00\u6b21+1)\uff0c\u5426\u5219\u8fd4\u56de-1L
fseek(FILE *fp,\"\u504f\u79fb\u91cf\",\"\u8d77\u59cb\u4f4d\u7f6e\")
\u5c06 fp
\u4ece \"\u8d77\u59cb\u4f4d\u7f6e\"
\u5f00\u59cb\u5411\u540e\u79fb\u52a8 \"\u504f\u79fb\u91cf\"
\u53ef\u9009\u7684 \"\u8d77\u59cb\u4f4d\u7f6e\"
\uff1a SEEK_SET
\u6587\u4ef6\u5f00\u5934 SEEK_CUR
\u5f53\u524d\u4f4d\u7f6e SEEK_END
\u6587\u4ef6\u672b\u5c3e \u300ceg\u300d\u79fb\u52a8\u6307\u9488 fp
\u5230\u6587\u4ef6\u672b\u5c3e\uff1afseek(fp,0L,SEEK_END);
feof(fp)
\u5982\u679c fp
\u5230\u8fbe\u4e86 EOF
\uff0c\u8fd4\u56de\u975e\u96f6\u503c\uff0c\u5426\u5219\u8fd4\u56de 0
fflush(fp)
\u5237\u65b0 fp
\u7684\u7f13\u51b2\u533a\uff0c\u6210\u529f\u8fd4\u56de 0
\uff0c\u5426\u5219\u8fd4\u56de EOF
fgets((char*)str,limt,fp)
\u4ece fp
\u8bfb\u5165\u4e00\u884c\u7684 limit-1
\u4e2a\u5b57\u7b26\u5e76\u5b58\u5165 str
\u4e2d\uff0c\u5e76\u5728\u672b\u5c3e\u52a0 \\0
\uff0c\u7136\u540e\u8fd4\u56de\u8bfb\u5165\u7684\u5185\u5bb9(\u5982\u679c\u6ca1\u8bfb\u5b8c limit-1
\u4e2a\u5b57\u7b26\u5c31\u9047\u5230\u4e86\u884c\u672b\u5c31\u5230\u6b64\u4e3a\u6b62) fputc(ch,fp)
\u5728 fp
\u4e2d\u5199\u5165\u5355\u4e2a\u5b57\u7b26 ch
\uff0c\u6210\u529f\u8fd4\u56de ch
\uff0c\u5426\u5219\u8fd4\u56de EOF
fgetc(fp)
\u83b7\u53d6\u4e0b\u4e00\u4e2a\u5b57\u7b26(\u5982\u679c\u5230\u8fbe EOF
\u5c31\u8bfb\u5165\u4e86 -1
\uff0c\u53c2\u8003\u8fd9\u91cc)
C\u7a0b\u5e8f\u5bf9\u6587\u4ef6\u5f85\u5904\u7406\u91c7\u7528\u5185\u5b58\u7f13\u51b2\u6587\u4ef6\u7cfb\u7edf\u7684\u65b9\u5f0f\u8fdb\u884c
\u4f7f\u7528\u7f13\u51b2\u6587\u4ef6\u7cfb\u7edf\u53ef\u4ee5\u5927\u5927\u63d0\u9ad8\u6587\u4ef6\u64cd\u4f5c\u901f\u5ea6 \u6587\u4ef6\u4fdd\u5b58\u5728\u78c1\u76d8\u4e0a\uff0c\u78c1\u76d8\u6570\u636e\u7684\u7ec4\u7ec7\u65b9\u5f0f\u6309\u6247\u533a\u8fdb\u884c\uff0c\u89c4\u5b9a\u6bcf\u4e2a\u6247\u533a\u5927\u5c0f\u4e3a512B \u4e00\u822c\u5fae\u578b\u8ba1\u7b97\u673a\u4e2d\u7684C\u8bed\u8a00\u7cfb\u7edf\u4e5f\u5c06\u7f13\u51b2\u533a\u5927\u5c0f\u5b9a\u4e3a512B \u8fdb\u884c\u6570\u636e\u5199\u5165\u5de5\u4f5c\u65f6: \u628a\u6570\u636e\u5199\u5165\u6587\u4ef6\u7f13\u51b2\u533a \u5199\u6ee1512B\u4ee5\u540e\uff0cOS\u81ea\u52a8\u628a\u6570\u636e\u5199\u5165\u78c1\u76d8\u7684\u4e00\u4e2a\u6247\u533a\uff0c\u7136\u540e\u6e05\u7a7a\u6587\u4ef6\u7f13\u51b2\u533a \u91cd\u590d\u4e0a\u8ff0\u884c\u4e3a \u6587\u4ef6\u6253\u5f00\u7684\u5b9e\u8d28\u662f\u628a\u78c1\u76d8\u6587\u4ef6\u548c\u6587\u4ef6\u7f13\u51b2\u533a\u5bf9\u5e94\u8d77\u6765\uff0c\u5177\u4f53\u6d41\u7a0b\u5982\u4e0b; \u5728\u78c1\u76d8\u4e2d\u627e\u5230\u6307\u5b9a\u6587\u4ef6 \u5728\u5185\u5b58\u4e2d\u5206\u914d\u4fdd\u5b58\u4e00\u4e2aFILE\u7c7b\u578b\u7ed3\u6784\u7684\u5355\u5143\uff0816B\uff09 \u5728\u5185\u5b58\u4e2d\u5206\u914d\u6587\u4ef6\u7f13\u51b2\u533a\u5355\u5143\uff08512B\uff09 \u8fd4\u56deFILE\u7684\u7ed3\u6784\u5730\u5740
FILE
\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u7ed3\u6784\u4f53\u7c7b\u578b\uff0c\u5b9a\u4e49\u5982\u4e0b\uff1a
typedef struct{\nshort level; /*\u7f13\u51b2\u533a\u4f7f\u7528\u91cf*/\nunsigned flags; /*\u6587\u4ef6\u72b6\u6001\u6807\u5fd7*/\nchar fd; /*\u6587\u4ef6\u63cf\u8ff0\u7b26*/\nshort bsize; /*\u7f13\u51b2\u533a\u5927\u5c0f*/\nunsigned char *buffer; /*\u6587\u4ef6\u7f13\u51b2\u533a\u9996\u5730\u5740*/\nunsigned char *curp; /*\u6307\u5411\u6587\u4ef6\u7f13\u51b2\u533a\u7684\u5de5\u4f5c\u6307\u9488*/\nunsigned char hold; /*\u5176\u4ed6\u4fe1\u606f*/\nunsigned istemp;\nshort token;\n} FILE;\n
"},{"location":"cour_note/D1QD_CXiaoCheng/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"\u8d34\u4e00\u4e9b\u5176\u4ed6\u5b66\u957f\u7684\u6587\u7ae0\uff1a
https://blog.zhanghai.me/c-exam-notes/ https://blog.yzsun.me/c-traps-and-pitfalls/ "},{"location":"cour_note/D1SJ_Intro2CS/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7cfb\u7edf\u6982\u8bba | Introduction to Computing Systems","text":" \u7ea6 12 \u4e2a\u5b57
https://www.yuque.com/isshikixiu/codes/ics "},{"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 \u56e0\u4e3a\u6211\u53ea\u80fd\u627e\u5230 17 \u5e74\u7684\u89c6\u9891\uff0c\u6240\u4ee5\u662f\u8ddf\u7740 17 \u5e74\u7684\u7248\u672c\u5b66\u3002 Course Website: \ud83d\udd17
Course Video: \ud83d\udd17
Course Description
Computer Vision has become ubiquitous in our society, with applications in search, image understanding, apps, mapping, medicine, drones, and self-driving cars. Core to many of these applications are visual recognition tasks such as image classification, localization and detection. Recent developments in neural network (aka \u201cdeep learning\u201d) approaches have greatly advanced the performance of these state-of-the-art visual recognition systems. This course is a deep dive into the details of deep learning architectures with a focus on learning end-to-end models for these tasks, particularly image classification. During the 10-week course, students will learn to implement and train their own neural networks and gain a detailed understanding of cutting-edge research in computer vision. Additionally, the final assignment will give them the opportunity to train and apply multi-million parameter networks on real-world vision problems of their choice. Through multiple hands-on assignments and the final course project, students will acquire the toolset for setting up deep learning tasks and practical engineering tricks for training and fine-tuning deep neural networks. Assignments
Assignment 1: \ud83d\udd17 Assignment 2: \ud83d\udd17 Assignment 3: \ud83d\udd17 \u53c2\u8003\u8d44\u6599 \u5b66\u957f\u7b14\u8bb0\uff1a\ud83d\udd17 "},{"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":" Video: \ud83d\udd17 Slides: \ud83d\udd17 \u4e00\u4e9b\u65e9\u671f\u7684\u5173\u4e8e CV \u7684\u601d\u8003 \u65e9\u671f\u5bf9\u5982\u4f55\u8868\u793a\u7269\u4f53\uff0c\u8d85\u8d8a\u300cBlock World\u300d\u7684\u8868\u793a\u65b9\u6cd5 \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
\u542f\u53d1\uff1a\u89c6\u89c9\u8bc6\u522b\u7684\u91cd\u70b9\u53ef\u4ee5\u4ece\u8bc6\u522b\u5bf9\u8c61\u7684\u4e00\u4e9b\u5177\u6709\u8bc6\u522b\u529b\u548c\u4e0d\u6613\u53d8\u5316\u7684\u90e8\u5206\u5f00\u59cb
\u6709\u7aef\u8054\u60f3 FDS \u7684 Voting Tree
\u603b\u7684\u800c\u8a00 \u5bf9\u8c61\u8bc6\u522b \u662f CV \u9886\u57df\u7684\u4e00\u4e2a\u91cd\u8981\u8bdd\u9898 \u8be5\u8bfe\u7a0b\u91cd\u70b9\u4e3a \u5377\u79ef\u795e\u7ecf\u7f51\u7edc(Convolutional Neural Network / CNN) \u5177\u4f53\u7740\u773c\u70b9\u4e3a \u56fe\u50cf\u5206\u7c7b\u95ee\u9898(image classification) \u4e5f\u5c06\u6d89\u53ca \u5bf9\u8c61\u68c0\u6d4b(object detection)\u3001\u56fe\u50cf\u5b57\u5e55(image captioning) \u7b49\u95ee\u9898 "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-2-image-classification-pipeline","title":"Lecture 2: Image Classification Pipeline","text":" Video: \ud83d\udd17 Slides: \ud83d\udd17 CIFAR-10 & CIFAR-100: \ud83d\udd17 \u524d\u7f6e\uff1aPython Numpy Tutorial: \ud83d\udd17 \u8bed\u4e49\u9e3f\u6c9f(semantic gap) "},{"location":"cour_note/D1SJ_StanfordCS231n/#data-driven-approach","title":"Data-Driven Approach","text":" Collect a dataset of images and labels; Use Machine Learning to train a classifier; Evaluate the classifier on new images; \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 \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) \\(d_1(I_1,I_2)=\\sum_{p}|I_1^{p}-I_2^{p}|\\)
\u5982\u679c\u56fe\u50cf\u65cb\u8f6c\uff0c\u9884\u6d4b\u7ed3\u679c\u4f1a\u53d1\u751f\u6539\u53d8\u3002 \\(d_2(I_1,I_2)=\\sum_{p}\\sqrt{(I_1^p-I_2^p)^2}\\)
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
\u5f53\u7136\uff0c\u8fd9\u79cd\u901a\u8fc7\u6bd4\u8f83\u201c\u8ddd\u79bb\u201d\u7684\u5206\u7c7b\u65b9\u6848\u5e76\u4e0d\u4ec5\u9650\u4e8e\u56fe\u7247\u7b49\uff0c\u5bf9\u4e8e\u4efb\u4f55\u9700\u8981\u5206\u7c7b\u7684\u6570\u636e\uff0c\u4f8b\u5982\u6587\u672c\uff0c\u53ea\u8981\u80fd\u5b9a\u4e49\u80fd\u591f\u91cf\u5316\u7684\u201c\u8ddd\u79bb\u201d\u4ee5\u53ca\u4e00\u7cfb\u5217\u76f8\u5e94\u7684\u89c4\u5219\uff0c\u5c31\u80fd\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\u6765\u8fdb\u884c\u5206\u7c7b\u3002 \u7136\u800c\uff0cK-\u4e34\u8fd1\u7b97\u6cd5 \u5728\u56fe\u50cf\u5206\u7c7b\u4e0a\u51e0\u4e4e\u4e0d\u600e\u4e48\u4f7f\u7528\uff0c\u4e3b\u8981\u662f\u56e0\u4e3a\u5b83\u5b9e\u9645\u4f7f\u7528\u8d77\u6765\uff0c\u9884\u6d4b\u6548\u7387\u8f83\u4f4e\uff1b\u4e14\u201c\u8ddd\u79bb\u5ea6\u91cf\u201d\u5e76\u4e0d\u975e\u5e38\u9002\u5408\u56fe\u50cf\u5904\u7406\uff08\u5b83\u65e0\u6cd5\u5b8c\u6574\u63cf\u8ff0\u56fe\u50cf\u4e0a\u7684\u8ddd\u79bb\u4fe1\u606f\u6216\u56fe\u50cf\u4e4b\u95f4\u7684\u5dee\u5f02\uff09\uff1b\u6b64\u5916\u5b83\u8fd8\u6709\u4e00\u4e2a\u6bd4\u8f83\u4e25\u91cd\u7684\u95ee\u9898\uff1a\u7ef4\u6570\u707e\u96be(curse of dimensionality) \ud83d\udd17 \uff08\u56e0\u4e3a\u53ea\u6709\u8bad\u7ec3\u6837\u672c\u8db3\u591f\u5bc6\u96c6\uff0cK-\u4e34\u8fd1\u7b97\u6cd5\u624d\u80fd\u6b63\u5e38\u8fd0\u884c\uff09\u3002 "},{"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
\u5373\uff0c\u6211\u4eec\u6784\u9020\u4e00\u4e2a\u51fd\u6570\uff0c\u8f93\u5165\u5305\u542b\u56fe\u50cf\u6570\u636e \\(x\\) \u548c\u6743\u91cd\u53c2\u6570 \\(W\\)\uff0c\u6ee1\u8db3\u5176\u8ba1\u7b97\u7ed3\u679c\u4e3a\u5404\u4e2a\u7c7b\u522b\u7684\u9884\u6d4b\u5f97\u5206 \u6700\u7ec8\u5f97\u5230\u4e00\u4e2a\u6a21\u7248\uff0c\u5b83\u5c06\u5c1d\u8bd5\u6027\u5730\u9002\u5e94\u8be5\u7c7b\u91cc\u5c3d\u53ef\u80fd\u591a\u7684\u6837\u672c
\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
\u4ece\u8fd9\u79cd\u89d2\u5ea6\u6765\u7406\u89e3\u5c31\u5f88\u5bb9\u6613\u53d1\u73b0\uff0c\u5355\u4e00\u7684\u7ebf\u6027\u5206\u7c7b\u5177\u6709\u5c40\u9650\u6027\uff0c\u4f8b\u5982\u5bf9\u4e8e\u591a\u6a21\u6001\u7684\u6570\u636e\uff0c\u4f7f\u7528\u5355\u4e00\u7684\u7ebf\u6027\u5206\u7c7b\u53ef\u80fd\u4f1a\u6bd4\u8f83\u5403\u529b\u3002 "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-3-loss-functions-and-optimization","title":"Lecture 3: Loss Functions and Optimization","text":" Video: \ud83d\udd17 Slides: \ud83d\udd17 Linear classifier is an example of parametric classifier. \u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u7406\u89e3 Linear Classifation \u4e2d\u7684 \\(W\\)\uff1a\u77e9\u9635\u4e2d\u7684\u6bcf\u4e00\u4e2a\u53c2\u6570\u8868\u793a\u4e86\u6bcf\u4e00\u4e2a\u50cf\u7d20\u70b9(\u5355\u4e2a\u989c\u8272\u901a\u9053)\u5bf9\u4e8e\u8bc6\u522b\u67d0\u4e2a\u7c7b\u7684\u8d21\u732e\u6743\u91cd\u3002
A loss function that quantifies our unhappiness with the scores across the training data, tells how good our current classifier is.
Given a dataset of examples \\(\\{(x_1,y_i)\\}_{i=1}^N\\), where \\(x_i\\) is image and \\(y_i\\) is label. And loss over the dataset is a sum of loss over examples: \\(L = \\frac{1}{N}\\sum L_i(f(xi,W),y_i)\\). Loss function \u662f\u7528\u6765\u5ea6\u91cf \\(W\\) \u7684\u5408\u9002\u7a0b\u5ea6\u7684\uff0c\u6211\u4eec\u901a\u8fc7\u5bfb\u627e\u5728 \\(W\\) \u7a7a\u95f4\u4e2d\u635f\u5931\u51fd\u6570\u53d6\u6700\u503c\u65f6\u7684 \\(W\\) \u6765\u627e\u5230\u6211\u4eec\u8ba4\u4e3a\u6700\u5408\u9002\u7684 \\(W\\)\u3002 "},{"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) \\] \u4e5f\u5c31\u662f\u8bf4\uff0c\u5bf9\u4e8e\u67d0\u4e00\u4e2a\u6837\u672c\uff0c\u5b83\u5b9e\u9645\u7c7b\u522b\u5bf9\u5e94\u7684\u5f97\u5206\u5982\u679c\u8fdc\u5927\u4e8e\uff08\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u8fb9\u754c \uff0c\u5c31\u662f\u4e0a\u56fe\u4e2d\u7684\\(+1\\)\uff09\u67d0\u4e2a\u5176\u4ed6\u7c7b\u522b\u7684\u5f97\u5206\uff0c\u90a3\u4e48\u8be5\u201c\u5176\u4ed6\u7c7b\u522b\u201d\u5bf9\u635f\u5931\u51fd\u6570\u7684\u8d21\u732e\u5373\u4e3a\\(0\\)\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5e76\u6ca1\u6709\u8fdc\u5927\u4e8e\u5176\u4ed6\u67d0\u4e2a\u7c7b\u522b\u7684\u5f97\u5206\uff0c\u5219\u9700\u8981\u5c06\u8fd9\u4e2a\u504f\u5dee\u4f5c\u4e3a\u5bf9\u635f\u5931\u51fd\u6570\u7684\u8d21\u732e\u3002
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) \\]
However, for that we only calculate a loss in terms of the data, some strange things like overfitting will happen.
\u84dd\u70b9\u4e3a\u6a21\u578b\u8bad\u7ec3\u6570\u636e\uff0c\u7eff\u8272\u7684\u4e3a\u9a8c\u8bc1\u6216\u8005\u5b9e\u9645\u6570\u636e\u7b49\u3002 \u84dd\u8272\u7684\u4e3a\u8fc7\u62df\u5408\u540e\u6a21\u578b\u8bad\u7ec3\u51fa\u6765\u7684\u9884\u6d4b\u8d8b\u52bf\uff0c\u4ed6\u4eec\u5b8c\u5168\u7b26\u5408\u8bad\u7ec3\u6a21\u578b\u7684\u6570\u636e\uff0c\u4f46\u662f\u53ef\u4ee5\u53d1\u73b0\uff0c\u7eff\u8272\u7684\u7ebf\u6761\u624d\u662f\u5b9e\u9645\u7684\u6211\u4eec\u5e0c\u671b\u5f97\u5230\u7684\u8d8b\u52bf\u3002 \u8fd9\u79cd\u9884\u6d4b\u7ed3\u679c\u8fc7\u5ea6\u62df\u5408\u4e86\u8bad\u7ec3\u6570\u636e\u7684\u884c\u4e3a\u53ca\u4e3a\u8fc7\u62df\u5408\u3002 To solve it, we use regularization.
The regularization term.
Occam's Razor
The regularization term encourages the model to somehow pick a simpler \\(W\\) depending on the dask and the model. 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:
L2 regularization: \\(R(W) = \\sum_{k}\\sum_lW_{k,l}^2\\); L1 regularization: \\(R(W) = \\sum_k\\sum_l |W_{k,l}|\\); Elastic net (L1+L2): \\(R(W) = \\sum_k\\sum_l (\\beta W_{k,l}^2+|W_{k,l}|)\\); Max norm regularization Dropout Fancier: Batch normalization, stochastic depth... 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":" It normalizes the scores to a probability distribution. Then we just want the probablity of the true class is high and as close to one. scores = unnormalized log probabilities of the classes \\(P(Y=k|X=x_i)=\\frac{e^{s_k}}{\\sum_j e^{s_j}}\\;,\\;\\;where\\;s=f(x_i;W)\\); That is \\(L_i=-\\log P(Y=y_i|X=x_i)=-\\log(\\frac{e^{s_k}}{\\sum_j e^{s_j}})\\); eg for Softmax Classifier.
Compare the two.
\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0cSVM \u5728\u4fdd\u8bc1\u771f\u5b9e\u6807\u7b7e\u5bf9\u5e94\u7684\u5f97\u5206\u9ad8\u4e8e\u5176\u4ed6\u5f97\u5206\u4e00\u5b9a\u91cf\u540e\u5c31\u63a5\u53d7\u4e86\uff0c\u5373\u5b58\u5728\u4e00\u4e2a\u660e\u786e\u7684\u7a81\u53d8\u6807\u51c6\uff1b\u800c\u5bf9\u4e8e Softmax \u6765\u8bf4\uff0c\u5b83\u4f1a\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u4e0d\u65ad\u5c06\u6b63\u786e\u6807\u7b7e\u5bf9\u5e94\u7684\u6982\u7387\u5411\\(1\\)\u903c\u8fd1\uff0c\u4e0d\u65ad\u4f18\u5316\u81ea\u5df1\u3002
"},{"location":"cour_note/D1SJ_StanfordCS231n/#optimization","title":"Optimization","text":" Strategy #1: A first _very bad _idea solution: Random search Strategy #2: Gradient Descent / Follow the slope(gradient\\(\\nabla\\)) Always use analytic gradient, but check implementation with numerical gradient. This is called a gradient check.
## 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
Online Demo: \ud83d\udd17 "},{"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":" Video: \ud83d\udd17 Slides: \ud83d\udd17 "},{"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
Always check: The gradient with respect to a variable should have the same shape as the variable. Because each element of your gradient is quantifying how much that element is contributing to your final output. \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
Neural nets will be very large: impractical to write down gradient formula by hand for all parameters. Backpropagation = recursive application of the chain rule along a computational graph to compute the gradients of all inputs/parameters/intermediates. Implementations maintain a graph structure, where the nodes implement the forward()
/ backward()
API. Forward: compute result of an operation and save any intermediates needed for gradient computation in memory. Backward: apply the chain rule to compute the *gradient *of the loss function with respect to the inputs. "},{"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
We arrange neurons into fully-connected layers. The abstraction of a layer has the nice property that it allows us to use efficient vectorized code (e.g. matrix multiplies). Neural networks are not really neural. "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-5-convolutional-neural-networks","title":"Lecture 5: Convolutional Neural Networks","text":" Video: \ud83d\udd17 Slides: \ud83d\udd17 "},{"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
Convolve the filter with the image. (i.e. \"slide over the image spatially, computing dot products\")
\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
The zero padding does add some sort of extraneous features at the corners, and we're doing our best to get some value and do, like process that region of the image. And so zero padding is kind of one way to do this. There's also other ways to do this that, you know, you can try and like, mirror the values here or extend them, and so it doesn't have to be zero padding, but in practice this is one thing that works reasonably.
\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
Each filter has \\(5\\times5\\times3_{\\text{(depth)}} + 1_{\\text{(for bias)}} = 76\\) params. So the total number is \\(76\\times 10 = 760\\). "},{"location":"cour_note/D1SJ_StanfordCS231n/#pooling-layer","title":"Pooling layer","text":" makes the representations smaller and more manageable operates over each activation map independently: 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":" Contains neurons that connect to the entire input volume, as in ordinary Neural Networks. "},{"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
5% = HW 5% = Quiz\uff08\u5212\u5206\u5230\u54ea\u91cc\u8fd8\u4e0d\u77e5\u9053\uff09 10% = Discussions 30% = Research Project & Peer Review 10% = max(\u671f\u4e2d\uff0c\u671f\u672b) 40% = \u671f\u672b \u7b14\u8bb0\u76f8\u5173
\u53c2\u8003\u7b14\u8bb0\uff1a
https://www.yuque.com/xianyuxuan/saltfish_shop/course_res_index#cIhfl 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
\u4e00\u4e2a\u7a7a\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a AVL \u6811\uff1b \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
\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 \\(BF(T_p) \\in \\{0, \\pm 1\\}\\)\uff1b \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
\\(BF(\\text{Trouble Finder}) = h(\\text{New Left Subtree}) - h(\\text{Right Subtree}) = 2\\)\uff1b \\(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
\u5f53\u6211\u4eec\u8bbf\u95ee\u5230\u67d0\u4e2a\u70b9 X \u65f6\uff1a \u5982\u679c P \u662f\u6839\u8282\u70b9\uff0c\u5219\u76f4\u63a5\u8fdb\u884c\u4e00\u6b21 Single Rotation\uff0c\u5c06 X \u8f6c\u5230\u6839\u8282\u70b9\uff1b \u5982\u679c P \u4e0d\u662f\u6839\u8282\u70b9\uff1a \u5f53\u60c5\u51b5\u4e3a LR / RL \u65f6\uff0c\u8fdb\u884c\u4e00\u6b21 LR Rotation \u6216 RL Rotation\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a zig-zag\uff1b \u5f53\u60c5\u51b5\u4e3a LL / RR \u65f6\uff0c\u8fdb\u884c\u4e24\u6b21 Single Rotation\uff0c\u4f7f\u5f97 X\u3001P\u3001G \u7684\u987a\u5e8f\u9006\u8f6c\uff0c\u50cf\u8df7\u8df7\u677f\u4e00\u6837\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a zig-zig\uff1b \u4e0d\u65ad\u5bf9 X \u8fdb\u884c Splay \u64cd\u4f5c\uff0c\u76f4\u5230 X \u6210\u4e3a\u6839\u8282\u70b9\uff1b
\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
\u5f00\u9500\u5927\u7684\u64cd\u4f5c\u5e94\u5f53\u503e\u5411\u8ba9\u52bf\u80fd\u964d\uff0c\u5f00\u9500\u5c0f\u7684\u64cd\u4f5c\u5e94\u5f53\u503e\u5411\u8ba9\u52bf\u80fd\u5347\uff1b \u52bf\u80fd\u9ad8\u503e\u5411\u4e8e\u8ba9\u67d0\u4e9b\u64cd\u4f5c\u5f00\u9500\u5927\uff0c\u52bf\u80fd\u4f4e\u503e\u5411\u4e8e\u8ba9\u67d0\u4e9b\u64cd\u4f5c\u5f00\u9500\u5c0f\uff1b \\(\\Phi(final) > \\Phi(initial)\\)\uff1b \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
Every node is either red or black. The root is black. Every leaf (NIL
) is black. if a node is red, then both its children are black. 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 Every node is either red or black. All NIL
nodes (figure above) are considered black. A red node does not have a red child. Every path from a given node to any of its descendant NIL
nodes goes through the same number of black nodes. @OI Wiki \u6bcf\u4e00\u4e2a\u8282\u70b9\u8981\u4e48\u662f\u7ea2\u8272\uff0c\u8981\u4e48\u662f\u9ed1\u8272\uff1b NIL
\u8282\u70b9\uff08\u7a7a\u53f6\u5b50\u8282\u70b9\uff09\u4e3a\u9ed1\u8272\uff1b \u7ea2\u8272\u8282\u70b9\u7684\u5b50\u8282\u70b9\u5fc5\u987b\u4e3a\u9ed1\u8272\uff1b \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
\u9996\u5148\u6211\u4eec\u6709 \\(N \\geq 2^{bh}-1\\)\uff0c\u4e5f\u5c31\u662f \\(bh \\leq \\log_2 (N+1)\\)\uff1b \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
\u5982\u679c x.p
\u662f\u9ed1\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4e0d\u9700\u8981\u505a\u4efb\u4f55\u8c03\u6574\uff1b \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
TODO: \u8fd9\u91cc\u9700\u8981\u914d\u56fe\u8bb2\u6e05\u695a\u8282\u70b9\u7684\u5177\u4f53\u53d8\u6362\u5230\u5e95\u662f\u600e\u4e48\u6837\u7684\uff0c\u5c24\u5176\u662f\u8282\u70b9\u989c\u8272\u53d8\u5316\u5230\u5e95\u662f\u600e\u4e48\u4e00\u56de\u4e8b\uff0c\u4e4b\u540e\u5927\u6982\u9700\u8981\u91cd\u5199 \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
\u5c06 w \u67d3\u4e3a a \u7684\u989c\u8272\uff0c\u518d\u5c06 a \u548c c \u67d3\u6210\u9ed1\u8272\uff1b \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 \u8c03\u6574\u7ed3\u675f\uff1b Deletion / case 3
\u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002
\u4ea4\u6362 b \u548c w \u7684\u989c\u8272\uff1b \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 \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
\u4ea4\u6362 a \u548c w \u7684\u989c\u8272\uff1b \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 \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
The root is either a leaf or has between \\(2\\) and \\(M\\) children. All nonleaf nodes (except the root) have between \\(\\lceil M/2 \\rceil\\) and M children. 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
\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 \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
\u7ed3\u70b9\u7684 dist \u7b49\u4e8e \\(dist_\\text{right child} + 1\\)\uff08\u5047\u8bbe \\(dist_\\text{NULL} = -1\\)\uff09\uff1b \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":" \u524d\u60c5\u63d0\u8981\uff1aTopic 1 | \u644a\u8fd8\u5206\u6790 \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
\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 \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 \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)\\)\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)\\)\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)\\) \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
\u6811/\u5806\u7684\u7eac\u5ea6\uff0c\u5177\u4f53\u89c2\u5bdf\u6570\u636e\u7684\u8f6c\u79fb\u4e0e\u53d8\u5316\u8fc7\u7a0b\uff1b \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
\u5b9e\u9645\u4e0a\u5c31\u7c7b\u4f3c\u4e8e\u6c42\u89e3\u4e0d\u80fd\u8fde\u7eed\u5411\u53f3\u7684\uff0c\u4ece\u6839\u5230\u53f6\u5b50\u7684\u8def\u5f84\u3002 "},{"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 \u5c06\u5e8f\u5217\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b \u6c42\u89e3\u8de8\u8d8a\u4e2d\u70b9\u7684\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b \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
\u5c06\u70b9\u5bf9\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u8fd1\u70b9\u5bf9\uff1b \u5bfb\u627e\u8de8\u8d8a\u5206\u754c\u7ebf\u7684\u70b9\u5bf9\uff0c\u4ece\u4e2d\u5bfb\u627e\u6700\u8fd1\u70b9\u5bf9\uff1b \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
\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684 \\(m < N\\)\uff0c\u6709\uff1a \\[ T(\\frac{m}{2}) = O(\\frac{m}{2}\\log \\frac{m}{2}) \\leq c \\frac{m}{2}\\log \\frac{m}{2} \\] \u5c06\u4e0a\u5f0f\u4ee3\u5165\uff1a \\[ 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
\u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b \u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b \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 \u3010eg1\u3011\\(a = b = 2,\\; f(N) = N\\)\uff1b \\(f(N) = N = \\Theta(N^{\\log_2{2}})\\)\uff0c\u9002\u7528\u4e8e\u60c5\u51b5 2\uff1b \u56e0\u6b64\u5f97\u5230\u7ed3\u679c \\(T(N) = \\Theta(N \\log N)\\)\uff1b \u3010eg2\u3011\\(a = b = 2,\\; f(N) = N \\log N\\)\uff1b \\(f(N) = N \\log N\\)\uff0c\u867d\u7136 \\(N \\log N = \\Omega(N^{\\log_2{2}})\\)\uff0c\u4f46\u662f \\(N \\log N \\neq \\Omega(N^{(\\log_2{2}) - \\varepsilon})\\)\uff0c\u6240\u4ee5\u4e0d\u9002\u7528\u4e8e\u60c5\u51b5 3\uff1b \u5177\u4f53\u6765\u8bf4\uff0c\\(\\lim \\limits_{N\\to \\infty} \\frac{N \\log N}{N^{1+\\varepsilon}}=\\lim \\limits_{N\\to \\infty} \\frac{\\log N}{N^{\\varepsilon}} = 0 \\text{ for fixed } \\varepsilon > 0\\)\uff1b \u8fd9\u4e2a\u4f8b\u5b50\u4f53\u73b0\u51fa\u4e86 \\(\\varepsilon\\) \u7684\u4e00\u5b9a\u4f5c\u7528\uff1b "},{"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
\u7b2c \\(0\\) \u5c42\uff08\u6839\uff09\u4e00\u5171 \\(1\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(f(N)\\)\uff1b \u7b2c \\(1\\) \u5c42\u4e00\u5171 \\(a\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a\\times f(\\frac{N}{b})\\)\uff1b \u7b2c \\(2\\) \u5c42\u4e00\u5171 \\(a^2\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a^2 \\times f(\\frac{N}{b^2})\\)\uff1b ...... \u7b2c \\(j\\) \u5c42\u4e00\u5171 \\(a^j\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a^j \\times f(\\frac{N}{b^j})\\)\uff1b ...... \u7b2c \\((\\log_b{N}) - 1\\) \u5c42\u4e00\u5171 \\(a^{(\\log_b{N}) - 1}\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a^{(\\log_b{N}) - 1} \\times f(\\frac{N}{b^{(\\log_b{N}) - 1}})\\)\uff1b \u7b2c \\(\\log_b{N}\\) \u5c42\uff0c\u5373\u4e3a\u53f6\u5b50\u5c42\uff0c\u4e00\u5171 \\(a^{\\log_b{N}} = N^{\\log_b{a}}\\) \u9879\uff0cconquer \u7684\u5f00\u9500\u4e3a \\(N^{\\log_b{a}} \\times \\Theta(1) = \\Theta(N^{\\log_b{a}})\\)\uff1b \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
\u82e5 \\(af(\\frac{N}{b}) = \\kappa f(N) \\text{ for fixed } \\kappa < 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N))\\)\uff1b \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 \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.
Assume \\(f_1\\geq f_2 \\geq ... \\geq f_n\\). \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
\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b \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
\u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b \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
\u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b \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
TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b 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
\u8fd9\u6761\u8def\u5f84\u7ecf\u8fc7\u4e86\u6240\u6709\u8282\u70b9\u6070\u597d\u4e00\u6b21\uff1b \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
\u8fde\u63a5 \\(G\\) \u4e2d\u6240\u6709\u6ca1\u8fde\u4e0a\u7684\u8fb9\uff0c\u4f7f \\(G\\) \u6210\u4e3a\u4e00\u5f20\u65e0\u6743\u5b8c\u5168\u56fe\uff1b \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) \\] \u53d8\u91cf\u662f\u5426\u91cd\u590d\u3001\u662f\u5426\u53d6\u975e\u4e0d\u662f\u91cd\u70b9\uff0c\\(x_1\\) \u53ef\u4ee5\u548c \\(x_6\\) \u662f\u540c\u4e00\u4e2a\u53d8\u91cf\uff0c\u4e5f\u53ef\u4ee5\u662f\u67d0\u4e2a\u53d8\u91cf\u7684\u975e\uff0c\u91cd\u70b9\u662f\u8fd9\u91cc\u7684\u4e09\u4e2a\u4e00\u7ec4\u7684\u5f62\u5f0f\u3002 "},{"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
bin 1: \\(0.2 + 0.8\\); bin 2: \\(0.7 + 0.3\\); bin 3: \\(0.4 + 0.1 + 0.5\\); \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
bin 1: \\(0.8 + 0.2\\); bin 2: \\(0.7 + 0.3\\); bin 3: \\(0.5 + 0.4 + 0.1\\); 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
item 1: \\(w_1 = 18.0, p_1 = 25.0\\); item 2: \\(w_2 = 15.0, p_2 = 24.0\\); item 3: \\(w_3 = 10.0, p_3 = 15.0\\); \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
\u5982\u679c\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u6240\u6709\u70b9\u7684\u4e2d\u5fc3\uff1b \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
\u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff1b \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 \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 \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 \u5f53\u6240\u6709\u70b9\u90fd\u88ab\u8986\u76d6\u540e\uff1a \u5982\u679c \\(|C_x| \\leq k\\)\uff0c\u5219\u8fd4\u56de yes\uff1b \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
\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 \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
\u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff0c\\(S_x = S\\)\uff1b \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 \u5f53 \\(|C_x| \\leq k\\) \u4e14 \\(S_x \\not = \\emptyset\\) \u65f6\uff0c\u91cd\u590d\u4ee5\u4e0b\u6b65\u9aa4\uff1a \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 \u5c06 \\(s_i\\) \u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b \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
\u6700\u4f18\u6027(optimality)\uff1a\u5373\u80fd\u6c42\u51c6\u786e\u89e3\uff1b \u9ad8\u6548\u6027(efficiency)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u9ad8\u6548\uff1b \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
\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 \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 \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
local optimum is a best solution in a neighborhood start with a feasible solution and search a better one within the neighborhood a local optimum is achieved if no improvement is possible \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
3
5
7
9
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
\u56e0\u4e3a\u5185\u6392\u5e8f\u5f88\u5feb\uff0c\u6240\u4ee5\u8981\u5c3d\u53ef\u80fd\u5229\u7528\u5185\u6392\u5e8f\uff1b \u6240\u4ee5\u4e00\u5f00\u59cb\u5c31\u8981\u5c06\u80fd\u5185\u6392\u5e8f\u505a\u7684\u4e8b\u60c5\u90fd\u7528\u5185\u6392\u5e8f\u89e3\u51b3\uff1b \u6240\u4ee5\u6700\u521d\u7684 run \u7684\u5927\u5c0f\u662f \\(M\\)\u3002 \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
\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 \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
\u4e00\u4e2a pass \u610f\u5473\u7740\u82e5\u5e72\u6b21 seek\uff0c\u6240\u4ee5\u51cf\u5c11 pass \u53ef\u4ee5\u662f\u4e00\u4e2a\u65b9\u5411\uff1b #pass-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316 merge \u7684\u8fc7\u7a0b\u4e2d\u4f1a\u591a\u6b21\u8bfb\u53d6 tape \u4e2d\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8e\u8ba1\u7b97\u673a\u6765\u8bf4\u5355\u6b21\u5927\u91cf\u8bfb\u53d6\u6bd4\u591a\u6b21\u5c0f\u91cf\u8bfb\u53d6\u66f4\u9ad8\u6548\uff0c\u5982\u4f55\u4f18\u5316\u6570\u636e\u8bfb\u53d6\u4e5f\u662f\u4e00\u4e2a\u65b9\u5411\uff1b #tape-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316 \u5982\u4f55\u66f4\u9ad8\u6548\u7684\u5728 \\(k\\)-way merge \u8fc7\u7a0b\u4e2d\uff0c\u5f52\u5e76 M \u4e2a\u5206\u522b\u6765\u81ea k \u4e2a\u5e8f\u5217\u7684\u6570\u636e\uff0c\u5373\u5185\u6392\u5e8f\u7684\u7b56\u7565\uff0c\u4e5f\u4e0a\u4f18\u5316\u7684\u4e00\u4e2a\u65b9\u5411\uff1b #k-\u8def\u5185\u6392\u5e8f\u4f18\u5316 \u8bfb\u5165\u3001\u5185\u6392\u5e8f\u3001\u8f93\u51fa\uff0c\u8fd9\u4e09\u4e2a\u4e8b\u52a1\u76ee\u524d\u662f\u505c\u673a\u4e32\u884c\u7684\uff0c\u8003\u8651\u5c06\u5176\u5e76\u884c\u5316\u4e5f\u662f\u4e00\u4e2a\u65b9\u5411\uff1b "},{"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
\\(T_2\\) \u4e0a \\(\\#run = 3\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 2\\)\uff1b 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
\\(T_2\\) \u4e0a \\(\\#run = 3-1 = 2\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 2-1 = 1\\)\uff1b \\(T_1\\) \u4e0a \\(\\#run = 0+1 = 1\\)\uff1b \\(T_4\\) \u4e0a \\(\\#run = 0\\)\uff1b \u7ee7\u7eed\u53d6\uff0c\u5373\uff1a
\\(T_2\\) \u4e0a \\(\\#run = 2-1 = 1\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 1-1 = 0\\)\uff1b \\(T_1\\) \u4e0a \\(\\#run = 1\\)\uff1b \\(T_4\\) \u4e0a \\(\\#run = 0+1 = 1\\)\uff1b \\(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
\\(T_2\\) \u4e0a \\(\\#run = 1-1 = 0\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 0\\)\uff1b \\(T_1\\) \u4e0a \\(\\#run = 1+1 = 2\\)\uff1b \\(T_4\\) \u4e0a \\(\\#run = 1\\)\uff1b \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
\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 \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
\\(\\max\\{r_i\\} = F^k_j\\); \\(\\min\\{r_i\\} = F^k_{j-1}\\); \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
\u5b98\u65b9\u7f51\u7ad9\uff1a\ud83d\udd17 \u89c6\u9891\u94fe\u63a5\uff1a\ud83d\udd17 \u53c2\u8003\u7b14\u8bb0\uff1a\ud83d\udd17 \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
\u65e5\u5e38\u591a\u8bfb\u591a\u5199\u591a\u6a21\u4eff\uff0c\u4e0d\u4e00\u5b9a\u8981\u548c\u79d1\u5b66\u6587\u7ae0\u6709\u5173\uff1b \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 \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 \u5c1d\u8bd5\u8ba9\u6587\u7ae0\u53d8\u5f97\u6709\u5438\u5f15\u529b\uff1b \u8ba4\u8bc6\u5230\u5199\u4f5c\u4e0d\u9700\u8981\u7075\u611f\uff0c\u4e0d\u8981\u628a\u7075\u611f\u5f53\u4f5c\u501f\u53e3\uff1b \u8ba4\u8bc6\u5230\u5199\u4f5c\u672c\u8eab\u662f\u56f0\u96be\u7684\uff0c\u800c\u5927\u5bb6\u90fd\u4e00\u6837\uff1b \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 \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 \u627e\u4e00\u4e2a\u597d\u7f16\u8f91\uff0cta \u4eec\u53ef\u80fd\u4f1a\u7ed9\u4f60\u597d\u7684\u610f\u89c1\u548c\u5efa\u8bae\uff1b \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
\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 \u66f4\u591a\u5730\u4f7f\u7528\u4e3b\u52a8\u8bed\u6001\uff08\u4e3b\u8c13\u5bbe\uff09\u800c\u975e\u88ab\u52a8\u8bed\u6001\uff1b \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 \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 414 \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
\u6388\u8bfe\uff1a\u8521\u94ed \u667a\u4e91\u8bfe\u5802\u94fe\u63a5\uff1a\ud83d\udd17 \u6559\u6750\uff1aLogic and Computer Design Fundamentals, Fifth Edition \u672c\u6587\u4e3b\u8981\u6765\u81ea\u4e8e\u6211\u5543\u6559\u6750\u65f6\u7684\u7b14\u8bb0\uff0c\u4f46\u5c0f\u7ed3\u5b89\u6392\u4e0d\u5b8c\u5168\u662f\u6309\u7167\u8bfe\u672c\u6765 \u56e0\u4e3a\u6211\u7684\u5f3a\u8feb\u75c7\uff0c\u6211\u5f88\u7ea0\u7ed3\u5982\u4f55\u628a\u8bdd\u8bf4\u901a\u987a\u548c\u628a\u4e0a\u4e0b\u903b\u8f91\u5199\u51fa\u6765\uff0c\u6240\u4ee5\u6709\u4e9b\u53ef\u80fd\u4e00\u773c\u5c31\u770b\u51fa\u6765\u7684\u4e1c\u897f\u6211\u8fd8\u662f\u8981\u89e3\u91ca\u4e00\u5927\u5806\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u6bd4\u8f83\u5570\u55e6\u545c\u545c\u545c\uff0c\u5e0c\u671b\u5927\u5bb6\u6709\u4efb\u4f55\u610f\u89c1\u6216\u8005\u5efa\u8bae\u90fd\u5199\u5728\u8bc4\u8bba\u533a\u91cc\u8ba9\u6211\u77e5\u9053\uff01\u5e0c\u671b\u8fd9\u4efd\u8d44\u6599\u53ef\u4ee5\u7ed9\u4f60\u5e26\u6765\u5e2e\u52a9\uff01 \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
\u672c\u7b14\u8bb0\u7ecf @MinJoker \u8865\u5145\u548c\u5b8c\u5584\u3002 \u66f4\u591a\u6570\u903b\u76f8\u5173\u7684\u77e5\u8bc6\u4e0e\u601d\u8003\u6b22\u8fce\u79fb\u6b65 MinJoker's Notebook\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
Chap 1 Digital Systems and Information Chap 2 Combinational Logic Circuits Chap 3 Combinational Logic Design Chap 4 Sequential Circuits Chap 5 Digital Hardware Implementation Chap 6 Registers & Register Transfers Chap 7 Memory Basics Glossary "},{"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
Numeric \u5fc5\u987b\u8868\u8fbe\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u6570\u5b57\uff1b \u80fd\u591f\u652f\u6301\u7b80\u5355\u4e14\u666e\u904d\u7684\u8ba1\u7b97\uff1b \u548c\u4e8c\u8fdb\u5236\u6570\u503c\u672c\u8eab\u6709\u8f83\u5927\u5173\u8054\uff1b Non-numeric \u76f8\u5bf9\u7075\u6d3b\uff0c\u56e0\u4e3a\u4e0d\u9700\u8981\u9002\u914d\u666e\u904d\u7684\u8fd0\u7b97\u6cd5\u5219\uff1b \u7075\u6d3b\u6027\u6307\uff0c\u4fdd\u8bc1\u7f16\u7801\u6620\u5c04\u5173\u7cfb\u662f\u552f\u4e00\u7684\u7684\u60c5\u51b5\u4e0b\u90fd\u53ef\u4ee5\u79f0\u4e3a\u5408\u6cd5\u7f16\u7801\uff1b \u548c\u4e8c\u8fdb\u5236\u6570\u503c\u672c\u8eab\u672a\u5fc5\u6709\u5173\u7cfb\uff1b "},{"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
\u6bd4\u5982\uff0c\u5982\u679c\u6211\u4eec\u91c7\u7528\u5076\u6821\u9a8c\uff0c\u539f\u59cb\u4fe1\u606f\u4e3a 1101
\uff0c\u5176\u4e2d\u6709 3 \u4e2a 1
\uff0c\u8fd9\u65f6\u6211\u4eec\u5728\u540e\u9762\u518d\u52a0\u4e0a\u4e00\u4e2a 1
\uff0c\u4fdd\u8bc1\u4e86\u6574\u4e2a\u4fe1\u606f\u4e32\u4e2d\u6709\u5076\u6570\u4e2a 1
\uff1b\u6216\u8005\u5982\u679c\u539f\u59cb\u4fe1\u606f\u4e3a 1001
\uff0c\u5176\u4e2d\u6709 2 \u4e2a 1
\uff0c\u8fd9\u65f6\u6211\u4eec\u5219\u5728\u540e\u9762\u52a0\u4e00\u4e2a 0
\u3002\u6b64\u65f6\uff0c\u5982\u679c\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u90a3\u4e48 1
\u7684\u6570\u91cf\u5f88\u53ef\u80fd\u53d8\u6210\u4e86\u4e00\u4e2a\u5947\u6570\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u77e5\u9053\uff0c\u8fd9\u4e2a\u4fe1\u606f\u662f\u4e0d\u5bf9\u7684\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
A
AND
B
\u53ef\u5199\u4f5c \\(A\\cdot B\\) \u6216\u8005 \\(AB\\)\uff1b A
OR
B
\u53ef\u5199\u4f5c \\(A+B\\)\uff1b NOT A
\u53ef\u5199\u4f5c \\(\\overline{A}\\)\uff1b \u7531\u6b64\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u7ec4\u5408\uff0c\u4f8b\u5982\uff1a
A
NOR
B
\u53ef\u5199\u4f5c \\(\\overline{A+B}\\)\uff1b A
NAND
B
\u53ef\u5199\u4f5c \\(\\overline{A\\cdot B}\\)\uff1b \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
\\(\\overline{A+B} = \\overline{A}\\cdot\\overline{B}\\)\uff1b \\(\\overline{A\\cdot B} = \\overline{A}+\\overline{B}\\)\uff1b "},{"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
Title: Universal Logic Gates URL: https://www.electronics-tutorials.ws/logic/universal-gates.html 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
\u62ec\u53f7 / ()\uff1b \u975e / NOT / \\(\\overline A\\)\uff1b \u4e0e / AND / \\(\\cdot\\)\uff1b \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
\\(X+XY\\) \u548c \\(X(X+Y)\\) \u5bf9\u5076\uff1b \\(X(Y+Z)\\) \u548c \\(X+YZ\\) \u5bf9\u5076\uff1b \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
\u5982\u679c F \u7684\u5bf9\u5076\u662f G\uff0c\u90a3\u4e48 F \u4e5f\u662f G \u7684\u5bf9\u5076\uff0c\u5373\u5bf9\u5076\u5173\u7cfb\u662f\u5bf9\u6210\u7684\uff1b \u5982\u679c\u8868\u8fbe\u5f0f F \u548c G \u7b49\u4ef7\uff0c\u90a3\u4e48\u4ed6\u4eec\u7684\u5bf9\u5076\u4e5f\u7b49\u4ef7\uff1b "},{"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
\u539f\u51fd\u6570\uff1a\\(F=\\overline{A}B+C\\overline{B}\\)\uff1b \u5176\u5bf9\u5076\u51fd\u6570\uff1a\\(F=(\\overline{A}+B)(C+\\overline{B})\\)\uff1b \u5176\u4e92\u8865\u51fd\u6570\uff1a\\(\\overline{F}=(A+\\overline{B})(\\overline{C}+D)\\)\uff1b "},{"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
\u539f\u7b49\u5f0f\uff1a\\(X(Y+Z)=XY+XZ\\)\uff1b \u5982\u679c\u4f7f\u7528 \\(X+YZ\\) \u66ff\u6362\u6240\u6709\u7684 \\(X\\)\uff0c\u5219\uff1a \u4fee\u6539\u540e\u7684\u7b49\u5f0f \\((X+YZ)(Y+Z)=(X+YZ)Y+(X+YZ)Z\\) \u4f9d\u7136\u6210\u7acb\uff1b "},{"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
\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1(literal cost)\uff1a\\(L\\) \u6309\u95e8\u8f93\u5165\u8ba1\uff0c\u4e0d\u8ba1\u975e\u95e8(gate-input cost)\uff1a\\(G\\) \u6309\u95e8\u8f93\u5165\u8ba1\uff0c\u8ba1\u975e\u95e8(gate-input cost with NOTs)\uff1a\\(GN\\) "},{"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
\\(F = BD + A\\overline{B}C + A\\overline{C}\\,\\overline{D}\\) \u4e2d \\(L = 8\\)\uff1b \\(F = ABC+\\overline{A}\\,\\overline{B}\\,\\overline{C}\\) \u4e2d \\(L = 6\\)\uff1b \\(F = (A+B+C)(\\overline{A}+\\overline{B} + \\overline{C})\\) \u4e2d \\(L = 6\\)\uff1b \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
\u7eff\u8272\u539f\u70b9\u8868\u793a\u4e00\u7ea7\u8f93\u5165\u5f15\u811a\uff1b \u84dd\u8272\u65b9\u70b9\u8868\u793a\u4e8c\u7ea7\u8f93\u5165\u5f15\u811a\uff1b \u9ed1\u8272\u4e09\u89d2\u8868\u793a\u975e\u95e8\u7684\u8f93\u5165\u5f15\u811a\uff1b \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
A \u548c B \u5404\u81ea\u7b97\u4e00\u4e2a\uff0cAB \u6574\u4f53\u7b97\u4e00\u4e2a\uff0c\u4e00\u5171 3 \u4e2a\uff1b \u4e00\u5171\u6709\u4e09\u7ec4\u7c7b\u4f3c AB \u7684\u7ed3\u6784\uff0c\u6240\u4ee5\u4e00\u5171\u662f 3 * 3 = 9 \u4e2a\uff1b \u5373 \\(G=9\\)\uff1b \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
\u53d1\u73b0\u6709\u4e24\u4e2a\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u6240\u4ee5\u8981\u989d\u5916\u8ba1 2 \u4e2a\uff0c\u4e00\u5171\u662f 11 \u4e2a\uff1b \u5373 \\(GN=11\\)\uff1b \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
\\(L = 6\\)\uff1b \\(G = 8\\)\uff1b \\(GN = 11\\)\uff1b \u9898\u9762\u7b54\u6848 \u8ba1\u7b97 \\(F=(A+\\overline{C})(\\overline{B}+C)(\\overline{A}+B)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002
\\(L = 6\\)\uff1b \\(G = 9\\)\uff1b \\(GN = 12\\)\uff1b \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
\\(L = 10\\)\uff1b \\(G = 14\\)\uff1b \\(GN = 17\\)\uff1b \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
\\(L = 11\\)\uff1b \\(G = 15\\)\uff1b \\(GN = 18\\)\uff1b \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
\\(L = 8\\)\uff1b \\(G = 12\\)\uff1b \\(GN = 15\\)\uff1b \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
\u7eff\uff1a\\(x=0,\\;y=0,\\;z=0/1\\) \u6240\u4ee5\u662f\uff1a\\(\\overline{X}\\,\\overline{Y}\\)\uff1b \u84dd\uff1a\\(x=0/1,\\;y=0/1,\\;z=0\\) \u6240\u4ee5\u662f\uff1a\\(\\overline{Z}\\)\uff1b \u7ea2\uff1a\\(x=1,\\;y=1,\\;z=0/1\\) \u6240\u4ee5\u662f\uff1a\\(XY\\) \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
\u8f93\u5165\u7ec4\u5408\u4e0d\u4f1a\u51fa\u73b0\uff1b \u8f93\u5165\u7ec4\u5408\u7684\u8f93\u51fa\u4e0d\u88ab\u4f7f\u7528\uff1b \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
\u5728\u5361\u8bfa\u56fe\u4e2d\uff0c\u4e00\u4e2a\u8574\u542b\u9879\u5c31\u662f\u4efb\u610f\u4e00\u4e2a\u5305\u542b \\(2^n\\) \u4e2a 1
\u7684\u5355\u5143\uff1b \u800c\u4e3b\u8574\u542b\u9879\u5219\u662f\u5728\u5361\u8bfa\u56fe\u4e2d\u7684 \u6781\u5927 \u8574\u542b\u9879\uff1b \u5bf9\u4e8e\u5b58\u5728 Dont'cares \u7684 K-map\uff0c\u5982\u679c\u6211\u4eec\u5173\u6ce8\u7684\u662f 1
\uff0c\u90a3\u6211\u4eec\u79ef\u6781\u5730\u5c06\u4ed6\u4eec\u5f53\u4f5c 1
\u6765\u5904\u7406\uff0c\u53cd\u4e4b\u4ea6\u7136\uff1b \u4f46\u662f\u5355\u72ec\u7684 X
\u4e0d\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e3b\u8574\u542b\u9879\uff1b \u57fa\u672c\u4e3b\u8574\u542b\u9879\u662f\u5305\u542b \u53ea\u88ab\u5b83(\u57fa\u672c\u4e3b\u8574\u542b\u9879)\u8986\u76d6\u7684 1
\u7684\u4e3b\u8574\u542b\u9879\uff1b
\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
\u5f53\u4f7f\u80fd\u7aef\u4e3a 1
\uff0c\u4e14\u8f93\u5165\u4e3a 1
\u65f6\uff0c\u8f93\u51fa\u4e3a 1
\uff1b \u5f53\u4f7f\u80fd\u7aef\u4e3a 1
\uff0c\u4e14\u8f93\u5165\u4e3a 0
\u65f6\uff0c\u8f93\u51fa\u4e3a 0
\uff1b \u5f53\u4f7f\u80fd\u7aef\u4e3a 0
\uff0c\u8f93\u51fa\u4e3a Hi-Z
/Z
/z
(\u6d6e\u52a8\uff0c\u9ad8\u963b\u6001)\uff1b
\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
\u7ec4\u5408\u7535\u8def(Combinational Circuit) \u62e5\u6709 m \u4e2a\u8f93\u5165\u548c n \u4e2a\u8f93\u51fa\uff0c\u5176\u4e2d\u5305\u542b\u4e86 \\(2^m\\) \u79cd\u8f93\u5165\u7ec4\u5408\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684 n \u4e2a\u4e0d\u540c\u7684\u51fd\u6570\uff1b \u6700\u5173\u952e\u7684\u662f\uff0c\u5b83\u7684 \u8f93\u51fa\u53ea\u4f9d\u8d56\u4e8e\u8fd9 m \u4e2a\u8f93\u5165\u7684\u7ec4\u5408\uff08\u4e0d\u5305\u542b\u56de\u8def\uff09\uff1b \u65f6\u5e8f\u7535\u8def(Sequential Logic Cirtuit) \u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0c\u65f6\u5e8f\u7535\u8def\u5177\u6709\u8bb0\u5fc6\u529f\u80fd\uff0c\u5373\u5b83\u7684\u8f93\u51fa\u53ef\u80fd\u4f1a\u4f9d\u8d56\u4e4b\u524d\u7684\u7ed3\u679c\uff1b \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
\u771f\u503c\u8868(Truth Table)\uff1b \u5e03\u5c14\u51fd\u6570(Boolean Function)\uff1b \u5361\u8bfa\u56fe(Karnaugh Maps)\uff1b \u65f6\u5e8f\u56fe(Timing Diagram)\uff1b \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
\u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b \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 \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u4ee5\u51cf\u5c11\u6210\u672c(\u6bd4\u5982\u4f7f\u7528\u5361\u8bfa\u56fe)\uff1b \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b \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
SSI(small-scale integrated) \u5185\u542b\u4e0d\u5230 10 \u4e2a gates\uff1b MSI(medium-scale integrated) \u5185\u542b 10 ~ 100 \u4e2a gates\uff1b LSI(large-scale integrated) \u5185\u542b \u6210\u767e\u4e0a\u5343 \u4e2a gates\uff1b VLSI(very large-scale integrated) \u5185\u542b \u6210\u5343\u4e0a\u4ebf \u4e2a gates\uff1b "},{"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
rise time \u7b49\u4e8e\u6805\u6781\u8f93\u51fa\u4ece \\(\\mathrm{V_{CC}}\\) \u7684 10% \u5347\u9ad8\u5230 90% \u6240\u9700\u8981\u7684\u65f6\u95f4\uff1b fall time \u7b49\u4e8e\u6805\u6781\u8f93\u51fa\u4ece \\(\\mathrm{V_{CC}}\\) \u7684 90% \u964d\u4f4e\u5230 10% \u6240\u9700\u8981\u7684\u65f6\u95f4\uff1b \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
\u4f20\u8f93\u5ef6\u8fdf(transport delay): \u8ba4\u4e3a\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u5ef6\u8fdf\u662f\u4e00\u4e2a\u5b9a\u503c\u7684\uff1b
\u60ef\u6027\u5ef6\u8fdf(inertial delay): \u5f15\u5165\u4e86 \u62d2\u7edd\u65f6\u95f4(rejection time)\uff0c\u53ea\u6709\u5f53\u8f93\u5165\u8fbe\u5230\u4e00\u5b9a\u80fd\u91cf\u540e\uff0c\u624d\u4f1a\u51fa\u53d1\u6805\u6781\u8f93\u51fa\uff08\u5728\u8fd9\u79cd\u6a21\u578b\u4e0b\uff0c\u566a\u97f3\u7b49\u4f1a\u88ab\u8fc7\u6ee4\uff09\uff1b
\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
\u4eba\u5de5\u903b\u8f91\u5206\u6790(Manual Logic Analysis)\uff1a \u627e\u5230\u6700\u7ec8\u7535\u8def\u7684\u771f\u503c\u8868\u6216\u5e03\u5c14\u4ee3\u6570\u5f0f\uff0c\u5224\u65ad\u5176\u662f\u5426\u548c\u9884\u671f\u884c\u4e3a\u4e00\u81f4\uff1b \u4eff\u771f(Simulation)\uff1a \u5728\u4eff\u771f\u73af\u5883\u4e2d\uff0c\u4f7f\u7528\u5408\u9002\u7684\u6d4b\u8bd5\u8f93\u5165\uff08\u6fc0\u52b1\u4fe1\u53f7\uff09\u6765\u6d4b\u8bd5\u6700\u7ec8\u7535\u8def\uff08\u6216\u5176\u7f51\u8868\uff0c\u53ef\u80fd\u7f16\u5199\u4e3a HDL\uff09\uff0c\u901a\u8fc7\u89c2\u5bdf\u5176\u54cd\u5e94\u7ed3\u679c\u6765\u5224\u65ad\u662f\u5426\u5b9e\u73b0\u9884\u671f\u884c\u4e3a\uff1b 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":" \u5e38\u91cf\u51fd\u6570(Value-Fixing)\uff1a\\(F=0\\;\\;or\\;\\;F=1\\) | \u8f93\u51fa\u5b9a\u503c\uff1b \u4f20\u8f93\u51fd\u6570(Transferring)\uff1a\\(F=X\\) | \u76f4\u63a5\u8f93\u51fa\u8f93\u5165\u503c\uff1b \u9006\u53d8\u51fd\u6570(Inverting)\uff1a\\(F=\\overline{X}\\) | \u8f93\u51fa\u8f93\u5165\u7684\u76f8\u53cd\uff1b \u4f7f\u80fd\u51fd\u6570(Enabling)\uff1a\\(F=X\\cdot En \\;\\; or \\;\\; F = X + \\overline{En}\\) | \u901a\u8fc7\u4f7f\u80fd\u63a7\u5236\u8f93\u51fa\u662f\u5426\u53ef\u53d8\uff0c\u5206\u4e3a\u4e24\u79cd\uff0c\u6bd4\u5982\u4e0e\u7684\u5f62\u5f0f\u4e2d\uff0c\u53ea\u6709 \\(En\\) \u4e3a 1
\u65f6\uff0c\\(F\\) \u8868\u73b0\u4e3a \\(X\\) \u7684\u503c\uff1b\u53cd\u4e4b\u8f93\u51fa\u5fc5\u5b9a\u4e3a 0
\uff08\u6ce8\u610f\u533a\u5206\u5b83\u4e0e\u4e09\u6001\u95e8\u7684\u533a\u522b\uff0c\u9ad8\u963b\u6001 or \u5b9a\u503c\uff09\uff1b "},{"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
\u5c06\u63a7\u5236\u7aef\u5f53\u4f5c\u8f93\u5165\uff0c\u539f\u6765\u7684\u8f93\u5165\u5f53\u4f5c\u7ed3\u679c\uff1b \u5373\u53ef\u4ee5\u5c06\u4e00\u4e2a\u56db\u8f93\u5165 MUX
\u5f53\u4f5c\u4e00\u4e2a\u4e8c\u8f93\u5165\u7684\u51fd\u6570\uff1b \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":" TODO: \u8865\u5145\u8fd9\u91cc\u3002 "},{"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
\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 \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
\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 \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":" \u7406\u8bba\u5206\u6790\u4e2d\uff1a \u72b6\u6001\u8868(Characteristic Table, or State Table)\u7528\u8f93\u5165\u548c\u5f53\u524d\u72b6\u6001\u6765\u63cf\u8ff0\u4e0b\u4e00\u72b6\u6001\uff1b \u5de5\u7a0b\u8bbe\u8ba1\u4e2d\uff1a \u6fc0\u52b1\u8868(Excitation Table)\u7528\u5f53\u524d\u72b6\u6001\u548c\u4e0b\u4e00\u72b6\u6001\u6765\u63cf\u8ff0\u8f93\u5165\uff08\u5c55\u793a\u4ece\u5f53\u524d\u72b6\u6001\u8f6c\u79fb\u5230\u4e0b\u4e00\u72b6\u6001\u6240\u9700\u8981\u7684\u8f93\u5165\uff09\uff1b "},{"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
\u89e6\u53d1\u5668\u7684\u6570\u91cf\u57fa\u672c\u53d6\u51b3\u4e8e\u6574\u4e2a\u9700\u6c42\u4e2d \u72b6\u6001 \u7684\u6570\u91cf\uff0c\\(n\\) \u4e2a\u89e6\u53d1\u5668\u80fd\u591f\u8868\u8fbe \\(2^n\\) \u4e2a\u4e8c\u8fdb\u5236\u72b6\u6001\uff1b \u7ec4\u5408\u7535\u8def\u7684\u4e3b\u8981\u8bbe\u8ba1\u56f4\u7ed5 \u89e6\u53d1\u5668 \u7684 \u8f93\u5165 \u548c \u8f93\u51fa \u5c55\u5f00\uff1b \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
\u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b \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 \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 \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 \u7ed9\u8bbe\u8ba1\u597d\u7684\u72b6\u6001\u7f16\u7801\u8d4b\u503c\uff0c\u5f97\u5230\u5177\u4f53\u7684\u72b6\u6001\u8868\uff1b \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 \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 \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u4f7f\u7528\u7684\u89e6\u53d1\u5668\u53ca\u5176\u8f93\u5165\u65b9\u7a0b\uff1b \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u8f93\u51fa\u65b9\u7a0b\uff1b \u4f18\u5316\u8f93\u5165\u65b9\u7a0b\u548c\u8f93\u51fa\u65b9\u7a0b\uff1b \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b \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
Moore \u53ea\u4e0e\u72b6\u6001\u6709\u5173\uff0c\u6240\u4ee5\u5728\u56fe\u4e2d\u4ece\u72b6\u6001\u8282\u70b9\u5f15\u51fa\uff1b TCI Mealy \u4e0e\u72b6\u6001\u548c\u8f93\u51fa\u6761\u4ef6\u6709\u5173\uff0c\u6240\u4ee5\u5728\u56fe\u4e2d\u4ece\u72b6\u6001\u8282\u70b9\u5f15\u51fa\u5199\u5728 OC \u540e\u9762\uff08OC
/TCI OA
\uff09\uff1b TCD Mealy \u4e0e\u8f6c\u79fb\u6761\u4ef6\u6709\u5173\uff0c\u5f53\u8f6c\u79fb\u6210\u7acb\u7684\u65f6\u5019\u53d1\u751f Output Action\uff0c\u6240\u4ee5\u76f4\u63a5\u5199\u5728 TC \u540e\u9762\uff08TC
/TCD OA
\uff09\uff1b TOCD Mealy \u5728\u8f6c\u79fb\u53d1\u751f\u65f6\u5019\u624d\u53ef\u80fd\u6761\u4ef6\u6210\u7acb\uff0c\u5373\u5f53 TC \u548c OC \u90fd\u6210\u7acb\u65f6\u624d\u53d1\u751f Output Action\uff0c\u6240\u4ee5\u9700\u8981\u4ece TC \u5f15\u51fa OC\uff0c\u5e76\u8ddf\u5728 OC \u540e\u9762\uff08TC
\u2014\u2014OC
/TOCD OA
\uff09\uff1b \u5982\u679c\u51fa\u73b0\u590d\u6570\u7684 TOCD OA\uff0c\u5219\u4f7f\u7528 ,
\u5206\u9694\uff1b 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
TC \u7684\u975e\u4ea4\u548c\u5145\u5206\u662f\u4ee5\u67d0\u4e2a\u72b6\u6001\u4e3a\u5bf9\u8c61\u7684\uff0c\u800c OC \u7684\u975e\u4ea4\u548c\u5145\u5206\u5219\u662f\u4ee5\u67d0\u4e2a\u8f93\u51fa\u53d8\u91cf\u4e3a\u5bf9\u8c61\u7684\uff1b \u4e0d\u540c\u4e8e TC \u7684\u663e\u5f0f\uff0cOC \u7684\u5199\u6cd5\u5728\u5f88\u591a\u65f6\u5019\u662f\u9690\u5f0f\u7684\uff1a \u5bf9\u4e8e TCD \u548c TCOD\uff0c\u5206\u6790\u67d0\u4e2a\u8f93\u51fa\u53d8\u91cf\u7684\u65f6\u5019\uff0c\u5e94\u8be5\u628a\u76f8\u5e94\u7684 TC \u4e5f\u7eb3\u5165 OC \u7684\u5206\u6790\u4e2d\uff1b \u5bf9\u4e8e Moore\uff0cOC \u76f8\u5f53\u4e8e 1
\uff1b \u5bf9\u4e8e TCI\uff0c\u9700\u8981\u6ce8\u610f\u628a default \u7684\u8f93\u51fa\u60c5\u51b5\u4e5f\u7eb3\u5165\u5206\u6790\u4e2d\uff08\u4e8b\u5b9e\u4e0a default \u7684\u5b58\u5728\u4f7f\u5f97\uff0c\u53ea\u8981\u56fe\u4e2d\u663e\u5f0f\u7684 OC \u975e\u4ea4\uff0c\u90a3\u4e48\u4e00\u5b9a\u53ef\u4ee5\u4fdd\u8bc1\u6240\u6709 OC \u662f\u975e\u4ea4\u4e14\u5145\u5206\u7684\uff09\uff1b \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
\u7ec4\u5408\u7535\u8def\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b \u89e6\u53d1\u5668\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b \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
Setup Time\uff1a\u91c7\u6837\u8fb9\u7f18\u524d\u8f93\u5165\u4fe1\u53f7\u9700\u8981\u4fdd\u6301\u7a33\u5b9a\u7684\u65f6\u95f4\uff1b Hold Time\uff1a\u91c7\u6837\u8fb9\u7f18\u540e\u8f93\u5165\u4fe1\u53f7\u9700\u8981\u4fdd\u6301\u7a33\u5b9a\u7684\u65f6\u95f4\uff1b Propagation Time\uff1a\u89e6\u53d1\u5668\u7684\u91c7\u6837\u8fb9\u7f18\u5230\u8f93\u51fa\u7a33\u5b9a\u7684\u65f6\u95f4\uff08\u4f20\u64ad\u65f6\u95f4\uff09\uff1b \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
\u8fd9\u51e0\u4e2a\u65f6\u95f4\u70b9\u8d77\u70b9/\u7ec8\u70b9\u90fd\u662f\u89e6\u53d1\u8fb9\u7f18\uff1b 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 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 3054 \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
\u5728\u6570\u5b57\u903b\u8f91\u7684\u8bbe\u8ba1\u7a7a\u95f4\u4e2d\uff0cCOMS \u51ed\u501f\u5176\u8f83\u9ad8\u7684\u6297\u566a\u6027\u80fd\u548c\u8f83\u4f4e\u7684\u80fd\u8017\uff0c\u6210\u4e3a\u76ee\u524d\u5e94\u7528\u6700\u5e7f\u6cdb\u7684\u786c\u4ef6\u6280\u672f\u4e4b\u4e00\uff1b \u53ef\u7f16\u7a0b\u6280\u672f\u4f7f\u5f97\u786c\u4ef6\u5728\u51fa\u5382\u540e\uff0c\u80fd\u591f\u6839\u636e\u7528\u6237\u7684\u9700\u6c42\u8fdb\u4e00\u6b65\u7f16\u8f91\u786c\u4ef6\uff0c\u4ece\u800c\u5b9e\u73b0\u7279\u5b9a\u7684\u903b\u8f91\u529f\u80fd\uff1b \u66f4\u8fdb\u4e00\u6b65\u5730\uff0c\u53ef\u7f16\u7a0b\u6280\u672f\u53c8\u53ef\u4ee5\u5206\u4e3a\u6c38\u4e45(permanent)\u7f16\u7a0b\u6280\u672f\u548c\u53ef\u91cd(reprogrammable)\u7f16\u7a0b\u6280\u672f\uff1b "},{"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\u7535\u6e90\u6307\u5411\u63a5\u5730\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
\u63a7\u5236\u8fde\u63a5\u6765\u5b9e\u73b0(Control Connections)\uff1a Mask programing Fuse\uff08\u7c7b\u4f3c\u4e8e\u4fdd\u9669\u4e1d\uff0c\u901a\u8fc7\u9ad8\u7535\u538b\u6765\u5207\u65ad\u90e8\u5206\u7535\u8def\u6765\u5b9e\u73b0\uff09 Anti-fuse\uff08Fuse \u7684\u53cd\u64cd\u4f5c\uff0c\u901a\u8fc7\u9ad8\u7535\u538b\u6765\u8054\u901a\u90e8\u5206\u7535\u8def\u6765\u5b9e\u73b0\uff09 Single-bit storage element \u4f7f\u7528\u67e5\u627e\u8868(Lookup Tables)\uff1a Storage elements for the function \u6bd4\u5982\u4f7f\u7528\u4e00\u4e2a MUX
\uff0c\u5e76\u5c06\u8f93\u5165\u7aef\u63a5\u5185\u5b58\uff0c\u901a\u8fc7\u4fee\u6539\u5185\u5b58\u7684\u503c\u6765\u4fee\u6539 MUX
\u7684\u884c\u4e3a\uff0c\u8fdb\u800c\u5b9e\u73b0\u51fd\u6570\u91cd\u7f16\u7a0b \u63a7\u5236\u6676\u4f53\u7ba1\u5f00\u5173\u5b9e\u73b0(Control Transistor Switching) \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
\u6c38\u4e45(permanent)\u7f16\u7a0b\u6280\u672f\uff1a\u51fa\u5382\u540e\u7ecf\u8fc7\u4e00\u6b21\u7f16\u7a0b\uff0c\u4fbf\u6c38\u4e45\u6210\u578b\uff1b Mask programming Fuse Anti-fuse \u53ef\u91cd(reprogrammable)\u7f16\u7a0b\u6280\u672f\uff1a\u5141\u8bb8\u91cd\u590d\u8fdb\u884c\u7f16\u7a0b\uff1b Volatile\uff1a\u65ad\u7535\u540e\u7f16\u7a0b\u4fe1\u606f\u4f1a\u4e22\u5931\uff1b Single-bit storage element Non-Volatile\uff1a\u7f16\u7a0b\u4fe1\u606f\u4ec5\u5728\u64e6\u9664\u64cd\u4f5c\u540e\u624d\u4f1a\u6d88\u5931\uff0c\u4e0d\u53d7\u65ad\u7535\u5f71\u54cd\uff1b Flash (as in Flash Memory) "},{"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
\u53ea\u8bfb\u5185\u5b58 Read Only Memory (ROM) \u53ef\u7f16\u7a0b\u9635\u5217\u903b\u8f91 Programmable Array Logic (PAL\u24c7) \u53ef\u7f16\u7a0b\u903b\u8f91\u9635\u5217 Programmable Logic Array (PLA) Complex Programmable Logic Device (CPLD) or Field-Programmable Gate Array(FPGA) \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
\u5982\u679c\u6ca1\u6709\u7279\u6b8a\u7b26\u53f7\uff0c\u5219\u8868\u793a\u8fd9\u4e2a\u4ea4\u53c9\u70b9 is not connected \uff1b
\u5982\u679c\u6709\u4e00\u4e2a \u274c\uff0c\u5219\u8868\u793a\u8fd9\u4e2a\u4ea4\u53c9\u70b9 is connected and programmable\uff1b
\u5982\u679c\u53ea\u6709\u4e00\u4e2a\u52a0\u7c97\u7684\u70b9\uff0c\u5219\u8868\u793a\u8fd9\u4e2a\u4ea4\u53c9\u70b9 is connected but not programmable\uff1b
\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
\u4e0b\u6587\u5bf9\u4e8e\u51e0\u79cd\u5e38\u89c1\u7684\u53ef\u7f16\u7a0b\u6280\u672f\u7684\u4ecb\u7ecd\u6bd4\u8f83\u6709\u9650\uff0c\u6570\u903b\u8bfe\u5802\u4e0a\u4e5f\u53ea\u662f\u4e00\u5e26\u800c\u8fc7\u3002\u5982\u679c\u6709\u673a\u4f1a\u7684\u8bdd\uff0c\u5176\u5b9e\u9700\u8981\u66f4\u8fdb\u4e00\u6b65\u659f\u914c\u8fd9\u4e9b\u5185\u5bb9\u3002 "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#rom","title":"ROM","text":"\\(2^N\\times M\\) 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
PAL \u4e0d\u9700\u8981\u50cf ROM \u90a3\u6837\u5217\u51fa\u6240\u6709\u6700\u5c0f\u9879\uff0c\u8fd9\u5c31\u610f\u5473\u7740 PAL \u662f\u53ef\u4f18\u5316\u7684\uff0c\u56e0\u6b64 PAL \u5728\u5f88\u591a\u65f6\u5019\u6bd4 ROM \u66f4\u9ad8\u6548\u66f4\u8282\u7ea6\uff1b \u4f46\u4e5f\u6b63\u662f\u56e0\u4e3a\u5b83\u4e0d\u50cf ROM \u90a3\u6837\u80fd\u591f\u679a\u4e3e\u6700\u5c0f\u9879\u6765\u5b9e\u73b0\u6240\u6709\u903b\u8f91\uff0cPAL \u4e0d\u4e00\u5b9a\u80fd\u8868\u8fbe\u6240\u6709\u903b\u8f91\uff1b \u4e00\u79cd\u6539\u8fdb\u65b9\u6cd5\u662f\uff0c\u901a\u8fc7\u5c06\u4e00\u4e2a\u65e2\u6709\u7684 PAL \u8f93\u51fa\u5f53\u4f5c\u8f93\u5165\uff0c\u8f93\u5165\u5230\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\u4e2d\uff0c\u6765\u5f25\u8865\u9879\u4e0d\u8db3\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u4e0b\u56fe\u7684 \\(W\\)\uff1b 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
PLA \u5177\u6709\u53ef\u7f16\u7a0b\u7684 AND \u548c OR\uff0c\u56e0\u6b64\u6bd4\u8d77 PAL \u548c ROM \u66f4\u5177\u7075\u6d3b\u6027\uff1b \u4f46\u662f\u7075\u6d3b\u6027\u5e26\u6765\u7684\u5f0a\u7aef\u662f\uff0cPLA \u7684\u4f18\u5316\u4f1a\u53d8\u5f97\u66f4\u52a0\u590d\u6742\uff0c\u8fd9\u5bf9\u4e8e\u4f18\u5316\u8f6f\u4ef6\u6709\u7740\u66f4\u9ad8\u7684\u8981\u6c42\uff1b \u6b64\u5916\uff0cPLA \u548c PAL \u5177\u6709\u4e00\u6837\u7684\u95ee\u9898\uff0c\u5c31\u662f\u65e0\u6cd5\u8868\u8fbe\u6240\u6709\u903b\u8f91\u51fd\u6570\uff1b \u4e00\u79cd\u6539\u8fdb\u65b9\u6cd5\u662f\uff0c\u5728\u8f93\u51fa\u7684\u65f6\u5019\u518d\u505a\u4e00\u6b21\u5f02\u6216\uff08\u4e0d\u7528\u975e\u95e8\u4f53\u73b0\u4e86\u53ef\u7f16\u7a0b\u7684\u601d\u60f3\uff09\uff0c\u4ee5\u4ea7\u751f\u65b0\u7684\u9879\uff0c\u6765\u5f25\u8865\u9879\u4e0d\u8db3\u7684\u95ee\u9898\uff1b eg PLA \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a
"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#lookup-tables","title":"Lookup Tables","text":"\u8003\u8bd5\u987b\u77e5
Lookup Tables \u8fd9\u90e8\u5206\u5185\u5bb9\u4e0d\u4f5c\u8003\u8bd5\u8981\u6c42\u3002
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
CLB(Configurable Logic Block) \u5927\u91cf\u5b58\u50a8 LUT
SM(Switch Matrix) \u53ef\u7f16\u7a0b\u7684\u4ea4\u6362\u77e9\u9635 IOB(Input & Output Block) \u53ef\u7f16\u7a0b\u7684\u8f93\u5165\u8f93\u51fa\u5355\u5143 "},{"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
Flexibility: \u8bc4\u4f30\u4e00\u6761\u7ebf\u53ef\u4ee5\u8fde\u63a5\u5230\u591a\u5c11\u7ebf\uff1b Topology: \u54ea\u4e9b\u7ebf\u53ef\u4ee5\u88ab\u8fde\u63a5\u5230\uff1b 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
Decoder
s & OR
gates \u5c06\u8bd1\u7801\u51fa\u6765\u7684\u9700\u8981\u7684\u76ee\u6807\u7ec4\u5408\u90fd OR
\u5728\u4e00\u8d77\uff1b MUX
s \u901a\u8fc7\u591a\u8def\u9009\u62e9\u5668\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\uff1b ROM
s PAL
s PLA
s LUT
s "},{"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
\u8bbe\u8ba1\u5177\u6709\u4ee3\u8868\u6027\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b \u590d\u5236\u5e76\u8fde\u63a5\u82e5\u5e72\u4e2a\u8fd9\u6837\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b \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
\u5bc4\u5b58\u5668\u7684\u529f\u80fd\u51fd\u6570\uff1b \u4e00\u822c\u6307\u5bc4\u5b58\u5668\u4f20\u8f93\uff1b \u63a7\u5236\u4fe1\u53f7\u6784\u6210\uff1b \u6709\u54ea\u4e9b\u63a7\u5236\u4fe1\u53f7\u3001\u662f\u5426\u7f16\u7801\u3001\u5982\u4f55\u51b3\u5b9a\u662f\u5426 Load \u7b49\uff1b \u5bc4\u5b58\u5668\u7684\u8f93\u5165\u6570\u636e\uff1b \u6709\u54ea\u4e9b\u8f93\u5165\u6570\u636e\u3001\u662f\u5426\u9700\u8981\u9884\u5148\u5904\u7406\u7b49\uff1b \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
\u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u96c6\u5408\uff1b \u5bf9\u4e8e\u6570\u636e\u7684\u64cd\u4f5c\uff1b \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
\u4f18\u52bf\uff1a \u7535\u8def\u66f4\u7cbe\u7b80\uff0c\u6210\u672c\u66f4\u4f4e\uff0c\u968f\u7740\u5bc4\u5b58\u5668\u589e\u52a0\u8fd9\u4e2a\u7279\u70b9\u66f4\u52a0\u660e\u663e\uff1b \u52a3\u52bf\uff1a \u540c\u4e00\u65f6\u523b\u5185\u603b\u7ebf\u53ea\u80fd\u4f20\u8f93\u4e00\u4e2a\u6570\u636e\uff0c\u5373\u53ea\u6709\u4e00\u4e2a\u6570\u636e\u6e90(source)\uff1b \u540c\u4e00\u65f6\u949f\u5468\u671f\u5185\u53ea\u6709\u4e00\u4e2a\u6570\u636e\u80fd\u4f20\u8f93\u5230\u522b\u7684\u5730\u65b9\uff0c\u4f8b\u5982\u4ea4\u6362\u64cd\u4f5c\u5c31\u9700\u8981\u81f3\u5c11\u4e24\u4e2a\u65f6\u949f\u624d\u80fd\u5b9e\u73b0\uff1b \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
\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 \u7b97\u672f\uff0carithmetic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u7b97\u672f\u8fd0\u7b97\u64cd\u4f5c\uff1b \u903b\u8f91\uff0clogic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u903b\u8f91\u8fd0\u7b97\u64cd\u4f5c\uff1b \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
\u7eb5\u5411\u89c2\u5bdf\u53f3\u4fa7\u7684\u56db\u4e2a FF
\uff0c\u53ef\u4ee5\u53d1\u73b0\u57fa\u672c\u4e0a\u5c31\u662f\u4e32\u884c\u79fb\u4f4d\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u5176\u8f93\u5165\u4e0d\u518d\u662f\u76f4\u63a5\u4ece\u4e0a\u4e00\u4e2a FF
\u90a3\u8fb9\u62ff\u6765\u7684\uff1b \u56db\u4e2a FF
\u7684\u8f93\u5165\u662f\u7c7b\u4f3c\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4ec5\u5173\u6ce8\u6700\u4e0a\u9762\u7684\u90a3\u4e09\u4e2a\u4e0e\u95e8\u548c\u4e00\u4e2a\u6216\u95e8\uff0c\u8868\u793a\u6570\u636e\u8f93\u5165\u6709\u4e09\u4e2a\u53ef\u80fd\u7684\u6765\u6e90\uff1b \u7b2c\u4e00\u4e2a\u4e0e\u95e8\uff0c\\(F_i=Shift \\cdot SI\\)\uff08\u5bf9\u4e8e\u540e\u9762\u51e0\u4e2a FF
\uff0c\u5219\u662f \\(F_i=Shift \\cdot FF_{i-1}\\)\uff09\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6b64\u65f6\u7535\u8def\u7684\u884c\u4e3a\u4e0e\u4e32\u884c\u79fb\u4f4d\u5b9e\u73b0\u4e00\u81f4\uff1b \u5373 \\(Shift\\) \u4e3a 1
\u65f6\uff0cSHR
\u8868\u73b0\u4e3a\u300c\u6bcf\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6b21\u79fb\u4f4d\u300d\uff1b \u7b2c\u4e8c\u4e2a\u4e0e\u95e8\uff0c\\(F_i=\\overline{Shift} \\cdot Load \\cdot D_i\\)\uff0c\u6b64\u65f6\u7535\u8def\u7684\u884c\u4e3a\u662f\u4f7f\u7528\u6bd4\u7279\u5411\u91cf\u5bf9\u6bcf\u4e00\u4e2a FF
\u8d4b\u503c\uff0c\u5373\u5e76\u884c\u8f7d\u5165\uff1b \u5373 \\(\\overline{Shift} \\cdot Load\\) \u4e3a 1
\u65f6\uff0cSHR
\u8868\u73b0\u4e3a\u300c\u5e76\u884c\u8f7d\u5165\u300d\uff1b \u7b2c\u4e09\u4e2a\u4e0e\u95e8\uff0c\\(F_i=\\overline{Shift} \\cdot \\overline{Load} \\cdot Q_i\\)\uff0c\u6b64\u65f6\u7535\u8def\u7684\u884c\u4e3a\u662f\u4fdd\u6301\u4e0a\u4e00\u5468\u671f\u7684\u7ed3\u679c\uff1b \u5373 \\(\\overline{Shift} \\cdot \\overline{Load}\\) \u4e3a 1
\u65f6\uff0cSHR
\u8868\u73b0\u4e3a\u300c\u4fdd\u6301\u300d\uff1b \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
\u4e0a\u56fe\u4e2d\uff0c\u4e0b\u4e00\u4e2a FF
\u7684\u65f6\u949f\u6765\u81ea\u4e8e\u4e0a\u4e00\u4e2a FF
\u7684\u8f93\u51fa\u53d6\u53cd\uff0c\u4e5f\u5c31\u662f\u5bf9\u4e8e\u4e0a\u5347\u6cbf\u89e6\u53d1\u7684 FF
\u6765\u8bf4\uff0c\u4e0b\u4e00\u4e2a FF
\u4f1a\u5728\u4e0a\u4e00\u4e2a FF
\u7684\u8f93\u51fa\u4ece 1
\u5230 0
\u65f6\u81ea\u53cd\uff0c\u6240\u4ee5\u662f\u6b63\u5411\u8ba1\u65f6(Upward Counting)\uff1b \u53cd\u4e4b\uff0c\u5982\u679c\u4e0b\u4e00\u4e2a FF
\u7684\u65f6\u949f\u6765\u81ea\u4e8e\u4e0a\u4e00\u4e2a FF
\u7684\u76f4\u63a5\u8f93\u51fa\uff0c\u4e5f\u5c31\u662f\u5bf9\u4e8e\u4e0a\u5347\u6cbf\u89e6\u53d1\u7684 FF
\u6765\u8bf4\uff0c\u4e0b\u4e00\u4e2a FF
\u4f1a\u5728\u4e0a\u4e00\u4e2a FF
\u7684\u8f93\u51fa\u4ece 0
\u5230 1
\u65f6\u81ea\u53cd\uff0c\u6240\u4ee5\u662f\u9006\u5411\u8f93\u51fa(Downward Counting)\uff1b
\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
\u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a(specification)\uff1b \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 \u8bbe\u8ba1\u72b6\u6001\u673a\uff1b \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 \u7ed8\u5236\u6846\u56fe(block diagram)\uff1b \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u548c\u6570\u636e\u901a\u8def\u7684\u5bc4\u5b58\u5668\u4f20\u8f93\u903b\u8f91(register transfer logic)\uff1b \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u903b\u8f91(control unit logic)\uff1b \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 4504 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \u5206\u949f
\u5f15\u5165
\u672c\u7ae0\u5185\u5bb9\u4e3b\u8981\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u91cd\u70b9\uff1a
\u5185\u5b58\u4e0e RAM \u7684\u57fa\u672c\u6982\u5ff5\uff0c\u7406\u89e3\u5982\u4f55\u901a\u8fc7\u5730\u5740\u6765\u8bbf\u95ee\u5185\u5b58\uff0c\u5e76\u5206\u6790\u8bfb\u5199\u64cd\u4f5c\u7684\u65f6\u5e8f\uff1b \u4ee5 SRAM \u4e3a\u4f8b\uff0c\u4ece cell -> bit slice -> 2-dimensional cell arrays -> chip \u9010\u6b65\u642d\u5efa\u8d77\u4e00\u4e2a\u5927\u578b\u5185\u5b58\uff1b DRAM \u7684\u539f\u7406\uff0c\u7406\u89e3\u5982\u4f55\u901a\u8fc7\u65f6\u949f\u540c\u6b65\u548c burst read \u6765\u63d0\u9ad8 DRAM \u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff1b "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u5185\u5b58","title":"\u5185\u5b58","text":"\u5185\u5b58(Memory)\u7531\u4e00\u7cfb\u5217\u5b58\u50a8\u5355\u5143\u4e0e\u76f8\u5e94\u7684\u903b\u8f91\u7535\u8def\u7ec4\u6210\uff0c\u8ba1\u7b97\u673a\u4e2d\u7684\u5185\u5b58\u5305\u62ec\u4e24\u7c7b\uff1a\u968f\u673a\u8bbf\u95ee\u5185\u5b58(Random-Access Memory)\u4e0e\u53ea\u8bfb\u5185\u5b58(Read-Only Memory)\u3002\u8fd9\u4e24\u7c7b\u5185\u5b58\u90fd\u9700\u8981\u501f\u52a9\u5730\u5740(address)\u6765\u5b9e\u73b0\u5bf9\u6570\u636e\u7684\u8bfb\u4e0e\u5199\u3002\u5176\u4e2d\uff0c\u53ea\u8bfb\u5185\u5b58\uff08\u5373 ROM\uff09\u7684\u76f8\u5173\u77e5\u8bc6\u5df2\u7ecf\u5728 \u7b2c\u4e94\u7ae0#ROM \u4e2d\u63d0\u53ca\uff0c\u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u968f\u673a\u8bbf\u95ee\u5185\u5b58\uff08\u5373 RAM\uff09\u3002
\u4e3a\u4ec0\u4e48 RAM \u662f\u968f\u673a\u8bbf\u95ee\uff1f
\u5f53\u8bfb\u8005\u770b\u5230\u201c\u968f\u673a\u8bbf\u95ee\u201d\u8fd9\u4e2a\u8bcd\uff0c\u6216\u8bb8\u4f1a\u611f\u5230\u7591\u60d1\uff1a\u96be\u9053\u8fd8\u6709\u4ec0\u4e48\u5185\u5b58\u662f\u4e0d\u53ef\u4ee5\u968f\u673a\u8bbf\u95ee\u7684\u5417\uff1f
\u4e8b\u5b9e\u4e0a\uff0c\u968f\u673a\u8bbf\u95ee\u7684\u542b\u4e49\u662f\uff0c\u5185\u5b58\u4e2d\u6570\u636e\u7684\u8bfb\u53d6\u548c\u5199\u5165\u64cd\u4f5c\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0e\u8fd9\u4e9b\u6570\u636e\u6240\u5728\u7684\u4f4d\u7f6e\u65e0\u5173\u3002\u76f8\u5bf9\u5730\uff0c\u4e32\u884c\u8bbf\u95ee\u5185\u5b58(Serial Memory)\u4e2d\uff0c\u5bf9\u4e0d\u540c\u4f4d\u7f6e\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u548c\u5199\u64cd\u4f5c\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0d\u4e00\u5b9a\u662f\u76f8\u540c\u7684\uff0c\u786c\u76d8\u5c31\u662f\u4e00\u79cd\u5178\u578b\u7684\u4e32\u884c\u8bbf\u95ee\u5185\u5b58\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u7ec4\u7ec7\u67b6\u6784","title":"\u7ec4\u7ec7\u67b6\u6784","text":"\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784(Memory Organization)\u53cd\u6620\u4e86\u5185\u5b58\u4e2d\u7684\u6570\u636e\u662f\u5982\u4f55\u901a\u8fc7\u5730\u5740\u88ab\u8bbf\u95ee\u7684\u3002
\u6570\u636e\u7c7b\u578b
\u8ba1\u7b97\u673a\u4e2d\u5e38\u7528\u7684\u6570\u636e\u7c7b\u578b\u4e3b\u8981\u6709\u4e09\u79cd\uff1a
\u4f4d(bit)\uff1a\u6700\u5c0f\u5355\u5143 \u5b57\u8282(byte)\uff1a8 \u4e2a\u8fde\u7eed\u7684 bit \u5b57(word)\uff1a\u7279\u5b9a\u6570\u91cf\u7684\u8fde\u7eed\u7684 bit\uff0c\u7531\u5185\u5b58\u7c7b\u578b\u51b3\u5b9a\uff0c\u4f20\u7edf\u610f\u4e49\u4e0a 1 word = 4 bytes \u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u6570\u7ec4\uff0c\u6570\u7ec4\u4e2d\u4ee5 word \u4e3a\u5355\u4f4d\u5b58\u50a8\u5185\u5b58\u6570\u636e\uff0c\u5730\u5740\u5219\u4f5c\u4e3a\u6570\u7ec4\u7684\u7d22\u5f15\uff0c\u7528\u4e8e\u8bbf\u95ee\u5185\u5b58\u4e2d\u7684\u6570\u636e\u3002\u6362\u8a00\u4e4b\uff0c\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u53ef\u4ee5\u63cf\u8ff0\u4e3a\u7528\u591a\u5c11\u6570\u91cf\u7684\u5730\u5740\u6765\u8bbf\u95ee\u591a\u5c11\u6570\u91cf\u7684\u6570\u636e\u3002\u4e0b\u9762\u7ed9\u51fa\u51e0\u4e2a\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u7684\u5177\u4f53\u4f8b\u5b50\uff1a
\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u793a\u4f8b
Digital Equipment Corporation PDP-8\uff1a \u7528 12-bit \u7684\u5730\u5740\u6765\u8bbf\u95ee \\(2^{12}\\) \u4e2a 12-bit words\uff1b IBM 360\uff1a \u7528 24-bit \u7684\u5730\u5740\u6765\u8bbf\u95ee \\(2^{24}\\) \u4e2a 8-bit bytes\uff0c\u6216\u8005\u8bf4 \\(2^{22}\\) \u4e2a 32-bit words\uff1b Intel 8080\uff1a \u7528 16-bit \u7684\u5730\u5740\u6765\u8bbf\u95ee \\(2^{16}\\) \u4e2a 8-bit bytes\uff1b \u8fd8\u6709\u4e00\u4e2a\u66f4\u52a0\u5177\u4f53\u7684\u7ec4\u7ec7\u67b6\u6784\u5206\u6790\uff0c\u8be6\u89c1 #SDRAM\u3002
\u8003\u8651\u4e00\u4e2a \\(2^k\\times n\\) \u7684\u5185\u5b58\u5355\u5143\uff0c\\(k\\) \u8868\u793a\u5730\u5740\u7684\u4f4d\u5bbd\uff0c\\(n\\) \u8868\u793a word \u7684\u4f4d\u5bbd\u3002\u8fd9\u4e2a\u5185\u5b58\u5355\u5143\u7684\u793a\u610f\u56fe\u5982\u4e0b\uff0c\u5176\u4e2d\uff0c\\(k\\)-bit \u7684\u5730\u5740\u7ecf\u8fc7 decoder \u8bd1\u7801\uff0c\u5f97\u5230\u7684 \\(2^k\\) \u4e2a\u8f93\u51fa\u5206\u522b\u4e0e \\(2^k\\) \u4e2a word \u5f62\u6210\u552f\u4e00\u786e\u5b9a\u7684\u8fde\u63a5\uff0c\u4ece\u800c\u8fbe\u5230\u5bfb\u5740\u7684\u76ee\u7684\uff1b\u6bcf\u4e2a word \u7531 \\(n\\)-bit \u7ec4\u6210\uff0c\u6240\u4ee5\u8f93\u5165\u548c\u8f93\u51fa\u4e5f\u90fd\u662f \\(n\\)-bit \u7684\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"\u5185\u5b58\u4e2d\u6700\u57fa\u672c\u7684\u64cd\u4f5c\u5c31\u662f\u8bfb(read)\u64cd\u4f5c\u548c\u5199(write)\u64cd\u4f5c\uff0c\u4e00\u4e9b\u7279\u6b8a\u7684\u5185\u5b58\uff08\u6bd4\u5982 Flash\uff09\u8fd8\u6709\u64e6(erase)\u64cd\u4f5c\u3002
\u4e0a\u56fe\u5c55\u793a\u4e86\u4e00\u4e2a\u89c4\u8303\u7684\u8bfb\u64cd\u4f5c\uff0c\u5176\u4e2d\uff1a
Memory enable \u662f\u4f7f\u80fd\u4fe1\u53f7\uff0c\u9ad8\u7535\u5e73\u4ee3\u8868\u5185\u5b58\u4f7f\u80fd\uff0c\u53ef\u4ee5\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff1b R/W \u662f\u8bfb\u5199\u4fe1\u53f7\uff0c\u9ad8\u7535\u5e73\u8868\u793a\u8bfb\u64cd\u4f5c\uff0c\u4f4e\u7535\u5e73\u8868\u793a\u5199\u64cd\u4f5c\uff1b
\u4e0a\u56fe\u5c55\u793a\u4e86\u4e00\u4e2a\u89c4\u8303\u7684\u5199\u64cd\u4f5c\uff0c\u6ce8\u610f\u5230\uff1a
\u5730\u5740\u5fc5\u987b\u5728 R/W \u4fe1\u53f7\u4e0b\u964d\u6cbf\u4e4b\u524d\u786e\u5b9a\u4e0b\u6765\uff08\u79f0\u4e3a valid\uff09\uff0c\u5e76\u5728 R/W \u4fe1\u53f7\u4e0a\u5347\u6cbf\u4e4b\u540e\u518d\u6d88\u5931\uff0c\u8fd9\u662f\u4e3a\u4e86\u786e\u4fdd\u5199\u64cd\u4f5c\u53d1\u751f\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5730\u5740\u59cb\u7ec8\u662f\u786e\u5b9a\u4e14\u4e0d\u53d8\u7684\uff0c\u4ee5\u514d\u5199\u64cd\u4f5c\u7834\u574f\u5230\u5176\u4ed6\u5730\u5740\u7684\u6570\u636e\uff1b \u5f85\u5199\u5165\u7684\u65b0\u6570\u636e\u5fc5\u987b\u5728 R/W \u4fe1\u53f7\u4e0a\u5347\u6cbf\u4e4b\u540e\u518d\u6d88\u5931\uff0c\u4ee5\u514d\u5199\u5165\u5931\u8d25\uff1b "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u9759\u6001\u5185\u5b58","title":"\u9759\u6001\u5185\u5b58","text":"RAM \u53ef\u4ee5\u5206\u4e3a\u9759\u6001\u5185\u5b58(Static RAM, or SRAM)\u548c\u52a8\u6001\u5185\u5b58(Dynamic RAM, or DRAM)\u4e24\u79cd\uff1a
SRAM\uff1a\u6570\u636e\u5b58\u50a8\u5728\u9501\u5b58\u5668(latch)\u4e2d\uff1b DRAM\uff1a\u6570\u636e\u5b58\u50a8\u5728\u7535\u5bb9\u4e2d\uff0c\u4ee5\u7535\u8377\u91cf\u7684\u5f62\u5f0f\u5b58\u50a8\uff1b "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#sram-cell","title":"SRAM Cell","text":"\u9996\u5148\u8003\u8651\u4e00\u4e2a SRAM \u7684\u6700\u5c0f\u5355\u5143\uff0c\u5373 SRAM Cell\uff08\u4e0b\u9762\u7b80\u79f0\u4e3a RAM Cell\uff09\uff0c\u7528\u4e8e\u5b58\u50a8 1-bit \u7684\u4fe1\u606f\u3002
\u8fd9\u4e2a RAM Cell \u662f\u901a\u8fc7\u4e00\u4e2a SR Latch \u5b9e\u73b0\u7684\uff0c\u5f53 select \u7f6e 0
\u65f6\uff0c\u8868\u793a RAM Cell \u672a\u88ab\u4f7f\u80fd\uff0c\u9501\u5b58\u5668\u4e2d\u7684\u6570\u636e\u5904\u4e8e\u4fdd\u6301\u72b6\u6001\uff0c\u8f93\u51fa\u6052\u4e3a 1
\uff1b\u5f53 select \u7f6e 1
\u65f6\uff0c\u9501\u5b58\u5668\u4e2d\u7684\u6570\u636e\u7531 B \u7aef\u7684\u8f93\u5165\u4fe1\u53f7\u51b3\u5b9a\uff0cC \u7aef\u8f93\u51fa\u9501\u5b58\u5668\u4e2d\u5b58\u50a8\u7684\u6570\u636e\u3002\u4f46\u662f\uff0c\u73b0\u5728\u8fd9\u6837\u4e00\u4e2a\u7b80\u5355\u7684 RAM Cell \u8fd8\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u8bfb\u548c\u5199\u64cd\u4f5c\uff0c\u8fd8\u9700\u8981\u4e00\u4e9b\u5916\u90e8\u903b\u8f91\u7535\u8def\uff0c\u8be6\u89c1 #SRAM Bit Slice\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#sram-bit-slice","title":"SRAM Bit Slice","text":"\u5229\u7528\u82e5\u5e72\u4e2a RAM Cell\uff0c\u4ee5\u53ca\u4e00\u4e9b\u903b\u8f91\u7535\u8def\uff0c\u53ef\u4ee5\u8bbe\u8ba1\u51fa SRAM Bit Slice\u3002
\u4e0b\u56fe\u4e2d\uff1a
\u5f53 bit select \u7f6e 1
\u65f6\uff0c\u8868\u793a\u8fd9\u4e2a SRAM Bit Slice \u88ab\u4f7f\u80fd\uff0c\u53ef\u4ee5\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff1b word select \u7528\u4e8e\u9009\u62e9\u5bf9\u54ea\u4e00\u4e2a cell \u8fdb\u884c\u64cd\u4f5c\uff0c\u5728\u540c\u4e00\u4e2a slice \u4e2d\uff0c\u6bcf\u6b21\u53ea\u6709\u4e00\u4e2a cell \u80fd\u88ab word select \u4f7f\u80fd\uff0c\u5373\u6bcf\u6b21\u53ea\u80fd\u5bf9\u4e00\u4e2a cell \u8fdb\u884c\u64cd\u4f5c\uff1b \u6362\u8a00\u4e4b\uff0c\\(2^n\\) \u6761 word select \u4e2d\uff0c\u53ea\u80fd\u5b58\u5728\u81f3\u591a\u4e00\u4e2a\u7f6e 1
\uff0c\u5176\u4f59\u5747\u7f6e 0
\uff1b \u8bfb\u548c\u5199\u64cd\u4f5c\u7684\u903b\u8f91\u7535\u8def\u5982\u56fe\u6240\u793a\uff0c\u5f53 R/W \u7f6e 0
\u65f6\uff0c\u8868\u793a\u6b63\u5728\u8fdb\u884c\u5199\u64cd\u4f5c\uff1b \u5f53\u5199\u64cd\u4f5c\u6b63\u5e38\u8fdb\u884c\u65f6\uff0c\u8f93\u5165\u8fdb\u6765\u7684\u65b0\u6570\u636e\u5176\u5b9e\u88ab\u603b\u7ebf\u8f93\u9001\u7ed9\u4e86\u6240\u6709\u7684 cell\uff0c\u4f46\u53ea\u6709\u88ab word select \u4f7f\u80fd\u7684\u90a3\u4e2a cell \u624d\u53ef\u4ee5\u5199\u5165\u8fd9\u4e2a\u65b0\u6570\u636e\uff1b \u6ce8\u610f\uff0c\u5bf9\u4e8e\u8fd9\u5e45\u56fe\u800c\u8a00\uff0c\u4e0d\u8bba R/W \u7f6e\u4efb\u4f55\u503c\uff0c\u8bfb\u64cd\u4f5c\u90fd\u5728\u6b63\u5e38\u8fdb\u884c\uff1b\u5982\u679c\u4e0d\u60f3\u8fdb\u884c\u8bfb\u64cd\u4f5c\uff0c\u53ef\u4ee5\u5c06 word select \u5168\u90e8\u7f6e 0
\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u91cd\u5408\u9009\u62e9","title":"\u91cd\u5408\u9009\u62e9","text":"\u968f\u7740\u5185\u5b58\u7684\u6269\u5927\uff0c\u4e00\u4e2a slice \u4e2d\u7684 cell \u6570\u91cf\u4e0d\u65ad\u6269\u5927\uff0c\u5bfb\u5740\u6240\u9700\u8981\u7684 decoder \u7684\u4f4d\u5bbd\u4e0d\u65ad\u6269\u5927\uff0c\u8f93\u5165\u603b\u7ebf\u7684\u6247\u51fa\u4e5f\u5728\u4e0d\u65ad\u6269\u5927\u3002\u4f46\u662f\uff0cdecoder \u7684\u4f4d\u5bbd\u548c\u8f93\u5165\u603b\u7ebf\u7684\u6247\u51fa\u90fd\u662f\u6709\u9650\u7684\uff0c\u5f88\u5bb9\u6613\u5236\u7ea6\u5185\u5b58\u7684\u6269\u5927\u3002\u4e0b\u56fe\u4e3a\u4e00\u4e2a \\(16\\times 1\\) RAM\uff1a
\u4e00\u79cd\u6709\u6548\u7684\u89e3\u51b3\u65b9\u6cd5\u662f\u91cd\u5408\u9009\u62e9(coincident selection)\uff0c\u5373\u4f7f\u7528\u4e24\u4e2a decoder\uff0c\u5206\u522b\u8d1f\u8d23\u6a2a\u5411\u548c\u7eb5\u5411\u7684\u5bfb\u5740\u3002\u4e0b\u9762\u4f7f\u7528 \\(4\\times 4\\) \u91cd\u5408\u9009\u62e9\u7684 RAM \u9635\u5217(\\(4\\times 4\\) RAM Cell Array)\u6765\u5b9e\u73b0 \\(16\\times 1\\) RAM\uff1a
\\(16\\times 1\\) RAM using \\(4\\times 4\\) RAM Cell Array
\u4e0b\u56fe\u4f7f\u7528\u4e24\u4e2a 2-to-4 decoder \u66ff\u4ee3\u4e86 \\(16\\times 1\\) RAM \u4e2d\u7684 4-to-16 decoder\uff1b \u5730\u5740\u4f7f\u7528 4-bit \u8868\u793a\uff0c\u5176\u4e2d 2-bit \u88ab\u5206\u7ed9\u4e86 column decoder\uff0c\u7528\u4e8e\u9009\u62e9\u8bbf\u95ee\u54ea\u4e2a slice\uff1b\u53e6\u5916 2-bit \u88ab\u5206\u7ed9\u4e86 row decoder\uff0c\u7528\u4e8e\u9009\u62e9\u8bbf\u95ee slice \u4e2d\u7684\u54ea\u4e00\u884c cell\uff1b
\\(16\\times 1\\) RAM \u4e2d\u7684 word \u662f 1-bit \u7684\uff0c\u6240\u4ee5\u56fe\u4e2d\u6bcf\u4e2a cell \u90fd\u8868\u793a\u4e00\u4e2a word\u3002\u800c\u5728\u8bbe\u8ba1\u5177\u6709\u66f4\u5927\u4f4d\u5bbd\u7684 RAM \u65f6\uff0c\u91cd\u5408\u9009\u62e9\u4f1a\u7a0d\u6709\u4e0d\u540c\uff0c\u6ce8\u610f\u89c2\u5bdf\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\u548c\u4e0a\u9762\u4f8b\u5b50\u7684\u533a\u522b\uff1a
\\(8\\times 2\\) RAM using \\(4\\times 4\\) RAM Cell Array
\u5730\u5740\u4f7f\u7528 3-bit \u8868\u793a\uff0c\u5176\u4e2d 1-bit \u88ab\u5206\u7ed9\u4e86 column decoder\uff0c\u53e6\u5916 2-bit \u5206\u88ab\u5206\u7ed9\u4e86 row decoder\uff1b \u8f93\u5165\u548c\u8f93\u51fa\u90fd\u662f 2-bit \u7684\uff0cinput 0 \u88ab\u4f20\u8f93\u7ed9\u4e86\u7b2c\u4e00\u3001\u4e09\u4e2a slice\uff0cinput 1 \u88ab\u4f20\u8f93\u7ed9\u4e86\u7b2c\u4e8c\u3001\u56db\u4e2a slice\uff1b word \u662f 2-bit \u7684\uff0c\u7531\u4e24\u4e2a cell \u6765\u8868\u793a\u3002\u56fe\u4e2d\uff0ccell 0 \u548c cell 1 \u8868\u793a\u4e00\u4e2a word\uff0ccell 2 \u548c cell 3 \u8868\u793a\u4e00\u4e2a word\uff0ccell 4 \u548c cell 5 \u8868\u793a\u4e00\u4e2a word\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u5b57\u6269\u5c55\u4e0e\u4f4d\u6269\u5c55","title":"\u5b57\u6269\u5c55\u4e0e\u4f4d\u6269\u5c55","text":"\u5185\u5b58\u7684\u5bb9\u91cf\u7531 word \u7684\u6570\u91cf\u548c\u4f4d\u5bbd\uff08\u5373\u6bcf\u4e2a word \u7531\u591a\u5c11\u4e2a bit \u7ec4\u6210\uff09\u51b3\u5b9a\u3002\u8981\u60f3\u6269\u5c55\u5185\u5b58\uff0c\u53ef\u4ee5\u4ece word \u7684\u6570\u91cf\u548c\u4f4d\u5bbd\u8fd9\u4e24\u4e2a\u89d2\u5ea6\u8fdb\u884c\uff1a
\u5b57\u6269\u5c55\uff08\u6269\u5c55 word \u7684\u6570\u91cf\uff09\uff1a\u5c06\u591a\u4e2a RAM \u201c\u5e76\u8054\u201d\uff0c\u5e76\u76f8\u5e94\u5730\u6269\u5c55\u5730\u5740\u7684\u4f4d\u5bbd\uff1b \u4f4d\u6269\u5c55\uff08\u6269\u5c55 word \u7684\u4f4d\u5bbd\uff09\uff1a\u5c06\u591a\u4e2a RAM \u201c\u4e32\u8054\u201d\uff0c\u5e76\u76f8\u5e94\u5730\u6269\u5c55\u8f93\u5165\u8f93\u51fa\u7684\u4f4d\u5bbd\uff1b \u4e0b\u9762\u8003\u8651\u7528 \\(64\\text{K}\\times 8\\) RAM \u6269\u5c55\u5f97\u5230 \\(256\\text{K}\\times 8\\) RAM \u548c \\(64\\text{K}\\times 16\\) RAM\uff1a
\u5b57\u6269\u5c55\uff1a\\(256\\text{K}\\times 8\\) RAM
\u8f93\u5165\u4fe1\u53f7\u548c 0-15 \u4f4d\u5730\u5740\u901a\u8fc7\u603b\u7ebf\u4f20\u9012\u7ed9\u6bcf\u4e2a \\(64\\text{K}\\times 8\\) RAM\uff0c\u8f93\u51fa\u4fe1\u53f7\u901a\u8fc7\u603b\u7ebf\u4ece\u6bcf\u4e2a \\(64\\text{K}\\times 8\\) RAM \u4e2d\u901a\u8fc7\u4e09\u6001\u95e8\u63a5\u51fa\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a RAM \u7684\u201c\u5e76\u8054\u201d\uff1b \u901a\u8fc7 16-17 \u4f4d\u5730\u5740\u6765\u9009\u62e9\u8bbf\u95ee\u54ea\u4e2a \\(64\\text{K}\\times 8\\) RAM\uff0c\u518d\u6839\u636e 0-15 \u4f4d\u5730\u5740\u6765\u9009\u62e9\u8bbf\u95ee\u8be5 RAM \u4e2d\u7684\u5177\u4f53\u54ea\u4e2a word\uff1b \u56fe\u4e2d\u7684\u5012\u4e09\u89d2\u8868\u793a\u8f93\u51fa\u662f\u7531\u4e00\u4e2a\u4e09\u6001\u95e8\u63a5\u51fa\u7684\uff08\u53c2\u89c1 #\u91cd\u5408\u9009\u62e9\uff09\uff1b
\u4f4d\u6269\u5c55\uff1a\\(64\\text{K}\\times 16\\) RAM
16-bit \u8f93\u5165\u4fe1\u53f7\u5206\u6210\u4e24\u8def 8-bit\uff0c\u5206\u522b\u4f20\u8f93\u7ed9\u4e24\u4e2a \\(64\\text{K}\\times 8\\) RAM\uff0c16-bit \u8f93\u51fa\u4fe1\u53f7\u7531\u4e24\u4e2a \\(64\\text{K}\\times 8\\) RAM \u5206\u522b\u4ea7\u751f\u7684 8-bit \u7ec4\u6210\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a RAM \u7684\u201c\u4e32\u8054\u201d\uff1b \u5730\u5740\u4e0d\u53d8\uff0c\u76f8\u5f53\u4e8e\u540c\u65f6\u9009\u4e2d\u8fd9\u4e24\u4e2a \\(64\\text{K}\\times 8\\) RAM \u4e2d\u7684\u67d0\u4e24\u4e2a word\uff0c\u800c\u8fd9\u4e24\u4e2a 8-bit word \u7b49\u4ef7\u5730\u8868\u793a\u4e86\u4e00\u4e2a 16-bit word\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u52a8\u6001\u5185\u5b58","title":"\u52a8\u6001\u5185\u5b58","text":"\u524d\u9762\u63d0\u5230\uff0c\u52a8\u6001\u5185\u5b58\u662f\u5229\u7528\u7535\u5bb9\u4e2d\u7684\u7535\u8377\u6765\u5b58\u50a8\u6570\u636e\u7684\u3002\u7531\u4e8e\u7535\u5bb9\u4f1a\u6162\u6162\u6f0f\u7535(leak)\uff0c\u6240\u4ee5\u9700\u8981\u5b9a\u671f\u5237\u65b0(refresh)\u7535\u5bb9\uff08\u9488\u5bf9\u5b58\u50a8\u7740\u9ad8\u7535\u5e73\u6570\u636e\u7684\u7535\u5bb9\u800c\u8a00\uff0c\u5b58\u50a8\u7740\u4f4e\u7535\u5e73\u6570\u636e\u7684\u7535\u5bb9\u672c\u8eab\u5c31\u662f\u4f4e\u7535\u8377\u91cf\u7684\uff0c\u4e0d\u9700\u8981\u5237\u65b0\uff09\uff0c\u624d\u80fd\u786e\u4fdd\u5b58\u50a8\u7740\u7684\u6570\u636e\u4e0d\u4f1a\u5931\u6548\uff0c\u56e0\u6b64\u8fd9\u79cd\u5185\u5b58\u662f\u52a8\u6001\u7684\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#dram-cell","title":"DRAM Cell","text":"DRAM Cell \u548c SRAM Cell \u57fa\u672c\u7c7b\u4f3c\uff0c\u4e5f\u62e5\u6709\u4e00\u4e2a select \u4f7f\u80fd\u7aef\u548c\u4e00\u7ec4\u8f93\u5165\u8f93\u51fa\u7aef\uff0c\u552f\u4e00\u7684\u533a\u522b\u5728\u4e8e\u5b58\u50a8\u5668\u7684\u4e0d\u540c\u3002SRAM Cell \u4f7f\u7528\u4e00\u4e2a\u9501\u5b58\u5668\u6765\u5b58\u50a8\u6570\u636e\uff0c\u800c DRAM Cell \u4f7f\u7528\u4e00\u4e2a\u7535\u5bb9\u548c\u4e00\u4e2a\u6676\u4f53\u7ba1\u6765\u5b58\u50a8\u6570\u636e\u3002
\u6676\u4f53\u7ba1 T \u53ef\u4ee5\u89c6\u4f5c\u4e00\u4e2a\u5f00\u5173\uff0c\u7528\u6765\u8fde\u63a5\u5916\u90e8\u8f93\u5165\u4fe1\u53f7 B \u548c\u7535\u5bb9 C\uff1b \u7535\u5bb9 C \u7528\u4e8e\u5b58\u50a8\u6570\u636e\uff0c\u5f53\u7535\u5bb9\u4e3a\u6ee1\uff08\u7535\u8377\u91cf\u9ad8\u4e8e\u67d0\u4e00\u9608\u503c\uff09\u65f6\u8868\u793a\u9ad8\u7535\u5e73\uff08\u5982\u56fe (b)\uff09\uff0c\u5f53\u7535\u5bb9\u4e3a\u7a7a\uff08\u7535\u8377\u91cf\u4f4e\u4e8e\u67d0\u4e00\u9608\u503c\uff09\u65f6\u8868\u793a\u4f4e\u7535\u5e73\uff08\u5982\u56fe \u00a9\uff09\uff1b \u4e0b\u9762\u8003\u8651 DRAM Cell \u7684\u8bfb\u64cd\u4f5c\u548c\u5199\u64cd\u4f5c\uff1a
\u5199\u64cd\u4f5c\uff1a\u5982\u56fe (d) \u5199\u5165\u9ad8\u7535\u5e73\uff0c\u5982\u56fe (e) \u5199\u5165\u4f4e\u7535\u5e73\uff1b \u8bfb\u64cd\u4f5c\uff1a\u5982\u56fe (f) \u8bfb\u53d6\u9ad8\u7535\u5e73\uff0c\u5f53 T \u6253\u5f00\u65f6\uff0c\u5de6\u4fa7\u8f93\u5165\u7aef\u53ef\u4ee5\u76d1\u6d4b\u5230\u4e00\u4e2a\u7535\u8377\u91cf\u7684\u5347\u9ad8\uff0c\u8fd9\u5c31\u4ee3\u8868\u8bfb\u53d6\u5230\u7684\u6570\u636e\u662f\u9ad8\u7535\u5e73\uff1b\u800c\u76f8\u5e94\u5730\uff0c\u53f3\u4fa7\u7535\u5bb9\u4e2d\u7684\u7535\u8377\u91cf\u4e5f\u6709\u6240\u964d\u4f4e\uff1b\u5982\u56fe (g) \u8bfb\u53d6\u4f4e\u7535\u5e73\u540c\u7406\uff1b \u4e0d\u96be\u53d1\u73b0\uff0c\u6bcf\u6b21\u8bfb\u64cd\u4f5c\u90fd\u4f1a\u7a0d\u5fae\u6539\u53d8\u7535\u5bb9\u4e2d\u5b58\u50a8\u7684\u7535\u8377\u91cf\uff0c\u56e0\u6b64\u5bf9\u4e8e\u6bcf\u4e00\u6b21\u8bfb\u64cd\u4f5c\uff0c\u90fd\u8981\u8fdb\u884c\u590d\u4f4d(restore)\uff0c\u4e5f\u5c31\u662f\u5c06\u7535\u5bb9\u4e2d\u7684\u7535\u8377\u91cf\u6062\u590d\u5230\u8bfb\u64cd\u4f5c\u4e4b\u524d\u7684\u6c34\u5e73\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#dram-bit-slice","title":"DRAM Bit Slice","text":"DRAM Bit Slice \u548c SRAM Bit Slice \u57fa\u672c\u7c7b\u4f3c\uff0c\u524d\u8005\u7684\u8f93\u51fa\u7aef\u4f1a\u989d\u5916\u52a0\u4e00\u4e2a\u653e\u5927\u5668\uff0c\u4ece\u800c\u5c06\u7535\u8377\u91cf\u5fae\u5c0f\u7684\u53d8\u5316\u8f6c\u5316\u6210\u6570\u5b57\u4fe1\u53f7\u3002\u867d\u7136\u7535\u8def\u7ed3\u6784\u5e76\u6ca1\u6709\u672c\u8d28\u5dee\u522b\uff0c\u4f46\u4e24\u8005\u5b9e\u9645\u7684\u7535\u8def\u5f00\u9500\u5374\u533a\u522b\u5f88\u5927\u3002DRAM cell \u542b\u6709\u4e00\u4e2a\u7535\u5bb9\u548c\u4e00\u4e2a\u6676\u4f53\u7ba1\uff0c\u800c SRAM cell \u542b\u6709\u516d\u4e2a\u6676\u4f53\u7ba1\uff0c\u6240\u4ee5 DRAM \u7684\u6bcf bit \u7684\u5f00\u9500\u663e\u8457\u4f4e\u4e8e SRAM\uff0c\u8fd9\u4e5f\u662f DRAM \u5728\u5927\u578b\u5185\u5b58\u4e2d\u88ab\u66f4\u52a0\u5e7f\u6cdb\u7684\u5e94\u7528\u7684\u539f\u56e0\u3002
DRAM \u5e38\u7528\u4e8e\u5927\u578b\u5185\u5b58\uff0c\u800c\u5728\u8fd9\u4e9b\u5185\u5b58\u4e2d\uff0c\u5730\u5740\u4f1a\u53d8\u5f97\u5f88\u957f\uff08\u8d85\u8fc7 20-bit\uff09\uff0c\u4ee5\u81f3\u4e8e DRAM \u7684\u5f15\u811a\u6570\u91cf\u4e0d\u8db3\u4ee5\u4e00\u6b21\u6027\u63a5\u6536\u8fd9\u4e48\u957f\u7684\u5730\u5740\u3002\u89e3\u51b3\u65b9\u6cd5\u662f\u5c06\u5730\u5740\u5206\u6210\u4e24\u90e8\u5206\u4e32\u884c\u7684\u8f93\u5165\u5230 DRAM \u91cc\u6765\uff0c\u9996\u5148\u662f row address\uff0c\u7136\u540e\u7d27\u63a5\u7740\u662f column address\uff08\u6ce8\u610f\u5230\u8fd9\u91cc\u4e5f\u6709\u91cd\u5408\u9009\u62e9\u7684\u601d\u60f3\uff09\u3002
\u4e0b\u56fe\u4e2d\uff1a
\u7531\u4e8e\u5730\u5740\u88ab\u5206\u6210\u4e24\u90e8\u5206\u4e32\u884c\u8f93\u5165\u5230 DRAM \u91cc\u6765\uff0c\u56e0\u6b64\u9700\u8981\u7528 register \u5206\u522b\u5b58\u50a8 row address \u548c column address\uff1b RAS(Row Address Strobe) \u548c CAS(Column Address Strobe) \u7528\u4f5c register \u7684\u8f7d\u5165\u4fe1\u53f7\uff0c\u7f6e 0
\u8868\u793a\u8f7d\u5165\uff1b \u5bf9\u4e8e\u5199\u64cd\u4f5c\uff0c\u5f53 row address \u9009\u4e2d\u67d0\u4e00\u884c\u7684\u65f6\u5019\uff0c\u9664\u4e86\u88ab\u5199\u5165\u7684 cell \u4e4b\u5916\uff0c\u8fd9\u4e00\u884c\u4e2d\u7684\u5176\u4ed6 cell \u4e5f\u88ab\u4f7f\u80fd\u5e76\u8fdb\u884c\u4e86 restore \u64cd\u4f5c\uff1b \u5bf9\u4e8e\u8bfb\u64cd\u4f5c\uff0c\u5f53 row address \u9009\u4e2d\u67d0\u4e00\u884c\u7684\u65f6\u5019\uff0c\u5305\u62ec\u8981\u8bfb\u53d6\u7684 cell \u5728\u5185\uff0c\u8fd9\u4e00\u884c\u4e2d\u7684\u6240\u6709 cell \u90fd\u88ab\u4f7f\u80fd\u5e76\u8fdb\u884c\u4e86 restore \u64cd\u4f5c\uff1b refresh controller \u548c refresh counter \u6a21\u5757\u8d1f\u8d23\u5b9e\u73b0 refresh \u529f\u80fd\uff1b DRAM \u6846\u56fe\u8bfb\u5199\u65f6\u5e8f\u56fe
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#dram-\u7c7b\u578b","title":"DRAM \u7c7b\u578b","text":"\u4e3a\u4e86\u8ffd\u6c42\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff0c\u4e00\u4e9b\u7279\u6b8a\u7c7b\u578b\u7684 DRAM \u4e5f\u88ab\u8bbe\u8ba1\u51fa\u6765\u3002\u8fd9\u91cc\u4e3b\u8981\u4ecb\u7ecd\u4ee5\u4e0b\u4e09\u79cd DRAM\uff1a
Synchronous DRAM\uff08\u5373 SDRAM\uff09\uff1a\u4e0d\u540c\u4e8e DRAM \u7684\u5f02\u6b65\uff0cSDRAM \u589e\u52a0\u4e86\u4e00\u4e2a\u65f6\u949f\u6765\u5b9e\u73b0\u540c\u6b65\uff1b Double-data-rate synchronous DRAM\uff08\u5373 DDR SDRAM\uff09\uff1a\u4e0e SDRAM \u57fa\u672c\u4e00\u81f4\uff0c\u4f46\u540c\u65f6\u5229\u7528\u4e86\u65f6\u949f\u7684\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\u6765\u8f93\u51fa\u6570\u636e\uff1b Rambus\u24c7 DRAM\uff08\u5373 RDRAM\uff09\uff1a\u4e13\u5229\u6280\u672f\uff0c\u7528\u76f8\u5bf9\u66f4\u7a84\u7684\u603b\u7ebf\u6765\u5b9e\u73b0\u6781\u9ad8\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff1b \u5f15\u5165
\u4e3a\u4e86\u89e3\u91ca\u8fd9\u4e9b DRAM \u662f\u5982\u4f55\u8fbe\u5230\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\u7684\uff0c\u8fd9\u91cc\u6709\u5fc5\u8981\u5148\u4ecb\u7ecd\u4e24\u4e2a\u4e8b\u5b9e\uff1a
\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0c\u7edd\u5927\u591a\u6570\u65f6\u5019\u4ece DRAM \u4e2d\u8bfb\u53d6\u7684\u6570\u636e\u5e76\u6ca1\u6709\u76f4\u63a5\u4f20\u8f93\u7ed9 CPU\uff0c\u800c\u662f\u88ab\u5b58\u653e\u5728\u4e86\u9ad8\u901f\u7f13\u5b58(cache)\u4e2d\u3002\u9ad8\u901f\u7f13\u5b58\u4ece DRAM \u4e2d\u8bfb\u53d6\u6570\u636e\u7684\u65f6\u5019\uff0c\u603b\u662f\u4e00\u6b21\u6027\u8bfb\u53d6\u4e00\u4e32\u76f8\u90bb\u7684\u5b57\u8282\uff0c\u8fd9\u88ab\u79f0\u4e3a\u7206\u53d1\u6a21\u5f0f\u8bfb\u53d6\u6570\u636e(burst read)\u3002\u5bf9\u4e8e burst read \u800c\u8a00\uff0c\u5f71\u54cd\u901f\u5ea6\u7684\u6700\u91cd\u8981\u56e0\u7d20\u4e0d\u518d\u662f\u5bfb\u5740\u7684\u65f6\u95f4\uff0c\u800c\u662f\u8fde\u7eed\u8bfb\u53d6\u76f8\u90bb\u5b57\u8282\u7684\u65f6\u95f4\uff1b DRAM \u7684\u7279\u6027\u662f\uff0c\u6bcf\u5f53 row address \u9009\u4e2d\u67d0\u4e00\u884c\u65f6\uff0c\u8fd9\u4e00\u884c\u5185\u7684\u6240\u6709 cell \u90fd\u88ab\u4f7f\u80fd\uff0c\u5373\u90fd\u662f\u53ef\u8bbf\u95ee\u7684\uff1b \u6240\u4ee5\uff0cDRAM \u7684\u8fd9\u79cd\u7279\u6027\uff0c\u4f7f\u5f97\u5b83\u975e\u5e38\u9002\u5408 burst read\uff0c\u5373\u8fde\u7eed\u8bfb\u53d6\u540c\u4e00\u884c\u4e2d\u7684\u76f8\u90bb\u5b57\u8282\u3002\u5229\u7528 burst read\uff0cDRAM \u53ef\u4ee5\u8fbe\u5230\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#sdram","title":"SDRAM","text":"\u4e0b\u56fe\u662f\u4e00\u4e2a \\(16\\text{MB}\\) SDRAM\uff1a
\u4e3a\u4e86\u9002\u914d SDRAM \u7684\u540c\u6b65\u7279\u6027\uff0c\u5730\u5740\u3001\u8f93\u5165\u3001\u8f93\u51fa\u90fd\u9700\u8981\u4f7f\u7528\u5bc4\u5b58\u5668\uff1b column address counter \u662f SDRAM \u7684\u6838\u5fc3\u6a21\u5757\uff0c\u540e\u9762\u6211\u4eec\u5c06\u4ecb\u7ecd\u5b83\u662f\u5982\u4f55\u5de5\u4f5c\u7684\uff1b
\u5206\u6790\u4e00\u4e0b\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\uff01
\u4e3a\u4e86\u540e\u7eed\u5185\u5bb9\u7684\u4ecb\u7ecd\uff0c\u8fd9\u91cc\u6709\u5fc5\u8981\u5148\u5206\u6790\u4e00\u4e0b\u8fd9\u4e2a \\(16\\text{MB}\\) SDRAM \u7684\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\uff1a
\\(16\\text{MB}\\) \u5185\u5b58\u610f\u5473\u7740\u4e00\u5171\u6709 \\(2^{27}\\) bits\uff0c\u8003\u8651\u91cd\u5408\u9009\u62e9\uff08\u4f7f\u884c\u5217\u6570\u5c3d\u53ef\u80fd\u63a5\u8fd1\uff09\uff0c\u4e0d\u59a8\u4ee4\u884c\u6570\u4e3a \\(2^{13}\\)\uff0c\u5217\u6570\u4e3a \\(2^{14}\\)\uff0c\u663e\u7136 row address \u662f 13-bit \u7684\uff08column address \u5e76\u4e0d\u662f 14-bit\uff0c\u89c1\u4e0b\u6587\uff09\uff1b \u6ce8\u610f\u5230\u8f93\u5165\u8f93\u51fa\u7684\u4f4d\u5bbd\u662f 8-bit\uff0c\u6240\u4ee5\u8fd9\u4e2a\u5185\u5b58\u7684\u5b57\u957f\u662f 8-bit\uff1b\u6240\u4ee5 column \u7684\u5bfb\u5740\u662f\u4ee5 8-bit\uff08\u5373 1-word\uff09\u4e3a\u5355\u4f4d\u7684\uff0c\u5171\u6709 \\(2^{14}/8=2^{11}\\) \u4e2a word\uff0ccolumn address \u662f 11-bit \u7684\uff1b \u6240\u4ee5\u5730\u5740\u7684\u603b\u957f\u662f 13+11=24 bits\uff0c\u8fd9\u4e5f\u6070\u6070\u5bf9\u5e94\u4e86\u8fd9\u4e2a \\(16\\text{MB}\\) \u5185\u5b58\u4e2d\u7684 \\(2^{24}\\) \u4e2a 8-bit \u7684 word\uff1b \u4e0b\u9762\u4ecb\u7ecd SDRAM \u662f\u5982\u4f55\u5b9e\u73b0\u8bfb\u64cd\u4f5c\u7684\u3002
\u9996\u5148\u8fd9\u4e2a SDRAM \u63a5\u6536\u5230 row address\uff0c\u5e76\u5c06 row address \u6307\u5411\u7684\u90a3\u4e00\u884c\u7684\u5168\u90e8 \\(2^{11}\\) \u4e2a word \u5168\u90e8\u8bfb\u53d6\u51fa\u6765\uff0c\u5b58\u653e\u5230 I/O logic \u91cc\uff0c\u8fd9\u4e00\u64cd\u4f5c\u9700\u8981\u5386\u65f6\u82e5\u5e72\u4e2a\u65f6\u949f\u5468\u671f\uff08\u4e0b\u56fe\u4e2d\u4e3a 4 \u4e2a\u65f6\u949f\u5468\u671f\uff09\uff1b \u7136\u540e\u8fd9\u4e2a SDRAM \u63a5\u6536\u5230 column address\uff0c\u5e76\u6309\u7167 column address \u7684\u6307\u793a\u4ece I/O logic \u4e2d\u8bfb\u53d6\u6570\u636e\u5e76\u8f93\u51fa\uff0c\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u8f93\u51fa\u4e00\u4e2a word\uff1b \u6ce8\u610f\uff0cSDRAM \u901a\u5e38\u4e0d\u4f1a\u53ea\u8bfb\u53d6\u5e76\u8f93\u51fa\u4e00\u4e2a word\uff0c\u800c\u662f\u4f1a\u8bfb\u53d6\u5e76\u8f93\u51fa\u4e00\u4e32\u8fde\u7eed\u7684 word\uff08\u5373 burst read\uff09\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u7531 column address counter \u6765\u5b9e\u73b0\uff1bcolumn address counter \u4e2d\u6709\u4e00\u4e2a\u5173\u952e\u53c2\u6570\uff0c\u7528\u4e8e\u8868\u793a\u4e00\u6b21 burst read \u9700\u8981\u8bfb\u51fa\u591a\u5c11\u4e2a word\uff0c\u79f0\u4e3a busrt length\uff08\u4e0b\u56fe\u4e2d\u7684 burst length \u662f 4\uff09\uff1b \u5047\u8bbe \\(t_{CLK}\\) \u4e3a 7.5 ns\uff0c\u5219 \\(t_{RC}\\) \u4e3a 60ns\uff088 \u4e2a\u65f6\u949f\u5468\u671f\uff09\uff0c\u90a3\u4e48\u8fd9\u4e2a SDRAM \u7684\u5185\u5b58\u5e26\u5bbd(memory bandwidth) \u4e3a 4 words / 60 ns = 66.67 MB/s\uff1b
\u4e3a\u4ec0\u4e48\u56fe\u4e2d\u7684\u8f93\u51fa\u987a\u5e8f\u662f B1,B2,B3,B0\uff1f \u5728\u8fd9\u4e2a\u60c5\u5f62\u4e2d\uff0cCPU \u8bf7\u6c42\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6 B1 \u8fd9\u4e2a\u6570\u636e\uff0c\u6240\u4ee5 row address \u548c column address \u5206\u522b\u8868\u793a B1 \u6240\u5904\u7684\u884c\u548c\u5217\u3002\u7136\u800c\u4e8b\u5b9e\u4e0a cache \u4e0d\u4ec5\u4ec5\u4f1a\u8bfb\u53d6\u51fa B1\uff0c\u8fd8\u4f1a\u628a\u4e0e B1 \u76f8\u90bb\u7684\u82e5\u5e72\u4e2a\u6570\u636e\u4e00\u8d77\u8bfb\u53d6\u51fa\u6765\uff08\u5373 burst read\uff09\u3002
\u5728 SDRAM \u4e2d\uff0ccolumn address counter \u8d1f\u8d23\u5b9e\u73b0\u8fd9\u4e2a burst read\uff0c\u5b83\u6839\u636e\u7ed9\u5b9a\u7684 column addre \u548c burst length\uff0c\u5728 I/O logic \u4e2d\u5148\u627e\u5230 B1\uff0c\u5e76\u7ee7\u7eed\u8bfb\u53d6 B1 \u540e\u9762\u7684\u6570\u636e\uff0c\u76f4\u5230\u8bfb\u53d6\u51fa burst length \u4e2a\u6570\u636e\uff08\u8fd9\u4e2a\u60c5\u5f62\u4e2d\uff0c\u5373 4 \u4e2a\u6570\u636e\uff09\u3002
\u5728\u8fd9\u91cc\uff0cB1 \u8868\u793a\u8fd9\u4e2a word \u4ee5 01
\u7ed3\u5c3e\uff0c\u6240\u4ee5\u63a5\u4e0b\u53bb\u7684 3 \u4e2a\u8f93\u51fa\u662f B2\uff08\u4ee5 10
\u7ed3\u5c3e\uff09\u3001B3\uff08\u4ee5 11
\u7ed3\u5c3e\uff09\u3001B0\uff08\u4ee5 00
\u7ed3\u5c3e\uff09\uff0c\u6ce8\u610f\u5230\u8fd9\u5176\u5b9e\u662f\u4e00\u4e2a\u6a21 4 \u7684\u5faa\u73af\u5e8f\u5217\uff0c\u9664\u4e86\u6700\u540e\u4e24\u4f4d\u4e0d\u540c\uff0c\u5176\u4f59\u4f4d\u90fd\u662f\u76f8\u540c\u7684\u3002
\u6362\u8a00\u4e4b\uff0cB1 \u624d\u662f CPU \u8bf7\u6c42\u8bbf\u95ee\u7684\u6570\u636e\uff0c\u800c B2\u3001B3\u3001B0 \u90fd\u662f cache \u81ea\u4f5c\u4e3b\u5f20\u4ece SDRAM \u4e2d burst read \u51fa\u6765\u7684\u3002\u4f46\u8fd9\u6837\u7684\u81ea\u4f5c\u4e3b\u5f20\u662f\u6709\u610f\u4e49\u7684\uff0c\u56e0\u4e3a\u5927\u591a\u6570\u65f6\u5019\uff0cCPU \u8bbf\u95ee\u4e86 B1 \u540e\uff0c\u4f1a\u7ee7\u7eed\u8bbf\u95ee\u7d27\u968f\u5176\u540e\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4ece\u7ed3\u679c\u4e0a\u770b\uff0cSDRAM \u5b9e\u73b0\u4e86\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#ddr-sdram","title":"DDR SDRAM","text":"DDR SDRAM \u548c SDRAM \u57fa\u672c\u4e00\u81f4\uff0c\u4f46\u5b83\u4ece I/O logic \u4e2d\u8bfb\u53d6\u6570\u636e\u5e76\u8f93\u51fa\u7684\u901f\u5ea6\u662f SDRAM \u7684\u4e24\u500d\uff08\u5185\u5b58\u5e26\u5bbd\u4e3a 133.33 MB/s\uff09\uff0c\u56e0\u4e3a\u5b83\u5728\u65f6\u949f\u7684\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\u90fd\u4f1a\u8f93\u51fa\u3002\u4ee5\u4e0a\u9762\u5206\u6790 SDRAM \u7684\u90a3\u5e45\u56fe\u4e3a\u4f8b\uff0c\u540c\u6837\u7684\u65f6\u95f4 \\(t_{RC}\\)\uff0cSDRAM \u53ef\u4ee5\u8f93\u51fa 4 \u4e2a word\uff0c\u800c DDR SDRAM \u53ef\u4ee5\u8f93\u51fa 8 \u4e2a word\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#rdram","title":"RDRAM","text":"\u63d0\u9192
RDRAM \u76f8\u5173\u5185\u5bb9\u8bfe\u5802\u4e0a\u53ea\u662f\u4e00\u5e26\u800c\u8fc7\uff0c\u8fd9\u91cc\u4e5f\u4ec5\u5217\u51fa\u4e00\u4e9b\u6982\u5ff5\uff0c\u6709\u4e2a\u5370\u8c61\u5373\u53ef\u3002
RDRAM \u4f7f\u7528 packet-based bus \u6765\u4f20\u8f93\u6570\u636e\uff0c\u4e5f\u5c31\u662f\u8bf4\u6570\u636e\u4ee5 packet \u7684\u5f62\u5f0f\u88ab\u5c01\u88c5\u8d77\u6765\u5e76\u8fdb\u884c\u4f20\u8f93\u3002
\u603b\u7ebf bus \u4e2d\u5305\u542b\uff1a 3-bit row address bus 5-bit column address bus 16-bit \u6216 18-bit data bus \u603b\u7ebf bus \u662f\u540c\u6b65\u7684\uff0c\u4e14\u5728\u65f6\u949f\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\u90fd\u80fd\u54cd\u5e94\uff1b \u6570\u636e\u5305 packet \u5386\u65f6 4 \u4e2a\u65f6\u949f\u5468\u671f\u6765\u5b9e\u73b0 8 \u6b21\u4f20\u8f93\uff0c\u6240\u4ee5\u6bcf\u4e2a packet \u4e2d\u5305\u542b\uff1a 24-bit row address packet 40-bit column address packet 128-bit \u6216 144-bit data packet RDRAM \u5229\u7528 multiple memory bank \u6280\u672f\uff0c\u4f7f\u5f97\u4e0d\u540c row address \u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5e76\u884c\u5730\u8bbf\u95ee\u5230(concurrent memory accesses)\uff1b RDRAM \u901a\u8fc7\u590d\u6742\u7684\u7535\u8def\u8bbe\u8ba1\uff0c\u53ef\u4ee5\u5c06\u65f6\u949f\u9891\u7387\u53d8\u5f97\u5f88\u9ad8\uff0c\u4ece\u800c\u5927\u5927\u63d0\u9ad8\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff1b "},{"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
Lecture 1 | Introduction Lecture 2 | Image Formation Lecture 3 | Image Processing Lecture 4 | Model Fitting and Optimization Lecture 5 | Feature Matching and Motion Estimation Lecture 6 | Image Alignment and Stitching Lecture 7 | Structure From Motion Lecture 8 | Depth Estimation & 3D Reconstruction Lecture 9 | Deep Learning Lecture 10 | Recognition Lecture 11 | 3D Deep Learning Lecture 12 | Computational Photography 1 Lecture 13 | Computational Photography 2 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":" \u4e09\u7ef4\u91cd\u5efa / Reconstruction \u56fe\u50cf\u7406\u89e3 / Understanding \u56fe\u50cf\u5408\u6210 / Synthesis "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u5e94\u7528","title":"CV \u7684\u5e94\u7528","text":"Application Examples Face Reconstruction and Recognition Face ID Vending Machine with Face Detection DeepFake Augmented reality Factory Automation Vision Inspection Optical Character Recognition(OCR) Video Surveillance Human Computer Interaction: Optical Mouse Human Computer Interaction: Motion Sensing Games Visual Effects (VFX) Digital Human VR Tour Visual Localization and Navigation Autonomous Navigation: Space Exploration Robot Perception Autonomous Driving Augmented Reality Free Viewpoint Video Medical Image Analysis ...... "},{"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
CVPR (Computer Vision and Pattern Recognition) ICCV (International Conference on Computer Vision) ECCV (European Conference on Computer Vision) \u56fe\u5f62\u5b66\u76f8\u5173\u7684\u9876\u4f1a
"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u8bfe\u7a0b\u6982\u8ff0","title":"\u8bfe\u7a0b\u6982\u8ff0","text":" \u8bfe\u7a0b\u76ee\u6807 \u5b66\u4e60\u8ba1\u7b97\u673a\u89c6\u89c9\u76f8\u5173\u7684\u77e5\u8bc6 \u5b66\u4f1a\u300c\u7528\u6570\u5b66\u63cf\u8ff0\u4e0e\u89e3\u51b3\u95ee\u9898\u300d Linear Algebra
/ Optimization
/ Geometry
\u8bfe\u7a0b\u8d44\u6e90
\u6559\u6750\uff1ahttps://szeliski.org/Book/ \u8bfe\u7a0b\u8ba1\u5212
Basics. (Lec.02 \u2013 Lec.04) Reconstruction. (Lec.05 \u2013 Lec.09) Understanding. (Lec.10 \u2013 Lec.12) Synthesis. (Lec. 13 \u2013 Lec.14) Note
\u4f5c\u4e3a\u540e\u7eed\u8bfe\u7a0b\u7684\u57fa\u7840\uff0c\u9700\u8981\u590d\u4e60\u7ebf\u6027\u4ee3\u6570\u7684\u76f8\u5173\u77e5\u8bc6\uff0c\u5b83\u5c06\u8d2f\u7a7f\u6574\u4e2a\u8bfe\u7a0b\uff1b \u9700\u8981\u719f\u6089\u6d89\u53ca\u7684\u8bcd\u6c47\uff0c\u4e4b\u540e\u4f1a\u82e5\u5e72\u6b21\u63d0\u5230\uff1b "},{"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
\u4ee3\u6570\u4e0a\uff0c\u7ed3\u679c\u5411\u91cf\u7684\u6bcf\u4e00\u9879\u76f8\u5f53\u4e8e\u539f\u5411\u91cf\u7684\u4e00\u4e2a\u52a0\u6743\u6c42\u548c\uff1b \u51e0\u4f55\u4e0a\uff0c\u7ed3\u679c\u5411\u91cf\u76f8\u5f53\u4e8e\u539f\u5411\u91cf\u505a\u51e0\u4f55\u53d8\u6362\u5f97\u5230\u7684\u65b0\u5411\u91cf\uff1b \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
\u90a3\u4e48\u53cd\u8fc7\u6765\u7684\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7\u89c2\u5bdf\u67d0\u4e9b\u70b9\u5728\u53d8\u6362\u540e\u7684\u4f4d\u7f6e\u6765\u611f\u53d7\u8fd9\u4e2a\u201c\u53d8\u6362\u201d\u7684\u5177\u4f53\u5185\u5bb9\uff1b \u66f4\u7279\u522b\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u53d8\u6362\u77e9\u9635\uff08\u5de6\u4fa7\u77e9\u9635\uff09\u7684\u6bcf\u4e00\u5217\uff0c\u5c31\u76f8\u5f53\u4e8e\u5bf9\u5e94\u7684\u5355\u4f4d\u57fa\uff08\u4f8b\u5982\u7b2c \\(2\\) \u5217\u5bf9\u5e94 \\(\\vec{a}(0,1)\\) \u5411\u91cf\uff09\u7ecf\u8fc7\u8fd9\u4e2a\u53d8\u6362\uff08\u53f3\u4e58\u8fd9\u4e2a\u53d8\u6362\u77e9\u9635\uff09\u5f97\u5230\u7684\u7ed3\u679c\uff1b 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
\u5bf9\u4e8e\u53c2\u8003\u70b9 \\((1,0)\\)\uff0c\u7ecf\u8fc7\u65cb\u8f6c\u540e\u4f4d\u7f6e\u53d8\u5316\u4e3a \\((\\cos\\theta,-\\sin\\theta)\\)\uff1b \u5bf9\u4e8e\u53c2\u8003\u70b9 \\((0,1)\\)\uff0c\u7ecf\u8fc7\u65cb\u8f6c\u540e\u4f4d\u7f6e\u53d8\u5316\u4e3a \\((\\sin\\theta,\\cos\\theta)\\)\uff1b \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
\\(\\begin{bmatrix}x\\\\y\\\\k\\end{bmatrix}\\) \u7b49\u4ef7\u4e8e \\(\\begin{bmatrix}x/k\\\\y/k\\\\1\\end{bmatrix}\\)\uff0c\u5f53\u7136\uff0c\\(k\\not=0\\)\uff1b \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
\u5982\u56fe\uff0c\u6211\u4eec\u8981\u4ece\u56fe\u4e2d\u627e\u5230\u4e00\u4e2a\u65b9\u5411\uff0c\u4f7f\u5f97\u6240\u6709\u6570\u636e\u70b9\u5728\u8fd9\u4e2a\u65b9\u5411\u4e0a\u7684\u6295\u5f71\uff0c\u65b9\u5dee\u6700\u5927\uff08\u6362\u8a00\u4e4b\uff0c\u627e\u5230\u8fd9\u4e9b\u6570\u636e\u7684\u4e00\u4e2a\u201c\u65b9\u5411\u201d\uff09\uff1b \u8bb0\u6240\u6709\u6570\u636e\u70b9\u4e3a \\(A\\)\uff0c\u5219 \\(A^{T}A\\) \u4e3a\u534f\u65b9\u5dee\u77e9\u9635(covariance matrix)\uff0c\u5176\u7279\u5f81\u5411\u91cf\u4e2d\uff0c\u7279\u5f81\u503c\u6700\u5927\u7684\u90a3\u4e2a\uff0c\u5c31\u662f\u8fd9\u7ec4\u6570\u636e\u7684\u4e3b\u6210\u5206\uff1b "},{"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":" \u66dd\u5149\u65f6\u95f4(shutter speed) \u957f\u66dd\u5149\u65f6\u95f4\u62cd\u6444\u95ea\u7535\u7b49\uff1b \u6eda\u52a8\u5feb\u95e8\u6548\u5e94(rolling shutter effect) \u7528\u6eda\u52a8\u5feb\u95e8\u62cd\u6444\u4f8b\u5982\u98ce\u6247\u65f6\uff0c\u4f1a\u51fa\u73b0\u4e00\u4e9b\u56fe\u50cf\u53d8\u5f62\uff1b "},{"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
\u4e3b\u8981\u5206\u4e3a CMOS(Complimentary Metal-Oxide Semiconductor) \u548c CCD(Charge Coupled Device) \u4e24\u79cd\uff0c\u533a\u522b\u5728\u4e8e Electron to Voltage Conversion \u662f\u5426\u516c\u7528\uff1b \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
\u89c2\u6d4b\u89d2\u5ea6(viewer direction)\uff1a\\(\\vec v\\) \u8868\u9762\u6cd5\u5411\u91cf(surface normal)\uff1a\\(\\vec n\\) \u5165\u5c04\u5149\u65b9\u5411(light direction)\uff1a \\(\\vec l\\) \u663e\u7136\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u6761\u5149\u7ebf\u90fd\u9700\u8981\u7ed9\u51fa\uff1b \u8868\u9762\u6750\u8d28(surface parameters) \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
\\(L_d\\) \u4e3a\u6f2b\u53cd\u5c04\u5149\u5f3a(diffusely reflected light)\uff1b \\(k_d\\) \u4e3a\u6f2b\u53d1\u5c04\u7cfb\u6570(diffuse coefficient)\uff0c\u5982\u989c\u8272\uff1b \\(\\frac{I}{r^2}\\) \u4e3a \u5230\u8fbe\u7740\u8272\u70b9\u7684\u5149\u5f3a\uff1b \\(\\max(0,n \\cdot l)\\) \u4e3a \u7740\u8272\u70b9\u5438\u6536\u7684\u5149\u5f3a\uff1b \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
\\(L_s\\) \u4e3a\u9ad8\u5149\u53cd\u5c04\u5149\u5f3a(specularly reflected light)\uff1b \\(k_s\\) \u4e3a\u9ad8\u5149\u53d1\u5c04\u7cfb\u6570(specular coefficient)\uff1b \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
\u6211\u4eec\u4e00\u822c\u79f0 \\(f(y)\\) \u4e3a\u6ee4\u6ce2\u5668(filter)\uff0c\u8fd9\u662f\u56e0\u4e3a\u6211\u4eec\u672c\u8d28\u4e0a\u662f\u5728\u6c42 \\(g(x)\\) \u5728\u8fd9\u4e2a\u6ee4\u6ce2\u89c4\u5219\u4e0b\u52a0\u6743\u6c42\u5747\u503c\u751f\u6210\u7684\u65b0\u51fd\u6570\u3002 \u6240\u4ee5\uff0c\\(f(y)\\) \u4e00\u822c\u662f\u6839\u636e\u9700\u6c42\u800c\u51b3\u5b9a\u7684\u4e00\u4e9b\u7279\u6b8a\u51fd\u6570\uff0c\u6bd4\u5982\u9ad8\u65af\u51fd\u6570\u3001\u7279\u5b9a\u533a\u95f4\u5185\u7684\u5e38\u51fd\u6570\u7b49\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
Wiki \u4e2d\u6709\u66f4\u9177\u7684\u52a8\u56fe\uff1a\ud83d\udd17 \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
\u9ad8\u65af\u6ee4\u6ce2\u5668(\u4e2d\u5fc3\u6743\u91cd\u5927) \u9510\u5316\u6ee4\u6ce2\u5668 \u8fb9\u7f18\u68c0\u6d4b\u6ee4\u6ce2\u5668 \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 \u53cc\u8fb9\u6ee4\u6ce2\u5668 \u2026\u2026 "},{"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
\u4ece\u5e94\u7528\u6765\u8bb2\uff0c\u6a21\u7cca\u53ef\u4ee5\u7528\u6765\u505a\u4e00\u4e9b\u964d\u566a\u7684\u5de5\u4f5c\uff0c\u4e5f\u53ef\u4ee5\u7ed9\u56fe\u7247\u8425\u9020\u51fa\u4e00\u79cd\u5149\u6ed1\u7684\u8d28\u611f\uff1b \u800c\u9510\u5316\u53ef\u4ee5\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u589e\u52a0\u56fe\u7247\u7684\u6e05\u6670\u5ea6\u3002 "},{"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
\u5982\u679c\u5b9a\u4e49\u539f\u672c\u7684\u56fe\u50cf\u4e3a \\(I\\)\uff0c\u6a21\u7cca\u540e\u7684\u56fe\u50cf\u4e3a \\(I_b\\) \u5b9a\u4e49\u56fe\u50cf\u4e2d\u7684\u9ad8\u9891(high frequencies)\u4e3a I_h = I - I_b\uff1b \u5219\u9510\u5316\u7684\u56fe\u50cf \\(I_s = I + I_h\\)\uff1b \u5373\u6709 \\(2I = I_s + I_h\\)\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u53c8\u4e00\u4e2a\u7c7b\u4f3c\u4e8e\u4e92\u8865\u7684\u5173\u7cfb\uff1b \u800c\u8fd9\u91cc\u7684\u9ad8\u9891\u53ef\u4ee5\u7406\u89e3\u4e3a\u56fe\u50cf\u4e2d\u53d8\u5316\u6bd4\u8f83\u660e\u663e\u7684\u5730\u65b9\uff1b
"},{"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
Extracts horizontal gradients \\[ \\begin{bmatrix} -1 & 0 & 1 \\\\ -2 & 0 & 2 \\\\ -1 & 0 & 1 \\end{bmatrix} \\] Extracts vertical gradients \\[ \\begin{bmatrix} -1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ 1 & 2 & 1 \\end{bmatrix} \\] \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 Separable filter\uff0c\u53ef\u4ee5\u7528\u8fd9\u79cd\u65b9\u5f0f\u6765\u964d\u4f4e\u8ba1\u7b97\u91cf\uff1b \u53ea\u8981\u8868\u8fbe\u5f0f\u53ef\u4ee5\u5199\u6210\u4e24\u4e2a\u51fd\u6570\u76f8\u4e58\uff0c\u90a3\u57fa\u672c\u662f separable \u7684; \u6bd4\u5982\u9ad8\u65af\u77e9\u9635\u5c31\u53ef\u4ee5\u62c6\u6210\u8fd9\u6837\uff1a \\(f(i,j)=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2+j^2}{2\\sigma^2}}=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2}{2\\sigma^2}}\\cdot e^{-\\frac{j^2}{2\\sigma^2}}\\) \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
TODO: \u5177\u4f53\u89e3\u91ca\u6682\u65f6\u5495\u5495\u5495\u3002 \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
TODO: \u9700\u8981\u66f4\u8be6\u7ec6\u7684\u89e3\u91ca \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
\u8109\u51b2\u51fd\u6570\u7ecf\u8fc7 Fourier \u53d8\u6362\u540e\u4ecd\u7136\u662f\u68b3\u5f62\u7684\u3002
\u901a\u8fc7\u8109\u51b2\u51fd\u6570\uff0c\u6211\u4eec\u5c06\u7279\u5b9a\u9891\u7387\u7684\u5185\u5bb9\u7ed9\u8fc7\u6ee4\u4e0b\u6765\uff0c\u5c06\u4e00\u4e2a\u201c\u8fde\u7eed\u201d\u7684\u5185\u5bb9\u91c7\u6837\u4e3a\u4e86\u4e00\u4e2a\u201c\u79bb\u6563\u201d\u7684\u5185\u5bb9\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
TODO: \u7406\u89e3\u5e76\u89e3\u91ca\u8fd9\u4e00\u70b9\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
\u63d0\u9ad8\u91c7\u6837\u9891\u7387\uff1b \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
\u4e0d\u8fde\u7eed\uff08\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u5728\u6bcf\u4e24\u4e2a\u91c7\u6837\u70b9\u7684\u4e2d\u95f4\uff0c\u4f1a\u51fa\u73b0\u65ad\u70b9\uff09\uff1b \u4e0d\u5149\u6ed1\uff08\u65ad\u70b9\u5904\u65e0\u6cd5\u6c42\u5bfc\uff09\uff1b \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
\u8fde\u7eed\uff1b \u4e0d\u5149\u6ed1\uff08\u5728\u91c7\u6837\u70b9\u51fd\u6570\u4f1a\u51fa\u73b0\u7a81\u53d8\uff0c\u65e0\u6cd5\u6c42\u5bfc\uff09\uff1b \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
\u8fde\u7eed\uff1b \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
\u6211\u4eec\u5b9a\u4e49edge energy\\(E(I) = \\big|\\frac{\\partial I}{\\partial x}\\big| + \\big| \\frac{\\partial I}{\\partial y} \\big|\\)\uff1b \u627e\u5230\u4ece\u9876\u5230\u5e95\u7684\u4e00\u6761\u8054\u901a\uff08\u5c31\u662f\u4e0b\u4e00\u4e2a\u70b9\u80af\u5b9a\u4e0e\u4e0a\u4e00\u4e2a\u70b9\u76f8\u90bb\u6216\u8005\u5171\u540c\u9876\u70b9\uff09\u8def\u5f84\uff0c\u4f7f\u5f97 edge energy \u6700\u5c0f\uff1b \u7136\u540e\u5c06\u8fd9\u6761\u8def\u5f84\u4ece\u56fe\u7247\u4e2d\u5220\u9664\uff0c\u5c31\u597d\u50cf\u5c06\u8fd9\u4e2a\u88c2\u7f1d\u4e24\u8fb9\u62fc\u8d77\u6765\uff1b \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
\u76ee\u6807\u51fd\u6570\u4e3a \\(\\min\\limits_{X} || Y - F * X ||^2_2\\) \u7684\u4f18\u5316\u95ee\u9898\u3002 "},{"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
\u521d\u59cb\u5316\u8d77\u70b9\u5750\u6807 x\uff1b \u76f4\u5230 x \u6536\u655b\u5230\u6211\u4eec\u6ee1\u610f\u7684\u7a0b\u5ea6\u4e4b\u524d\uff1a \u8ba1\u7b97\u4e0b\u964d\u65b9\u5411 p\uff1b \u51b3\u5b9a\u4e0b\u964d\u6b65\u957f \u237a\uff1b \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
\u5982\u4f55\u786e\u5b9a\u4e0b\u964d\u65b9\u5411 \\(\\vec p\\) \u5982\u4f55\u786e\u5b9a\u4e0b\u964d\u6b65\u957f \u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18 "},{"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
first-order approximation: \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F \\Delta x\\) second-order approximation: \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F\\Delta x + \\frac{1}{2}\\Delta x^T H_F \\Delta x\\) \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
\u521d\u59cb\u5316 \\(\\alpha\\) \u4e3a\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u503c\uff1b \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
\u4f18\u70b9 \u5bb9\u6613\u5b9e\u73b0\uff1b \u5728\u8ddd\u79bb\u76ee\u6807\u70b9\u8f83\u8fdc\u65f6\u8868\u73b0\u826f\u597d\uff1b \u7f3a\u70b9 \u5728\u76ee\u6807\u70b9\u9644\u8fd1\u6536\u655b\u6bd4\u8f83\u6162\uff1b \u6d6a\u8d39\u4e86\u5927\u91cf\u7b97\u529b\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\\)
\u4f18\u70b9 \u5728\u76ee\u6807\u70b9\u9644\u8fd1\u4e0b\u964d\u901f\u5ea6\u76f8\u5bf9\u66f4\u5feb\uff1b \u7f3a\u70b9 Hessian matrix \u7684\u8ba1\u7b97\u9700\u8981\u76f8\u5f53\u7b97\u529b\uff0c\u751a\u81f3\u6709\u65f6\u5019\u65e0\u6cd5\u8ba1\u7b97\uff1b \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
\u4f18\u70b9 \u4e0d\u9700\u8981\u8ba1\u7b97 Hessian matrix\uff0c\u53ea\u9700\u8981\u8ba1\u7b97 Jacobian matrix\uff1b \u7f3a\u70b9 \u7531\u4e8e \\(J_R^TJ_R\\) \u4e0d\u6b63\u5b9a\uff0c\u6240\u4ee5\u672a\u5fc5\u53ef\u9006\uff0c\u9ad8\u65af\u725b\u987f\u6cd5\u6210\u7acb\u7684\u524d\u63d0\u662f\u5176\u53ef\u9006\uff1b \u5f53\u7136\uff0c\u53ef\u4ee5\u4f7f\u7528 Levenberg-Marquardt \u7b97\u6cd5\uff08LM \u7b97\u6cd5\uff09\uff0c\u5373\u5c06 \\(J_R^TJ_R\\) \u4fee\u6b63\u4e3a \\(J_R^TJ_R + \\lambda I\\) \u4ee5\u4fdd\u8bc1\u6b63\u5b9a\uff1b Levenberg-Marquardt Wiki: \ud83d\udd17
\\[ \\Delta x = -(J_R^TJ_R+\\lambda I)^{-1}J_R^TR(x_k) \\] The effect of \\(\\lambda\\): \\(\\lambda \\to \\infty\\): Gradient descent, and stepsize is small; \\(\\lambda \\to 0\\): Gauss-Newton step; How to determine \\(\\lambda\\): Update in every iteration; When decreases obviously, \\(\\lambda\\uparrow\\); When doesn't decrease obviously, \\(\\lambda\\downarrow\\); \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
\u6211\u4eec\u53ef\u80fd\u53ef\u4ee5\u8f6c\u5316\u95ee\u9898\uff0c\u4f7f\u7528\u66f4\u7b80\u5355\u7684\u8868\u8fbe\u5f0f\u53bb\u62df\u5408\u539f\u6765\u7684\u8868\u8fbe\u5f0f\uff0c\u6765\u6c42\u89e3\uff1b \u5176\u4e2d\uff0c\uff08\u51f9\uff09\u51f8\u51fd\u6570\u662f\u4e00\u5b9a\u80fd\u627e\u5230\u6700\u4f18\u89e3\u7684\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u95ee\u9898\u4e3a\u51f8\u4f18\u5316\u95ee\u9898(Convex optimization) \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
\u5185\u70b9(inlier)\uff1a\u7b26\u5408\u6211\u4eec\u9884\u671f\u7684\u6a21\u578b\u62df\u5408\u7684\u70b9\uff1b \u5916\u70b9(outlier)\uff1a\u5b8c\u5168\u4e0d\u7b26\u5408\u6211\u4eec\u9884\u671f\u6a21\u578b\u7684\u70b9\uff0c\u53c8\u53eb\u79bb\u7fa4\uff1b
\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 L1 loss \u5373\u76f4\u63a5\u5bf9\u504f\u5dee\u53d6\u7edd\u5bf9\u503c\uff0c\u5176\u516c\u5f0f\u4e3a \\(L_1 = |f(x)-Y|\\)\uff0c\u5176\u6700\u5927\u7684\u95ee\u9898\u5c31\u662f\u5728\u62d0\u70b9\u5904\u4e0d\u5149\u6ed1\uff0c\u5373\u4e0d\u53ef\u5bfc\uff0c\u800c\u4e14\u5176\u6536\u655b\u53ef\u80fd\u8fc7\u5feb\uff1b L2 loss \u5373\u5c06\u504f\u5dee\u53d6\u5e73\u65b9\uff0c\u5373 \\(L_2 = |f(x)-Y|^2\\)\uff0cL2 loss \u5728\u62d0\u70b9\u5904\u5219\u662f\u5149\u6ed1\u53ef\u5bfc\u7684\uff0c\u4e14\u6536\u655b\u76f8\u5bf9\u7a33\u5b9a\u5149\u6ed1\uff0c\u4f46\u662f\u4e14\u5728\u67d0\u4e9b\u65f6\u5019\u5177\u6709\u6bd4\u8f83\u597d\u7684\u51e0\u4f55\u610f\u4e49\uff0c\u4f46\u662f\u5bf9\u4e8e\u504f\u5dee\u8f83\u5927\u7684\u70b9\u66f4\u654f\u611f\uff1b Huber loss \u53c8\u53eb smooth L1 loss\uff0c\u5373\u4f7f\u7528\u5206\u6bb5\u51fd\u6570\uff0c\u5728\u62d0\u70b9\u9644\u8fd1\u4f7f\u7528 L2 loss\uff0c\u5728\u8fdc\u7aef\u4f7f\u7528 L1 loss\uff1b
\u76f8\u5173\u6587\u7ae0\uff1ahttps://zhuanlan.zhihu.com/p/48426076 "},{"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
\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 \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
TODO: \u518d\u7ec6\u8bf4\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
\u8bbe \\(f\\) \u8868\u793a\u989c\u8272\uff1b \u50cf\u7d20\u5dee\u5f02(dissimilarity)\u4e3a \\(s(f_i,f_j)=\\sqrt{\\sum_k(f_{ik},f_{jk})^2}\\)\uff1b \u5219\u76f8\u4f3c\u6027(affinity)\u6743\u91cd\u4e3a\uff1a\\(w(i,j) = A(f_i,f_j) = e^{\\frac{-1}{2\\sigma^2}s(f_i,f_j)}\\)\uff1b \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)} \\] NP-Complete Approximate solution by eigenvalue decomposition "},{"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 Image alignment / Panoramas 3D reconstruction Motion tracking Object recognition Indexing & database retrieval Robot navigation ... \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
\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 \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 \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
\u72ec\u7279\u6027(uniqueness)\uff0c\u5373\u8fd9\u4e2a\u70b9\u9700\u8981\u80fd\u591f\u8868\u5f81\u4e00\u5b9a\u7279\u6027\uff1b \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
\u7740\u773c\u4e8e\u56fe\u50cf\u7684\u89d2\u70b9 - Harris corner detector\uff1b \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
\u6c42\u5bfc | Compute derivatives at each pixel. \u534f\u65b9\u5dee\u77e9\u9635 | Compute covariance matrix \\(H\\) in a Gaussian window around each pixel. \u54cd\u5e94\u51fd\u6570 | Compute corner response function \\(f\\). \u9608\u503c\u8fc7\u6ee4 | Threshold \\(f\\). \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
C.Harris and M.Stephens. \u201cA Combined Corner and Edge Detector.\u201d Proceedings of the 4th Alvey Vision Conference: pages 147\u2014151, 1988. \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
Partially invariant to affine intensity change. Corner response is invariant w.r.t. translation. Corner response is invariant w.r.t. image rotation. 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:
HOG: Histogram of oriented gradients SURF: Speeded Up Robust Features Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, \"SURF: Speeded Up Robust Features\", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008 FAST (corner detector) Rosten. Machine Learning for High-speed Corner Detection, 2006. ORB: an efficient alternative to SIFT or SURF Ethan Rublee, Vincent Rabaud, Kurt Konolige, Gary R. Bradski: ORB: An efficient alternative to SIFT or SURF. ICCV 2011 Fast Retina Key- point (FREAK) A. Alahi, R. Ortiz, and P. Vandergheynst. FREAK: Fast Retina Keypoint. In IEEE Conference on Computer Vision and Pattern Recognition, 2012. CVPR 2012 Open Source Award Winner. "},{"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
\u7279\u5f81\u8ddf\u8e2a\uff0c\u5728\u6bcf\u4e00\u5e27\u4e2d\u8fdb\u884c\u5173\u952e\u70b9\u5339\u914d\uff0c\u4ee5\u8ddf\u8e2a\u7279\u5b9a\u5173\u952e\u70b9\u7684\u53d8\u5316\u2014\u2014\u8fd9\u4e00\u7c7b\u65b9\u6cd5\u5f97\u5230\u7684\u7ed3\u679c\u76f8\u5bf9\u7a00\u758f\uff0c\u6bd5\u7adf\u5173\u952e\u70b9\u603b\u662f\u5c11\u7684\uff1b \u5149\u6d41(optical flow)\u6280\u672f\uff0c\u901a\u8fc7\u5bf9\u76f8\u90bb\u5e27\u7684\u50cf\u7d20\u8fdb\u884c\u5339\u914d\uff0c\u4ee5\u8ddf\u8e2a\u50cf\u7d20\u7684\u53d8\u5316\u2014\u2014\u8fd9\u4e00\u7c7b\u65b9\u6cd5\u5f97\u5230\u7684\u7ed3\u679c\u76f8\u5bf9\u5bc6\u96c6\uff1b \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
[Small motion] \u76f8\u90bb\u5e27\uff0c\u5339\u914d\u70b9\u7684\u8fd0\u52a8\u8ddd\u79bb\u5c0f\uff1b [Brightness constancy] \u76f8\u90bb\u5e27\uff0c\u70b9\u7684\u4eae\u5ea6\u503e\u5411\u4e8e\u4e0d\u53d8\uff0c\u5373\u53d8\u5316\u5fae\u5c0f\uff1b [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
\u56fe\u50cf\u62fc\u63a5\u7684\u4e24\u4e2a\u65b9\u9762\uff1a \u5c06\u4e24\u5f20\u56fe\u7247\u5bf9\u9f50\uff0c\u627e\u5230\u91cd\u5408\u7684\u90e8\u5206 image warping (change shape of image) \u4e00\u822c\u6765\u8bf4\u662f \u53c2\u6570\u5316parametric \u6216\u8005\u8bf4 \u5168\u5c40global \u7684 warping\uff0c\u7531\u4e00\u4e2a\u542b\u6709\u53c2\u6570\u7684\u65b9\u7a0b\u51b3\u5b9a\uff1a\\(p' = T(p)\\)\uff1b translation / affine / projective \u9664\u4e86\u80fd\u591f\u7528\u4eff\u5c04\u53d8\u6362\u63cf\u8ff0\u7684\u53d8\u6362\uff0c\u8fd8\u6709\u6295\u5f71\u53d8\u6362(Projective Transformation)\uff0c\u6216\u8005\u8bf4\u5355\u5e94\u53d8\u6362(Homography)\uff0c\u5b83\u65e0\u6cd5\u7528\u4eff\u5c04\u53d8\u6362\u63cf\u8ff0\u3002 \u5355\u5e94\u77e9\u9635\u5728\u5e73\u9762\u56fe\u5f62\u4e2d\u4e5f\u662f\u4e00\u4e2a 3*3 \u7684\u77e9\u9635\uff0c\u4f46\u662f\u6ca1\u6709\u5fc5\u987b\u4e3a 0 \u7684\u5143\u7d20\u7ea6\u675f\uff08\u533a\u522b\u4e8e\u9f50\u6b21\u5750\u6807\uff09\uff1a \\(\\begin{bmatrix}x'_i \\\\ y'_i \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} h_{00} & h_{01} & h_{02} \\\\ h_{10} & h_{11} & h_{12} \\\\ h_{20} & h_{21} & h_{22} \\end{bmatrix}\\begin{bmatrix}x_i \\\\ y_i \\\\ 1\\end{bmatrix}\\)\uff0c\u7531\u4e8e \\(h_{22}\\) \u5b9e\u9645\u4e0a\u53ef\u4ee5\u662f\u4efb\u610f\u5b9e\u6570\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u7684\u81ea\u7531\u5ea6\u4e3a 8\uff0c\u6240\u4ee5\u4e3a\u4e86\u8ba9\u89e3\u5177\u6709\u552f\u4e00\u6027\uff0c\u6211\u4eec\u7ea6\u675f \\(||\\begin{bmatrix}h_{00} & h_{01} & ... & h_{21} & h_{22}\\end{bmatrix}||_2 = 1\\)\uff0c\u8fd9\u6837\u5c31\u80fd\u4fdd\u8bc1\u81ea\u7531\u5ea6\u4e3a 8 \u4e14\u5bf9\u5e94\u7684\u89e3\u552f\u4e00\uff1b \u5b9e\u9645\u4e0a\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u5b83\u662f\u5728\u4e09\u7ef4\u7a7a\u95f4\u4e0b\uff0c\u76f8\u673a\u4e0d\u5e73\u79fb\u53ea\u65cb\u8f6c\u7684\u4e00\u4e2a\u89c6\u89d2\u53d8\u5316\uff0c\u5373 change projection plane\uff1b \u5982\u679c\u76f8\u673a\u5e73\u79fb\u4e14\u65cb\u8f6c\uff0c\u90a3\u60c5\u51b5\u975e\u5e38\u590d\u6742\uff0c\u751a\u81f3\u4e0d\u4e00\u5b9a\u5177\u6709\u70b9\u70b9\u5bf9\u5e94\u5173\u7cfb\uff1b \u4f46\u662f\u6709\u4e00\u4e2a\u7279\u6b8a\u60c5\u51b5\uff0c\u5c31\u662f\u6211\u89c2\u6d4b\u5230\u573a\u666f\u672c\u8eab\u5c31\u662f\u5e73\u9762\uff08\u6216\u8005\u7279\u522b\u8fdc\u7684\u666f\u89c2\uff09\uff0c\u573a\u666f\u4e0d\u5b58\u5728\u906e\u6321\uff0c\u8fd9\u4e2a\u65f6\u5019\u4e5f\u53ef\u4ee5\u4f7f\u7528 homography\uff1b \u5982\u4e0a\u5c31\u662f\u4e3a\u4ec0\u4e48\u624b\u673a\u62cd\u6444\u5168\u666f\u7167\u7247\u65f6\u8981\u6c42\u4e0d\u8981\u79fb\u52a8\u53ea\u8f6c\u52a8\u76f8\u673a \u5982\u4e0a\u53d8\u6362\u90fd\u6709\u9006\u53d8\u6362\uff1b \u5b9e\u9645\u64cd\u4f5c\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u9006\u53d8\u6362\uff08\u6b63\u5411\u53d8\u6362\u7684\u8bdd\u50cf\u7d20\u4f4d\u7f6e\u53ef\u80fd\u4e0d\u5bf9\uff09\uff0c\u5373\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u9700\u8981\u627e\u7684\u50cf\u7d20\u70b9\uff0c\u6211\u4eec\u53bb\u627e\u53d8\u6362\u524d\u7684\u5750\u6807\uff0c\u5e76\u6839\u636e\u8fd9\u4e2a\u5750\u6807\u6765\u8fdb\u884c\u63d2\u503c\uff0c\u4e00\u822c\u4f7f\u7528\u53cc\u7ebf\u6027\u63d2\u503c\uff1b \u8ba1\u7b97\u5982\u4f55\u5bf9\u9f50\u5408\u5e76\u8fd9\u4e24\u4e2a\u56fe\u7247 image stitching \u5373\u7ed9\u5b9a\u4e24\u5f20\u56fe\u50cf\uff0c\u5982\u4f55\u8ba1\u7b97\u4e0a\u4e00\u6b65\u63d0\u5230\u7684 T\uff1b \u6b65\u9aa4\uff1a image matching(each match gives an equation); solve T from the obtained matches; \u4f8b\u5982\uff0c\u5bf9\u4e8e afine transformations\uff0c\u6709\u516d\u4e2a\u81ea\u7531\u5ea6\uff0c\u9700\u8981\u516d\u4e2a\u65b9\u7a0b\u4e09\u5bf9\u5339\u914d\u5173\u7cfb\uff08\u6bcf\u4e00\u5bf9\u5339\u914d\u5173\u7cfb\u63d0\u4f9b\u4e24\u4e2a\u65b9\u7a0b\uff0c\u5206\u522b\u662f\u5173\u4e8e x \u548c\u5173\u4e8e y \u7684\uff09\uff1b \u5b83\u4eec\u5177\u6709\u77e9\u9635\u5f62\u5f0f\uff1a \uff08\u6284\u9ea6\u54e5\u7b14\u8bb0\uff09 \u5b9e\u9645\u8fc7\u7a0b\u4e2d\u6211\u4eec\u5e76\u4e0d\u4f1a\u76f4\u63a5\u53bb\u201c\u89e3\u65b9\u7a0b\u201d\uff0c\u800c\u662f\u53bb\u505a\u4e00\u4e2a\u201c\u5c3d\u91cf\u76f8\u7b49\u201d\u7684\u4e00\u4e2a\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\uff0c\u8fd9\u4e2a\u95ee\u9898\u7684\u89e3\u6709\u4e00\u4e2a\u89e3\u6790\u89e3\uff1a\\(t = (A^TA)^{-1}A^Tb\\)\uff1b \u518d\u4f8b\u5982\u5bf9\u4e8e homography\uff0c\u6709\u516b\u4e2a\u81ea\u7531\u5ea6\u5c31\u9700\u8981\u516b\u4e2a\u65b9\u7a0b\u56db\u5bf9\u5339\u914d\u5173\u7cfb\uff1b \u5bf9\u4e8e\u4f18\u5316\u95ee\u9898\uff1a\\(\\mathop{min}_h ||Ah||^2 \\;\\;\\; s.t. ||h|| = 1\\)\uff0c\u5176\u89e3 \\(\\hat{h}\\) \u4e3a \\(A_TA\\) \u7279\u5f81\u503c\u6700\u5c0f\u7684\u7279\u5f81\u5411\u91cf\uff1b \u6b64\u5916\uff0c\u8fd8\u8981\u5173\u6ce8\u5982\u4f55\u5904\u7406 outliers\uff1a\u4f7f\u7528 RANSAC\uff1b \u5373\uff0c\u5229\u7528\u5c0f\u90e8\u5206\u5339\u914d\u5173\u7cfb\u8ba1\u7b97\u51fa T\uff0c\u7136\u540e\u62ff\u53bb\u68c0\u9a8c\u5176\u4ed6\u7684\u5339\u914d\u5173\u7cfb\uff1b \u7136\u800c\u4e0a\u9762\u8fd9\u4e9b\u505a\u6cd5\u90fd\u662f\u5c06\u56fe\u7247\u6295\u5f71\u5230\u4e00\u4e2a\u5e73\u9762\u4e0a\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c06\u56fe\u50cf\u62fc\u63a5\u4e3a\u4e00\u4e2a\u66f4\u5927\u90fd\u5e73\u9762\u56fe\u50cf\uff1b\u4f46\u662f\u5728\u5168\u666f\u8fd9\u79cd\u6848\u4f8b\u4e2d\uff0c\u8fd9\u4e48\u505a\u4f1a\u8ba9\u8fb9\u7f18\u62c9\u4f38\u8d8a\u6765\u6108\u660e\u663e\uff08\u8fd1\u5927\u8fdc\u5c0f\uff09\uff0c\u6240\u4ee5\u5bf9\u4e8e\u8fd9\u79cd\u6848\u4f8b\uff0c\u6211\u4eec\u8981\u5148\u5c06\u5b83\u6295\u5c04\u5230\u67f1\u9762\u4e0a\uff0c\u7136\u540e\u5728\u67f1\u9762\u4e0a\u8fdb\u884c\u62fc\u63a5\uff0cTODO:\u516c\u5f0f\u8bb0\u5f97\u6284\u4e0a\u6765\uff1b \u8fd8\u6709\u4e00\u4e2a\u95ee\u9898\u662f\u8bef\u5dee\u7d2f\u79ef\uff0c\u5bfc\u81f4\u6f02\u79fb(drift)\uff0c\u89e3\u51b3\u529e\u6cd5\u5c31\u662f\u6700\u540e\u4e00\u5f20\u548c\u7b2c\u4e00\u5f20\u4e4b\u95f4\u4e5f\u8ba1\u7b97\u4e00\u6b21 T \u6765\u8fdb\u884c\u7ea6\u675f\uff0c\u8fd9\u79cd\u60f3\u6cd5\u53eb\u56de\u8def\u95ed\u5408\uff1b \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
\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 \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 \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} \\] \u8bf4\u660e\uff1a \\((\\mathbf{x}_w - \\mathbf{c}_w)\\) \u53ef\u4ee5\u7406\u89e3\u4e3a\u4ece\u76f8\u673a\u4e2d\u5fc3\u6307\u5411\u76ee\u6807\u70b9\u7684\u4e00\u4e2a\u5411\u91cf\uff1b \u65cb\u8f6c\u77e9\u9635 \\(R\\) \u5355\u4f4d\u6b63\u4ea4\uff1b \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
\u4ee4 \\(p_{34} = 1\\)\uff1b \u4ee4 \\(||p|| = 1\\)\uff1b \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
\u4ece\u5176\u4e2d\u4e24\u5f20\u5f00\u59cb\uff0c\u5bf9\u573a\u666f\u8fdb\u884c\u91cd\u5efa \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 \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
GitHub Repo: https://github.com/colmap/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
LiDAR Structured light Active stereo \u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u89c6\u89c9\u65b9\u6cd5
Stereo Multi-view stereo Monocular \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
\u5982\u4f55\u9ad8\u6548\u5730\u5f97\u5230\u5339\u914d\u5173\u7cfb\uff1b \u5982\u4f55\u6839\u636e\u5339\u914d\u70b9\u8ba1\u7b97\u70b9\u6df1\u5ea6\uff1b \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
\u5982\u4f55\u9ad8\u6548\u5730\u5f97\u5230\u5339\u914d\u5173\u7cfb\uff1b \u5982\u4f55\u6839\u636e\u5339\u914d\u70b9\u8ba1\u7b97\u70b9\u6df1\u5ea6\uff1b "},{"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
\u4e24\u4e2a\u76f8\u673a\u7684\u7126\u8ddd\u76f8\u540c\uff1b \u76f8\u673a\u4f4d\u7f6e\u5728\u540c\u4e00\u6c34\u5e73\u9762\u4e0a\uff0c\u5373\u9ad8\u5ea6\u76f8\u540c\uff1b \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
\u5982\u4f55\u9ad8\u6548\u5730\u5f97\u5230\u5339\u914d\u5173\u7cfb\uff1b \u5982\u4f55\u6839\u636e\u5339\u914d\u70b9\u8ba1\u7b97\u70b9\u6df1\u5ea6\uff1b \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
Camera calibration errors Poor image resolution Occlusions Violations of brightness constancy (specular reflections) Large motions Textureless regions \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
\u5982\u679c\u57fa\u7ebf\u9009\u62e9\u8fc7\u5927\uff0c\u90a3\u4e48\u4e24\u5f20\u56fe\u7247\u4e4b\u95f4\u7684\u5185\u5bb9\u5dee\u522b\u5c31\u4f1a\u8f83\u5927\uff0c\u5728\u641c\u7d22\u8fc7\u7a0b\u4e2d\u5c31\u66f4\u96be\u627e\u5230\u80fd\u591f\u5339\u914d\u7684\u70b9\uff0c\u6b64\u5916\uff0c\u6a2a\u5411\u7684\u8bef\u5dee\u4e5f\u4f1a\u589e\u5927\uff0c\u7406\u7531\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u8fd9\u5f20\u56fe\u7684\u539f\u7406\uff1b \u800c\u5982\u679c\u57fa\u7ebf\u9009\u62e9\u8fc7\u5c0f\uff0c\u5219\u70b9\u7684\u6df1\u5ea6\u8bef\u5dee\u5c31\u4f1a\u5f88\u5927\uff0c\u5177\u4f53\u539f\u56e0\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u8fd9\u5f20\u56fe\u2014\u2014\u5355\u4e00\u50cf\u7d20\u5bf9\u5e94\u7684\u5019\u9009\u70b9\u533a\u57df\u66f4\u6df1\uff0c\u610f\u5473\u7740\u5f53\u524d\u70b9\u53ef\u80fd\u662f\u8fd9\u4e00\u83f1\u5f62\u91cc\u7684\u4efb\u4f55\u70b9\uff1b
\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
multi-view stereo MVS \u5177\u4f53\u505a\u6cd5\u662f \u53ef\u4ee5\u4f7f\u7528 Plane-Sweep \u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5176\u4ed6\u89c6\u89d2\uff0c\u6784\u9020\u4e00\u4e2a\u5173\u4e8e x-y-z \u7684\u4e09\u7ef4\u8868\uff0c\u80fd\u591f\u67e5\u8be2\u5bf9\u4e8e\u53c2\u8003\u56fe\u7247[x][y]
\u5904\u7684\u50cf\u7d20\uff0c\u5982\u679c\u5904\u4e8e\u6df1\u5ea6[z]
\u65f6\u7684\u60c5\u51b5 \u5229\u7528\u4e24\u6b21\u6295\u5f71\uff0c\u5148\u5728\u201cA\u201d\u5b57\u91cc\u76f8\u4f3c\u5230\u8fdc\u5904\uff0c\u7136\u540e\u518d\u659c\u7740\u6295\u5f71\u5230\u6bcf\u4e2a\u89c6\u89d2\u91cc \u6bcf\u4e00\u5c42\u5c42\u626b\u8fc7\u53bb \u5728\u4e0a\u56fe\u6570\u7ec4\u91cc\u627e\u6bcf\u4e00\u4e2a[x][y]
\u91cc\u8868\u73b0\u6700\u597d\u7684[z]
\u4f5c\u4e3a\u90a3\u4e2a\u50cf\u7d20\u7684\u6df1\u5ea6\u3002 \u7136\u800c\u8fd9\u4e2a\u505a\u6cd5\u8fd8\u662f\u4e0d\u592a\u9ad8\u6548\uff0c\u4e00\u4e2a\u66f4\u9ad8\u6548\u7684\u505a\u6cd5\uff0c\u662f PatchMatch\u3002 \u968f\u5373\u521d\u59cb\u5316\uff0c\u603b\u6709\u51e0\u4e2a\u662f\u63a5\u8fd1\u6700\u4f18\u89e3\u7684 \u5bf9\u4e8e\u8fd9\u4e9b\u6bd4\u8f83\u4f18\u7684\u89e3\uff0c\u5b83\u9644\u8fd1\u7684\u50cf\u7d20\u7b54\u6848\u5728\u8fd9\u4e2a\u7b54\u6848\u7684\u9644\u8fd1\u5bfb\u627e\uff08\u4f20\u64ad\uff09\uff0c\u7136\u540e\u518d\u5728\u5c0f\u8303\u56f4\u5185\u8fdb\u4e00\u6b65\u4f18\u5316\uff08\u641c\u7d22\uff09 "},{"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
\u6df1\u5ea6\u8ba1\u7b97 \u6df1\u5ea6 -> 3D\u7f51\u683c\u8868\u9762 \u7eb9\u7406\u586b\u5145 "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-representations","title":"3D representations","text":"\u8865\u5145\u56fe\u7247
\u70b9\u4e91 point cloud \u4f53\u7d20\uff083d\u50cf\u7d20\uff09occupancy signed distance function (SDF) \u5927\u5c0f\u8ddd\u79bb\u8868\u9762\u7684\u8ddd\u79bb\uff0c\u5185\u90e8\u4e3a\u8d1f\uff0c\u5916\u90e8\u4e3a\u6b63 Truncated Signed Distance Function \u622a\u65adSDF\uff0c\u5373\u4ecd\u548c\u5927\u4e8e 1 \u90fd\u8bb0\u4e3a 1\uff0c\u5c0f\u4e8e -1 \u7684\u8bb0\u4e3a -1 \u7f51\u683c mesh\uff08\u6bd4\u8f83\u5e38\u7528\uff09 "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-surface-reconstruction","title":"3D surface reconstruction","text":" \u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a \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
\u53ef\u4ee5\u8ba1\u7b97\u6bcf\u4e00\u4e2a\u4f53\u7d20\u5230\u76f8\u673a\u4e2d\u5fc3\u7684\u8ddd\u79bb \\(d_p\\) \u6839\u636e\u5c0f\u5b54\u6210\u50cf\u89c4\u5219\uff0c\u53ef\u4ee5\u5f97\u5230\u4e0e\u5f53\u524d\u4f53\u7d20\u6240\u5bf9\u5e94\u7684\u50cf\u7d20\uff0c\u8bb0\u5bf9\u5e94\u7684\u50cf\u7d20\u7684\u6df1\u5ea6\u4e3a \\(D_k(u)\\) \u5219\u8be5\u4f53\u7d20\u7684 TSDF \u503c\u622a\u65ad\u524d\u4e3a \\(D_k(u) - d_p\\) \u5728\u591a\u56fe\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e00\u5f20\u56fe\u7684\u7ed3\u679c\u505a\u52a0\u6743\u8ba1\u7b97 \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
\u6df1\u5ea6\u56fe -> \u5e26\u6cd5\u5411\u91cf\u7684\u70b9\u4e91 Oriented points \u90a3\u91cc\u7684\u7bad\u5934\u662f\u8868\u9762\u6cd5\u5411\u91cf\uff08\u6df1\u5ea6\u7684\u68af\u5ea6\uff09 \u7528\u4f18\u5316\u7684\u65b9\u5f0f\u6c42\u89e3 indicator function \uff08\u5927\u6982\u5c31\u662f\u6700\u7ec8\u7ed3\u679c\u7684\u90a3\u4e2a\u7269\u4f53\u7684\u8868\u9762\u53d1\u5411\u91cf\u51fd\u6570\uff09 \u8fd9\u91cc\u6709\u4e00\u4e2a\u70b9\u5c31\u662f\uff0c\u4f53\u7d20\u7684\u66f2\u9762\u662f\u95ed\u5408\u7684\uff0c\u6240\u4ee5\u4f1a\u6709\u5185\u5916\u4e4b\u5206\uff0c\u5185\u90e8\u5b9e\u5fc3\u5916\u90e8\u7a7a\u5fc3\uff0c\u6240\u4ee5 indicator function \u5c31\u662f\u60f3\u540c\u65f6\u8868\u8fbe \u8868\u9762 \u548c \u5185\u5916 \u4e24\u4ef6\u4e8b\u3002 "},{"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
\u4ee5 2D \u4e3a\u4f8b\uff0c\u5982\u679c\u4e00\u4e2a\u300c\u8fb9\u300d\u7684\u4e24\u8fb9\uff0c\u9ed1\u767d\u4e0d\u4e00\u81f4\uff08\u9ed1\u8868\u793a\u5916\u90e8\uff0c\u767d\u8868\u793a\u5185\u90e8\uff09\uff0c\u5219\u8bf4\u660e\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u8fb9\u754c\uff0c\u4e8e\u662f\u6807\u4e00\u4e2a\u70b9\uff0c\u7136\u540e\u5c06\u6240\u6709\u7684\u8fd9\u6837\u7684\u70b9\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u8fde\u63a5\u8d77\u6765\uff0c\u5c31\u5f97\u5230\u7684\u4e86\u8fb9\u754c\u3002 \u5177\u4f53\u6807\u5728\u8fb9\u754c\u7684\u54ea\u4e2a\u4f4d\u7f6e\uff0c\u5982\u679c\u662f SDF \u7684\u8bdd\u53ef\u4ee5\u8ba1\u7b97\u77e5\u9053\uff0c\u5426\u5219\u53ef\u80fd\u53ea\u80fd\u5728\u4e2d\u95f4\u4e86 \u4f46\u662f\u9700\u8981\u6ce8\u610f\u4e00\u4e2a\u683c\u5b50\u5982\u679c\u6709\u591a\u4e2a\u70b9\u7684\u65f6\u5019\u600e\u4e48\u8fde\u7684\u95ee\u9898\uff0c\u6709\u4e00\u4e2a\u8868\u53ef\u4ee5\u67e5\uff0c\u6491\u6b7b\u4e5f\u5c31 2^4=16 \u79cd\u60c5\u51b5
\u5728 3D \u60c5\u51b5\u4e0b\uff0c\u5c31\u662f\u5728\u7acb\u65b9\u4f53\u91cc\u8fde\u63a5\u4e09\u4e2a\u70b9\u5f62\u6210\u4e09\u89d2\u9762\uff0c\u7136\u540e\u4e5f\u6709\u4e00\u4e2a\u8868\u53ef\u4ee5\u67e5\uff0c\u6491\u6b7b\u4e5f\u5c31 2^8=256 \u79cd\u60c5\u51b5\u3002
"},{"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
\u5bf9\u95ee\u9898\u8fdb\u884c\u5b9a\u4e49\uff1b \u6536\u96c6\uff08\u548c\u5904\u7406\uff09\u7528\u6765\u5b66\u4e60\u7684\u6570\u636e\u96c6\uff1b \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 \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 \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
\\(w^Tx+b = 0\\) It's a line in 2D, a plane in 3D or hyperplane ...
"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training","title":"Training","text":"\u5982\u4f55\u627e\u5230\u6700\u4f73\u7684\u53c2\u6570\uff1f
loss function optimization problem \u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u7f3a\u70b9
\u5bb9\u6613\u6536\u5230\u566a\u58f0\u5f71\u54cd \u5bf9\u4e8e classifier \u7684\u95ee\u9898\uff0c\u5f88\u96be\u7528\u201c\u505a\u5dee\u201d\u6765\u63cf\u8ff0\u5f97\u5206\u4e0e\u7c7b\u522b\u7684\u5173\u7cfb\u2014\u2014\u8ba9\u4ed6\u4ece\u4efb\u610f\u6570\u6620\u5c04\u5230\u4e00\u4e2a [0,1]
\uff0csigmoid\uff0c\u53ef\u4ee5\u7406\u89e3\u6210\u201c\u6982\u7387\u201d\u3002i.e. softmax operator: \\(.....\\) \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 =>
\u8868\u8fbe\u80fd\u529b \u2b06\ufe0f \u53c2\u6570 \u2b06\ufe0f \u8bad\u7ec3\u6570\u636e \u2b06\ufe0f \u6210\u672c \u2b06\ufe0f \u4f18\u5316\u95ee\u9898\u6c42\u89e3\u96be\u5ea6 \u2b06\ufe0f \u5168\u8fde\u5c42 Fully connected layer
\u5355\u5c42\u53c2\u6570\u91cf\u5de8\u5927\uff08W \u5927\uff09 "},{"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
\u5c42\u6570\u8d8a\u591a\uff0c\u4e00\u822c\u8d8a\u5927 P69 "},{"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
classification: cross-entropy regression: L2 loss 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":" Caffe \u8001\u4e1c\u897f TF \u5f00\u53d1\u8005\u66f4\u559c\u6b22 PyTorch \u7814\u7a76\u8005\u66f4\u559c\u6b22 "},{"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
\u96be\u8bad\u7ec3\uff0c\u201c\u68af\u5ea6\u6d88\u5931\u201d\uff0c\u5c42\u6570\u592a\u591a\u4ee5\u540e\uff0c\u5230\u540e\u9762\u68af\u5ea6\u5c31\u5f88\u5c0f\u4e86\uff0c\u4e0b\u964d\u4e0d\u4e0b\u53bb\u4e86 \u4f46\u662f\u4e3a\u4ec0\u4e48\u4f1a\u53d8\u5dee\u5462\uff1f \u5982\u4f55\u8bbe\u8ba1\u589e\u52a0\u5c42\u6570\u800c\u81f3\u5c11\u4e0d\u53d8\u5dee\u5462\uff1f ResNet: \\(H(x) = F(x) + x\\) \u6b8b\u5dee\u5b66\u4e60 residual learning "},{"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
\u5206\u7c7b Classification \u8bed\u4e49\u5206\u5272 Semantic segmentation \u5bf9\u8c61\u68c0\u6d4b Object detection \u5b9e\u4f8b\u5206\u5272 Instance segmentation "},{"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
\u8f93\u5165\uff1a\u56fe\u7247 \u8f93\u51fa\uff1a\u6bcf\u4e2a\u50cf\u7d20\u7684\u7c7b\u522b\u6807\u7b7e\uff0c\u4e0d\u9700\u8981\u533a\u5206\u540c\u4e00\u7c7b\u522b\u7684\u4e0d\u540c\u5b9e\u4f8b \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)
Loss function: Per-pixel cross-entropy \u5c40\u9650\u6027\uff1a
Receptive field is linear in number of conv layers Convolution on high resolution is expensive\uff08\u8017\u65f6\uff09 \u6539\u8fdb\uff1a
Downsampling: pooling, strided conv \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
Run object detector on all test images For each category, compute Average Precision (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
Two-stage is generally more accurate \uff08\u6570\u636e\u91cf\u8db3\u591f\u5927\uff09 Single-stage is faster \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
CNN-base descriptor \u597d\u6709\u610f\u601d\uff01 \u63cf\u8ff0\u503c\uff1a
contrastive loss 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
\u5feb\u95e8 \u5149\u5708 ISO \u611f\u5149\u5ea6 \u9ad8\uff1a\u66f4\u4eae\u3001\u66f4\u591a\u566a\u58f0 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
Non-blind image deconvolution, NBID Blind image deconvolution, BID 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
sample-based colorization 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)
\u4e24\u4e2a\u4e00\u8d77\u8bad\u7ec3\uff0cmin-max problem GAN \u5f88\u96be\u6536\u655b\uff0c\u4e0d\u597d\u8c03 adversarial loss "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#more-image-synthesis-tasks","title":"more Image synthesis tasks","text":" image to image translation style transfer text-to-photo image dehazing customized gaming 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:
Textured Mesh (surface-based representations) Light Fields and Lumigraphs \u727a\u7272\u4e86\u4e00\u4e2a\u65b9\u5411\uff0c\u51cf\u5c11\u4e86\u4e00\u4e2a\u7eac\u5ea6 \u53ea\u80fd\u5185\u91c7\u6837 Depth Warping Multi-plane Images (MPI) (volume-based representations) rgba x multi planes Neural Volumes Neural Radiance Fields 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 246 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f
\u8bfe\u7a0b\u4fe1\u606f
\u667a\u4e91\u94fe\u63a5\uff1a\ud83d\udd17 \u6388\u8bfe\uff1a\u5b63\u6c5f\u6c11 \u8bfe\u672c\uff1aOperating System Concepts (10th edition) \u5206\u6570\u6784\u6210
[50%] \u5e73\u65f6\u6210\u7ee9 [5%] HOMEWORK [5%] Quiz / \u70b9\u540d [20%] Lab \u62a5\u544a [20%] Lab \u9a8c\u6536 [6%] Bonus [4%] Lab 7 [2%] \u8bfe\u5802\u56de\u7b54\u95ee\u9898\uff0c0.5/\u6b21 [50%] \u671f\u672b\u6210\u7ee9\uff08\u5141\u8bb8\u643a\u5e26 3 \u5f20 A4\uff0c\u5141\u8bb8\u6253\u5370\uff09 \u7b14\u8bb0\u53c2\u8003
\u672c\u8bfe\u7a0b\u7684\u7b14\u8bb0\u4e3b\u8981\u53c2\u8003\u8fc7\u5982\u4e0b\u8d44\u6599\uff1a
Operating System Concepts (10th edition) 2024 \u64cd\u4f5c\u7cfb\u7edf\u8003\u7814\u590d\u4e60\u6307\u5bfc\uff08\u738b\u9053\uff09 \u54b8\u9c7c\u6684\u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0 \u5c0f\u89d2\u9f99\u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0 hjh \u5b66\u957f\u7684 A4 \u7eb8 list
Unit 0: \u603b\u89c8 | Overview Unit 1: \u8fdb\u7a0b\u7ba1\u7406 | Process Management Unit 2: \u540c\u6b65 | Synchronization Part 1: \u540c\u6b65\u5de5\u5177 | Synchronization Tools Part 2: \u7ecf\u5178\u540c\u6b65\u4f8b\u5b50 | Synchronization Problems Examples Part 3: \u6b7b\u9501 | Deadlocks Unit 3: \u5185\u5b58 | Memory Part 1: \u5185\u5b58\u8bbe\u8ba1 | Memory Design Part 2: \u5185\u5b58\u7ba1\u7406 | Memory Management Unit 4: \u8f93\u5165/\u8f93\u51fa | I/O Unit 5: \u5b58\u50a8 | Storage Unit 6: \u6587\u4ef6\u7cfb\u7edf | File System "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/","title":"Unit 0: \u603b\u89c8 | Overview","text":" \u7ea6 9048 \u4e2a\u5b57 5 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 45 \u5206\u949f
\u5bfc\u8bfb
\u672c\u5355\u5143\u4e3b\u8981\u6709\u4e24\u4e2a\u4efb\u52a1\uff1a
\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 \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":"\u5bfc\u8bfb
\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\u6d89\u53ca\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\u8fdb\u7a0b\u7ba1\u7406\u8fd9\u4e00\u7ae0\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)\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":"\u5bfc\u8bfb
\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 \u5bf9\u79f0\u591a\u5904\u7406(SMP) | Wikipedia\uff1b \u975e\u4e00\u81f4\u5185\u5b58\u8bbf\u95ee(NUMA) | Wikipedia\uff1b \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
A \u9700\u8981\u987a\u5e8f\u4f7f\u7528\u5982\u4e0b\u8d44\u6e90\uff1aCPU: 10s, X: 5s, CPU: 5s, Y: 10s, CPU: 10s B \u9700\u8981\u987a\u5e8f\u4f7f\u7528\u5982\u4e0b\u8d44\u6e90\uff1aX: 10s, CPU: 10s, Y: 5s, CPU: 5s, Y: 10s \u8bf7\u8ba8\u8bba\uff1a
\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 \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
\u84dd/CPU\uff0c\u7eff/X\uff0c\u9ec4/Y\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\u8c03\u5ea6\u95ee\u9898\uff0c\u6240\u4ee5\u5b9e\u9645\u5b9e\u73b0\u4f1a\u590d\u6742\u4e00\u4e9b\u3002\u5177\u4f53\u7684\u5185\u5bb9\u6211\u4eec\u4f1a\u5728\u8fdb\u7a0b\u7ba1\u7406\u8fd9\u4e00\u7ae0\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\u3002\u5b83\u4eec\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\u4e3b\u52a8\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
\u5b9e\u65f6\u7cfb\u7edf(Real-time System)\uff1a\u5728\u7279\u5b9a\u65f6\u95f4\uff08\u53ef\u80fd\u6bd4\u65f6\u95f4\u7247\u8fd8\u5c0f\uff09\u5185\u5b8c\u6210\u7279\u5b9a\u4efb\u52a1\u7684\u7cfb\u7edf\uff0c\u4f8b\u5982\u822a\u7a7a\u822a\u5929\u7cfb\u7edf\u3001\u6838\u53cd\u5e94\u5806\u63a7\u5236\u7cfb\u7edf\u7b49\uff1b \u5206\u5e03\u5f0f\u7cfb\u7edf(Distributed System)\uff1a\u7531\u591a\u53f0\u8ba1\u7b97\u673a\u7ec4\u6210\u7684\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u8ba1\u7b97\u673a\u901a\u8fc7\u901a\u4fe1\u4ea4\u6362\u4fe1\u606f\uff0c\u5171\u540c\u5b8c\u6210\u4e00\u4e2a\u4efb\u52a1\uff0c\u4f8b\u5982\u4e91\u8ba1\u7b97\u3001\u5927\u578b\u7f51\u7ad9\u7b49\uff1b \u591a\u9053\u6280\u672f\u51fa\u73b0\u4e4b\u540e\uff0c\u867d\u7136\u8ba1\u7b97\u673a\u7684\u8868\u73b0\u4e0d\u65ad\u63d0\u5347\uff0c\u4f46\u662f\u7531\u4e8e\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\u4e8e\u662f\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\uff0c\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\u3002\u5728\u8fd9\u4e9b\u65b9\u9762\uff0c\u5b8f\u5185\u6838\u7684\u8868\u73b0\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\u81ea\u8eab\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":"\u5bfc\u8bfb
\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 Difference between TRAP and exceptions | StackOverflow Difference between Interrupt and Exception | GeeksForGeeks \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
\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 \u4e2d\u65ad\u5e76\u4e0d\u662f\u968f\u65f6\u968f\u5730\u90fd\u80fd\u53d1\u751f\u7684\uff0c\u201c\u4ee3\u7406\u4eba\u201d\u5728\u8d70\u94a2\u4e1d\u65f6\u4e0d\u5e94\u5f53\u6682\u505c\u53bb\u5904\u7406\u836f\u54c1\u7f3a\u8d27\u8fd9\u79cd\u76f8\u5bf9\u65e0\u5173\u7d27\u8981\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\u5728 lab1 \u4e2d\uff0c\u6211\u4eec\u4f1a\u6d89\u53ca\u76f8\u5173\u5185\u5bb9\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\uff1bmode 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 ABI | Wiki Difference between API and ABI | StackOverflow \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 \u4f7f\u7528 gcc -static ...
\u6765\u6307\u5b9a\u4f7f\u7528\u9759\u6001\u94fe\u63a5\uff1b \u4f7f\u7528 ldd <file>
\u6765\u67e5\u770b\u6587\u4ef6\u94fe\u63a5\u4e86\u54ea\u4e9b\u5e93\uff1b \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
\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 7267 \u4e2a\u5b57 60 \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
Text section: \u5b58\u50a8\u4ee3\u7801\uff1b Data section: \u5b58\u50a8\u4ee3\u7801\u4e2d\u7684\u5168\u5c40\u53d8\u91cf\u3001\u9759\u6001\u53d8\u91cf\uff1b Heap section: \u5e38\u8bf4\u7684\u201c\u5806\u201d\uff0c\u88ab\u52a8\u6001\u5206\u914d\u7684\u5185\u5b58\uff1b Stack section: \u5e38\u8bf4\u7684\u201c\u6808\u201d\uff0c\u5b58\u50a8\u4e00\u4e9b\u6682\u65f6\u6027\u7684\u6570\u636e\uff0c\u5982\u51fd\u6570\u4f20\u53c2\u3001\u8fd4\u56de\u503c\u3001\u5c40\u90e8\u53d8\u91cf\u7b49\uff1b \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
Process state: \u8fdb\u7a0b\u7684\u72b6\u6001\uff1b Program counter: \u6807\u8bc6\u8be5\u8fdb\u7a0b\u8dd1\u5230\u4e86\u54ea\u91cc\uff0c\u7531\u4e8e\u8fdb\u7a0b\u662f\u52a8\u6001\u7684\uff0c\u6bcf\u4e00\u88ab\u5207\u6362\u90fd\u9700\u8981\u4fdd\u8bc1\u4e0b\u4e00\u6b21\u80fd\u65e0\u7f1d\u8854\u63a5\u4e4b\u524d\u7684\u8fdb\u5ea6\uff0c\u6240\u4ee5\u9700\u8981\u5b58\u50a8\u6bcf\u6b21\u7684\u5de5\u4f5c\u72b6\u6001\uff1b CPU registers: \u4fdd\u5b58\u8fdb\u7a0b\u76f8\u5173\u7684\u5bc4\u5b58\u5668\u4fe1\u606f\uff1b CPU-scheduling information: CPU \u8c03\u5ea6\u53c2\u8003\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u4f18\u5148\u7ea7\u3001\u8c03\u5ea6\u961f\u5217\u7684\u6307\u9488\u3001\u8c03\u5ea6\u53c2\u6570\u7b49\uff1b Memory-management information: \u5305\u62ec\u9875\u8868\u3001\u6bb5\u8868\u7b49\u4fe1\u606f\uff0c\u5177\u4f53\u4e0e\u5b9e\u73b0\u7684\u5185\u5b58\u7cfb\u7edf\u6709\u5173\uff1b Accounting information\uff1a \u4e00\u4e9b\u5173\u4e8e\u8fdb\u7a0b\u7684\u52a8\u6001\u6570\u636e\u7684\u7edf\u8ba1\u548c\u8bb0\u5f55\uff0c\u6bd4\u5982\u603b\u5171\u5df2\u7ecf\u8dd1\u4e86\u591a\u4e45\u3001\u65f6\u95f4\u9650\u5236\u3001\u8fdb\u7a0b\u53f7\u7b49\uff1b I/O status information: \u88ab\u5206\u914d\u7ed9\u8fdb\u7a0b\u7684 I/O \u8bbe\u5907\u5217\u8868\u3001\u6253\u5f00\u7684\u6587\u4ef6\u5217\u8868\u7b49\uff1b \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
new
: \u8fdb\u7a0b\u6b63\u5728\u521b\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u5305\u62ec\u7533\u8bf7 PCB\uff0c\u5206\u914d\u521d\u59cb\u8d44\u6e90\u7b49\uff1b running
: \u8fdb\u7a0b\u6b63\u5728\u8fd0\u884c\uff0c\u5373\u6b63\u5728\u4f7f\u7528 CPU \u8d44\u6e90\uff1b \u6709\u51e0\u4e2a\u6838\u5c31\u6700\u591a\u6709\u51e0\u4e2a\u8fdb\u7a0b\u5904\u4e8e running
\u72b6\u6001\uff1b ready
: \u8fdb\u7a0b\u5df2\u7ecf\u51c6\u5907\u597d\u4e86\uff0c\u53ea\u5dee CPU \u8d44\u6e90\uff0c\u4e00\u65e6\u6709 CPU \u8d44\u6e90\u5f85\u5206\u914d\uff0c\u5c31\u4f1a\u6709\u5c31\u7eea\u6001\u7684\u8fdb\u7a0b\u53d8\u4e3a\u8fd0\u884c\u6001\uff1b \u5982\u679c\u6709\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\uff0c\u5c31\u4e00\u5b9a\u6709\u8fdb\u7a0b\u5904\u4e8e\u8fd0\u884c\u6001\uff1b CPU \u8c03\u5ea6\u5b9e\u9645\u4e0a\u6307\u7684\u5c31\u662f\u82e5\u5e72\u8fdb\u7a0b\u5728\u5c31\u7eea\u6001\u548c\u8fd0\u884c\u6001\u4e4b\u95f4\u7684\u5207\u6362\uff1b waiting
: \u8fdb\u7a0b\u6b63\u5728\u7b49\u5f85\u67d0\u4e2a\u4e8b\u4ef6\u7684\u53d1\u751f\uff0c\u6bd4\u5982\u7b49\u5f85 I/O \u5b8c\u6210\u3001\u7b49\u5f85\u67d0\u4e2a\u4fe1\u53f7\u91cf\u7b49\uff1b \u6b64\u65f6\u5373\u4f7f\u6709\u7a7a\u4f59\u7684 CPU \u8d44\u6e90\uff0c\u8be5\u8fdb\u7a0b\u4e5f\u65e0\u6cd5\u7ee7\u7eed\uff1b \u4e00\u822c\u8fdb\u7a0b\u4ece\u8fd0\u884c\u6001\u8fdb\u5165\u963b\u585e\u6001\u662f\u4e3b\u52a8\u7684\uff0c\u79bb\u5f00\u963b\u585e\u6001\u8fdb\u5165\u5c31\u7eea\u6001\u662f\u88ab\u52a8\u7684\uff1b terminated
: \u8fdb\u7a0b\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u7ec8\u6b62\uff0c\u7ed3\u675f\u8fd0\u884c\uff0c\u9700\u8981\u91ca\u653e\u8d44\u6e90\uff1b \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
\u5173\u4e8e\u5e26 fork
\u7684\u7a0b\u5e8f\u5206\u6790\u662f\u4e00\u4e2a\u6bd4\u8f83\u91cd\u8981\u7684\u70b9\uff0c\u8bf7\u786e\u4fdd\u81ea\u5df1\u80fd\u6bd4\u8f83\u6d41\u7545\u5730\u5206\u6790\u76f8\u5173\u7a0b\u5e8f\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\u548c 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
\u590d\u5236 parent \u8fdb\u7a0b\u7684\u4ee3\u7801\u6570\u636e\uff1b \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\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\uff08child \u5e76\u4e0d\u77e5\u9053 parent \u4f1a\u4e0d\u4f1a\u3001\u4ec0\u4e48\u65f6\u5019\u6765\u56de\u6536\u5b83\uff09\u3002\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\u5e38\u89c1\u7684\u3002\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\u3002\u6b64\u65f6\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u540c\u65f6\u662f\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b(orphan)\uff0c\u5373\u6ca1\u6709 parent \u8fdb\u7a0b\u7684\u8fdb\u7a0b\u3002\u8fd9\u662f\u4e0d\u5408\u7406\u7684\u3002UNIX \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
\u4fe1\u53f7\u91cf(semaphores)\uff1a \u6211\u4eec\u5c06\u5728\u8fdb\u7a0b\u540c\u6b65\u8fd9\u4e00\u7ae0\u4e2d\u91cd\u70b9\u8bb2\u89e3\u4fe1\u53f7\u91cf\uff1b \u5171\u4eab\u5185\u5b58(shared memory)\uff1a \u76f8\u6bd4\u4e0b\u9762\u51e0\u79cd\u66f4\u5feb\uff0c\u9700\u8981\u7528\u5230 system call \u7684\u5730\u65b9\u53ea\u6709\u5efa\u7acb\u5171\u4eab\u5185\u5b58\u7684\u65f6\u5019\uff1b \u6d88\u606f\u4f20\u9012(message passing)\uff1a \u5728\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u66f4\u5bb9\u6613\u5b9e\u73b0\uff0c\u5bf9\u4e8e\u5c11\u91cf\u6570\u636e\u901a\u4fe1\u5f88\u6709\u7528\uff08\u56e0\u4e3a\u4e0d\u9700\u8981\u5904\u7406\u51b2\u7a81\u95ee\u9898\uff09\uff1b \u6587\u4ef6 / \u7ba1\u9053(pipe)\uff1a \u7ba1\u9053\u672c\u8d28\u4e0a\u4e5f\u662f\u4e00\u79cd\u6587\u4ef6\uff0c\u4f46\u4e00\u4e2a\u7ba1\u9053\u53ea\u652f\u6301\u5355\u5411\u4f20\u8f93\uff0c\u5373\u53ea\u80fd A \u5199 B \u8bfb\uff0c\u5982\u679c\u8981\u5b9e\u73b0\u53cc\u5411\u9700\u8981\u4e24\u4e2a\u7ba1\u9053\uff1b 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
\u5728\u4e24\u4e2a\u8fdb\u7a0b\u95f4\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362\uff1b \u5207\u6362\u5230\u7528\u6237\u6001\uff1b \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 lab1 \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
CPU \u4f7f\u7528\u7387(CPU utilization)\uff1a CPU \u4f7f\u7528\u65f6\u95f4 / \u603b\u65f6\u95f4\uff0c\u4ece CPU \u662f\u5426\u8db3\u591f\u5fd9\u788c\u6765\u770b\u786c\u4ef6\u6027\u80fd\u662f\u5426\u5145\u5206\u53d1\u6325\uff1b \u541e\u5410\u91cf(throughput)\uff1a \u5355\u4f4d\u65f6\u95f4\u5185\u5b8c\u6210\u7684\u8fdb\u7a0b\u6570\uff0c\u4ece\u7ed3\u679c\u6765\u770b\u4efb\u52a1\u5b8c\u6210\u662f\u5426\u8db3\u591f\u9ad8\u6548\uff1b \u5468\u8f6c\u65f6\u95f4(turnaround time)\uff1a \u4ece\u8fdb\u7a0b\u5f00\u59cb\u5efa\u7acb\u5230\u8fdb\u7a0b\u5b8c\u6210\u7684\u65f6\u95f4\uff0c\u5373\u5305\u62ec\u7b49\u5f85\u8fdb\u5165\u5185\u5b58\u3001\u5728\u5404\u79cd queue \u4e2d\u7684\u7b49\u5f85\u65f6\u95f4\u3001\u5728 CPU \u4e2d\u7684\u8fd0\u884c\u65f6\u95f4\u3001I/O \u65f6\u95f4\u7b49\uff0c\u901a\u8fc7\u89c2\u5bdf\u6700\u5927\u5468\u8f6c\u65f6\u95f4\uff0c\u80fd\u53cd\u6620\u8c03\u5ea6\u7684\u6548\u7387\u548c\u201c\u516c\u5e73\u6027\u201d\uff1b \u7b49\u5f85\u65f6\u95f4(waiting time)\uff1a \u8fdb\u7a0b\u5728 ready queue \u4e2d\u7b49\u5f85\u7684\u65f6\u95f4\u7684\u603b\u548c\uff0c\u7531\u4e8e\u4efb\u52a1\u6240\u9700\u8981\u7684 CPU \u65f6\u95f4\u3001I/O \u65f6\u95f4\u4e0d\u53d7\u8c03\u5ea6\u7b97\u6cd5\u5f71\u54cd\uff0c\u6240\u4ee5\u629b\u5f00\u8fd9\u4e9b\u53ea\u770b\u5728 ready queue \u4e2d\u7684\u7b49\u5f85\u65f6\u95f4\uff0c\u80fd\u53cd\u6620\u8c03\u5ea6\u7b97\u6cd5\u7684\u6548\u7387\uff1b \u5bb9\u6613\u53d1\u73b0\uff0c\u7b49\u5f85\u65f6\u95f4 = \u5468\u8f6c\u65f6\u95f4 - \u8fd0\u884c\u65f6\u95f4\uff1b \u54cd\u5e94\u65f6\u95f4(response time)\uff1a \u8fdb\u7a0b\u4ece\u53d1\u51fa\u8bf7\u6c42\u5230\u7b2c\u4e00\u6b21\u54cd\u5e94\u7684\u65f6\u95f4\uff0c\u80fd\u53cd\u5e94\u4ea4\u4e92\u5f0f\u7cfb\u7edf\u4e2d\u8c03\u5ea6\u7b97\u6cd5\u7684\u201c\u53ca\u65f6\u6027\u201d\uff1b \u4e0a\u9762\u4e94\u4e2a\u91cc\uff0c\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
\u753b\u51fa\u4e24\u8005\u7684\u7518\u7279\u56fe\uff1a
\u9996\u5148\u770b FCFS\uff0c\u5373\u6309\u7167\u987a\u5e8f\u6267\u884c\uff0c\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\uff0c\u518d\u6267\u884c P1\uff0c\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
Real-time processes System processes Interactive processes 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
\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b > \u5185\u6838\u7ea7\u591a\u7ebf\u7a0b \u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u4e0d\u9700\u8981\u5185\u6838\u652f\u6301\u591a\u7ebf\u7a0b\uff0c\u4e0d\u9700\u8981\u8fdb\u5165\u5185\u6838\u6001\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff0c\u4e5f\u4e0d\u9700\u8981\u5360\u7528\u7ebf\u7a0b ID\uff0c\u56e0\u6b64\u7406\u8bba\u4e0a\u53ef\u4ee5\u6bd4\u5185\u6838\u7ea7\u652f\u6301\u66f4\u591a\u7684\u7ebf\u7a0b\u6570\uff1b \u7531\u4e8e\u5176\u5212\u5206\u662f\u9488\u5bf9\u8fdb\u7a0b\u7684\uff0c\u800c\u4e0d\u540c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u7ebf\u7a0b\u5b9e\u73b0\u6ca1\u6709\u76f4\u63a5\u5173\u7cfb\uff0c\u800c\u4e14\u7531\u4e8e\u662f\u5728\u7528\u6237\u7a7a\u95f4\u5b9e\u73b0\u7b97\u6cd5\uff0c\u6240\u4ee5\u80fd\u591f\u66f4\u5bb9\u6613\u7684\u5bf9\u5355\u4e2a\u8fdb\u7a0b\u5185\u7684\u591a\u4e2a\u7ebf\u7a0b\u7684\u8c03\u5ea6\u7b97\u6cd5\u8fdb\u884c\u81ea\u5b9a\u4e49\uff1b \u7528\u6237\u7ea7\u591a\u7ebf\u7a0b < \u5185\u6838\u7ea7\u591a\u7ebf\u7a0b \u7531\u4e8e\u5bf9\u5185\u6838\u6765\u8bf4\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u4ecd\u7136\u662f\u4e00\u4e2a\u666e\u901a\u7684\u8fdb\u7a0b\uff0c\u6240\u4ee5\u5f53\u7528\u6237\u7ea7\u7684\u7ebf\u7a0b\u51fa\u73b0\u963b\u585e\u65f6\uff0c\u5185\u6838\u4f1a\u8ba4\u4e3a\u6574\u4e2a\u8fdb\u7a0b\u90fd\u88ab\u963b\u585e\uff1b\u5185\u6838\u7ea7\u7ebf\u7a0b\u7531\u4e8e\u662f\u5185\u6838\u5b9e\u73b0\uff0c\u6240\u4ee5\u5355\u7ebf\u7a0b\u7684\u963b\u585e\u5e76\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u8fdb\u7a0b\u963b\u585e\uff1b \u5728\u591a\u6838\u7684\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u6ca1\u6cd5\u5229\u7528\u591a\u6838\u8fdb\u884c\u7ebf\u7a0b\u5e76\u884c\uff1b\u663e\u7136\u5185\u6838\u591a\u7ea7\u7ebf\u7a0b\u662f\u505a\u5f97\u5230\u8fd9\u4e00\u70b9\u7684\uff1b \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) One-to-one model. (b) Many-to-many model. (c) Many-to-one model.
Linux \u7ebf\u7a0b
Where memory will be allocated to \"Uninitialized Static variable\" upon initialization? \u21a9
What process is the parent of the init process in Linux? \u21a9
Linux CreateProcess? \u21a9
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 8261 \u4e2a\u5b57 216 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 44 \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\u90fd\u662f\u81ea\u987e\u81ea\u8dd1\u3002\u5373\uff0c\u662f\u5f02\u6b65\u7684\u3002\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\u4e00\u79cd\u201c\u540c\u6b65\u201d\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\u3002\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\u5fc3\u5316\u7684\u8c03\u63a7\u673a\u5236\uff0c\u800c\u66f4\u50cf\u662f\u4e00\u79cd\u201c\u534f\u8bae\u201d\uff1a\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
Race Condition | Wikipedia \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\u3002\u6362\u8a00\u4e4b\uff0c\u8981\u60f3\u4fee\u6539 mem[x]
\uff0c\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u6b65\u9aa4\uff1a
reg
<- mem[x]
\uff1b reg
<- update(reg
)\uff1b 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\u6211\u4eec\u5bf9\u7ade\u6001\u6761\u4ef6\u7684\u770b\u6cd5\u5e76\u4e0d\u5e94\u8be5\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\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
\u6211\u4eec\u771f\u6b63\u9700\u8981\u5173\u6ce8\u7684\u91cd\u70b9\u5e94\u8be5\u662f\u5982\u4f55\u907f\u514d\u8fd9\u79cd\u7ade\u4e89\u7684\u51fa\u73b0\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
\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 \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
\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
\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 \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 \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
\u5934\u8111\u98ce\u66b4
\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
\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 \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 \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
"},{"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 | Wikipedia 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\u8bf4\u660e\uff0centry section \u6ca1\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u8fd9\u91cc\u7684 TURN
\u662f\u6211\u4eec\u6545\u610f\u653e\u5728\u8fd9\u91cc\u7684\u3002
READY
\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\u5728\u7b2c 6 \u884c\u53ea\u5bf9 TURN
\u8fdb\u884c\u76f4\u63a5\u5199\u7684\u64cd\u4f5c\uff0c\u4f46\u662f P1 \u548c P2 \u8c01\u540e\u8dd1\u5b8c\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\u72ec\u7279\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
\\(P_0\\) \u60f3\u5750\u4e0b\uff0c\\(P_1\\) \u4e5f\u60f3\u5750\u4e0b\uff08\u5426\u5219\u5c31\u6ca1\u6709\u51b2\u7a81\uff0c\u53ef\u4ee5\u76f4\u63a5\u5750\u4e0b\u4e86\uff09\uff1b \\(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
READY[0]
= READY[1]
= true
\uff1b 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
\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u60f3\u8981\u8fdb\u5165 critical section\uff0c\u5373 READY[i]
\u548c READY[j]
\u90fd\u4e3a true
\uff1b TURN
\u7684\u503c\u4e0d\u518d\u4f1a\u88ab\u66f4\u6539\uff1b \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\uff0ci \u548c j \u53ea\u6709\u4e00\u4e2a\u80fd\u8fdb\u5165 critical section\uff1b\u53e6\u5916\u4e00\u4e2a\u53ea\u6709\u5728\u5148\u8fdb\u53bb\u7684\u90a3\u4e2a\u91ca\u653e\u8d44\u6e90\u4e86\u4ee5\u540e\u624d\u80fd\u8fdb\u53bb\uff0c\u6240\u4ee5\u6ee1\u8db3\u4e92\u65a5\u7684\u6761\u4ef6\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\u679c\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
\u4e00\u5f00\u59cb\u51b2\u7a81\u5c31\u4e0d\u5b58\u5728\uff1b 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
process j \u8fd8\u6ca1\u8fd0\u884c\u7b2c 6 \u884c\uff1b 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
process j \u6267\u884c\u7b2c 6 \u884c\u7684\u65f6\u95f4\uff1b 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\u4e0a\u8ff0\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
\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 \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
This Is Why They Call It a Weakly-Ordered CPU \u2b50\ufe0f Weak vs. Strong Memory Models \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 \u24f5 \u6211\u4eec\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u8fd0\u884c\u901f\u5ea6\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u24f6 \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 = (j + 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\u24f5 \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\u24f6 \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
target
\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u5730\u5740\uff1b expected
\u9884\u671f\u4e2d\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u65e7\u503c\uff1b 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
\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 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 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
The Critical Section Problem \u21a9
\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
Mutex access and system call | Stack Overflow \u21a9
\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 1570 \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
[READ] \u4ece\u6570\u636e\u5e93\u4e2d\u68c0\u7d22\u3001\u8bfb\u53d6\u6570\u636e\uff1b \u6570\u636e\u7ecf\u8fc7\u4e1a\u52a1\u903b\u8f91\u7684\u5904\u7406\uff0c\u5f97\u5230\u65b0\u503c\uff1b [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
reader \u548c writer \u7684\u51b2\u7a81\uff1b writer \u548c writer \u7684\u51b2\u7a81\uff1b \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 codewriter() {\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\u4e0d\u662f\u67d0\u4e2a reader\uff0c\u90a3\u4e48\u5b9e\u9645\u4e0a\u5b83\u624d\u662f\u7b2c\u4e00\u4e2a reader\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u83b7\u53d6 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\u91ca\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 codereader() {\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
read_count++
\uff1b read_count--
\uff1b 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
\u601d\u8003\uff1b \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
\u5141\u8bb8\u6700\u591a 4 \u4f4d\u54f2\u5b66\u5bb6\u540c\u65f6\u83b7\u53d6\u7b77\u5b50\uff1b \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 \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":" TODO: \u4e0d\u662f\u5f88\u91cd\u8981 "},{"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
\u7533\u8bf7\u8d44\u6e90\uff1b \u4f7f\u7528\u8d44\u6e90\uff1b \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
\u5f53\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u4e0d\u5b58\u5728\u73af\u65f6\uff0c\u8bf4\u660e\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\u72b6\u6001\uff1b \u5f53\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u5b58\u5728\u73af\u65f6\uff0c\u7cfb\u7edf\u53ef\u80fd\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\uff0c\u4e5f\u53ef\u80fd\u4e0d\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\uff1b \u7279\u4f8b\uff1a\u5982\u679c\u4e0e\u73af\u76f8\u5173\u7684\u8282\u70b9\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u65f6\u5019\uff0c\u7cfb\u7edf\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\uff1b \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
\u8fdb\u7a0b/\u7ebf\u7a0b\u7533\u8bf7\u67d0\u4e2a\u8d44\u6e90\u65f6\uff0c\u5728\u56fe\u4e2d\u6dfb\u52a0\u4e00\u6761\u5bf9\u5e94\u7684 request edge\uff1b \u5f53\u8d44\u6e90\u7d22\u53d6\u6210\u529f\u65f6\uff0c\u8fd9\u6761 request edge \u88ab\u66ff\u6362\u4e3a assignment edge\uff1b \u5f53\u8fdb\u7a0b\u91ca\u653e\u8fd9\u4e2a\u8d44\u6e90\u65f6\uff0c\u5219\u9700\u8981\u5c06\u8be5 assignment edge \u6d88\u9664\uff1b \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
\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 \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 \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 \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
\u4e0d\u505a\u989d\u5916\u5904\u7406\uff0c\u8981\u6c42\u7a0b\u5e8f\u5458\u4fdd\u8bc1\u903b\u8f91\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b \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 \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 \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
\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 \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 \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 \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
\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 \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 \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 \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
Available[m]
: number of available resources of each type. Max[n][m]
: maximum demand of each thread. Allocation[n][m]
: number of resources of each type currently allocated to each thread. Need[n][m]
: remaining resource need of each thread. \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
\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 \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 \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
\u7528 Request[n][m]
\u6765\u7ef4\u62a4\u8fdb\u7a0b/\u7ebf\u7a0b\u60f3\u8981\u8bf7\u6c42\u7684\u8d44\u6e90\u7684\u6570\u91cf\uff1b \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 \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 \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 \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
\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 \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 \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 What's the difference between deadlock and livelock? \u21a9
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
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 9177 \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
\u901a\u5e38\u6765\u8bf4\uff0c\u5728 compile time\uff0ccompiler \u4f1a\u5c06\u4ee3\u7801\u4e2d\u7684 symbol \u8f6c\u4e3a relocatable addresses\uff1b\u800c\u5982\u679c\u5728 compile time \u5c31\u77e5\u9053\u4e86\u8fdb\u7a0b\u6700\u7ec8\u4f1a\u88ab\u5b89\u7f6e\u5728\u4f55\u5904\uff0c\u90a3\u4e48\u5728 compile time \u5c31\u5c06 symbol \u8f6c\u4e3a absolute addresses \u4e5f\u662f\u53ef\u80fd\u7684\uff0c\u53ea\u4e0d\u8fc7\u5982\u679c\u6b64\u65f6\u8d77\u59cb\u5730\u5740\u53d1\u751f\u6539\u53d8\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u3002 \u800c\u4e00\u822c\u5728 load time\uff0crelocatable addresses \u4f1a\u8f6c\u4e3a absolute addresses\uff0c\u5f53\u8fdb\u7a0b\u8d77\u59cb\u5730\u5740\u53d1\u751f\u6539\u53d8\u65f6\uff0c\u6211\u4eec\u53ea\u9700\u8981\u91cd\u65b0\u88c5\u8f7d\u5373\u53ef\u3002 \u5982\u679c\u8fdb\u7a0b\u5728 execution time \u65f6\uff0c\u5141\u8bb8\u88ab\u79fb\u52a8\uff0c\u90a3\u4e48\u53ef\u80fd\u4ece relocatable addresses \u8f6c\u4e3a absolute addresses \u8fd9\u4e00\u6b65\u5c31\u9700\u8981\u5ef6\u8fdf\u5230 execution time \u6765\u6267\u884c\u3002\u7edd\u5927\u591a\u6570\u64cd\u4f5c\u7cfb\u7edf\u90fd\u4f7f\u7528\u8fd9\u79cd\u65b9\u6848\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\u4e0e\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
\u53c2\u8003\u9605\u8bfb\uff1aWhy does memory necessarily have to be contiguous? If it weren't, wouldn't this solve the issue of memory fragmentation? \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
First Fit Best Fit Worst Fit \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 \u8003\u8651\u6570\u5b66\u4e0a\u5982\u4f55\u5206\u7c7b\u201c\u51fd\u6570\u6620\u5c04\u201d\uff1b \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
page \u8868\u793a\u865a\u62df\u5185\u5b58\u4e2d\u7684\u5b8c\u6574\u4e00\u5757\uff1b 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
\u4f5c\u4e3a\u7f29\u5199\u7684 page \u6307\u4ee3 virtual page\uff0c\u5373\u865a\u62df\u5185\u5b58\u4e2d\u7684\u4e00\u5757\uff1b \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
page \u7684\u672c\u8d28\u662f\u201c\u6570\u636e\u4fe1\u606f\u201d\uff1b physical page \u662f page \u5728\u7269\u7406\u5185\u5b58\u4e0a\u7684\u5b9e\u9645\u5b58\u50a8\u5f62\u5f0f\uff1b 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
"},{"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\u3002\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} \\] \u5982\u679c\u9898\u4e2d\u7ed9\u4e86 TLB access time\uff0c\u5219\u9700\u8981\u5c06\u8fd9\u4e2a\u4e5f\u52a0\u4e0a\u53bb\uff0c\u56e0\u4e3a\u65e0\u8bba hit \u8fd8\u662f miss \u90fd\u9700\u8981\u8bbf\u95ee TLB\u3002
\\[ \\begin{aligned} &\\text{effective memory-access time} \\\\ &= (2 - p_{\\text{hit}})t + \\varepsilon_\\text{TLB cache access} \\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 Hash function | wikipedia \u54c8\u5e0c | \u9e64\u7fd4\u4e07\u91cc\u7684\u7b14\u8bb0\u672c Hashing | sakuratsuyu's Notes \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
Translation lookaside buffer | Wikipedia \u21a9
Cache replacement policies | Wikipedia \u21a9
\u51fa\u81ea Buttered cat paradox | Wikipedia\uff0c\u6211\u5728\u8fd9\u91cc\u8868\u793a\u6b7b\u5faa\u73af\u3002\u00a0\u21a9\u21a9
how does an inverted page table deal with multiple process accessing the same frame | Stack Overflow \u21a9
What is the difference between executable and relocatable in elf format? | Stack Overflow \u21a9
\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
Shared Memory \"Segment\" in Operating System | Stack Overflow \u21a9
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 7912 \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
\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 \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 \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
\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 \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
\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 \u5982\u679c\u662f\u60c5\u51b5 2.\uff0c\u5219\u7ee7\u7eed\u5982\u4e0b\u64cd\u4f5c\u4ee5\u5c06\u5176 page in\uff1b \u5982\u679c\u662f\u60c5\u51b5 3.\uff0c\u5219\u7ec8\u6b62\u8fdb\u7a0b\uff1b \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 \u5f00\u59cb\u4ece\u540e\u5907\u5b58\u50a8\u8bfb\u53d6\u5185\u5bb9\uff0c\u5e76\u5199\u5165 frame\uff1b \u5b8c\u6210\u8bfb\u5199\u540e\uff0c\u66f4\u65b0\u5185\u90e8\u8868\u548c\u9875\u8868\u7b49\u5143\u4fe1\u606f\uff1b \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
\u4ea7\u751f\u5f02\u5e38\u540e\uff0c\u8fdb\u884c\u4e00\u6b21 context switch \u540e\u8fdb\u5165\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\uff1b \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 \u53d1\u8d77\u540e\u5907\u5b58\u50a8 -> \u5185\u5b58\u7684 I/O \u8bf7\u6c42\uff1b \uff08\u7b49\u5f85\u8fc7\u7a0b\u4e2d CPU \u88ab\u8c03\u5ea6\uff09\uff1b 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 \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
\u5206\u914d\u7b56\u7565\uff1a\u521d\u59cb\u5316\u65f6\uff0c\u5982\u4f55\u5206\u914d\u8fdb\u7a0b\u6240\u9700\u8981\u7684 frame\uff1f \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
\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 \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
\u5229\u7528\u7f6e\u6362\u7b97\u6cd5(replacement algorithm)\u51b3\u5b9a\u54ea\u4e2a frame \u662f victim frame\uff1b \u5982\u679c\u6709\u5fc5\u8981\uff08dirty\uff09\uff0cvictim frame -> \u540e\u5907\u5b58\u50a8\uff1b \u66f4\u65b0\u76f8\u5173\u5143\u4fe1\u606f\uff1b \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
\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 \u5f53\u4e00\u4e2a frame \u88ab\u4f7f\u7528\u7684\u65f6\u5019\u5c06\u8ba1\u6570\u5668\u5f52\u96f6\uff1b \u9700\u8981\u8003\u8651\u6bcf\u4e2a frame \u7684\u8ba1\u6570\u5668\u90fd\u9700\u8981\u88ab\u5b9a\u671f\u66f4\u65b0\uff1b \u9700\u8981\u8003\u8651\u8ba1\u6570\u5668\u53ef\u80fd\u6ea2\u51fa\uff1b \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 \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 \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
LRU \u5bf9\u4e8e optimal \u7684\u62df\u5408\u662f\u6bd4\u8f83\u597d\u7684\uff1b LRU \u7b97\u6cd5\u4e0d\u4f1a\u51fa\u73b0 Belady's anomaly\uff1b \u7f3a\u9677
\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 \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
\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 \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\u4e00\u6574\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
\\((0, 0)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4e5f\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b \\((0, 1)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4f46\u88ab\u4fee\u6539\u8fc7\uff1b \\((1, 0)\\)\uff1a\u88ab\u7528\u8fc7\uff0c\u4f46\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b \\((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
Least frequently used(LFU) \u9009\u62e9 counter \u6700\u5c0f\u7684 frame \u4f5c\u4e3a victim frame\uff1b Most frequently used(MFU) \u9009\u62e9 counter \u6700\u5927\u7684 frame \u4f5c\u4e3a victim frame\uff1b \u8fd9\u4e2a\u505a\u6cd5\u57fa\u4e8e\u300ccounter \u5c0f\u7684 frame \u53ef\u80fd\u624d\u521a\u521a\u88ab load \u8fdb\u6765\u300d\u8fd9\u4e2a\u5047\u8bbe\uff1b \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
\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 \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 \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
Linux OOM (Out-of-memory) Killer | Medium \u21a9
Enhanced Second-Chance Algorithm \u21a9
"},{"location":"cour_note/D3QD_OperatingSystem/Unit4/","title":"Unit 4: \u8f93\u5165/\u8f93\u51fa | I/O","text":" \u7ea6 1321 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \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/Unit4/#io-\u6982\u8ff0","title":"I/O \u6982\u8ff0","text":"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
\u5728 Linux \u4e2d\uff0c\u53d7 \u201ceverything is a file\u201d \u601d\u60f3\u7684\u6307\u5bfc\uff0cI/O \u8bbe\u5907\u4e5f\u88ab\u770b\u4f5c\u4e00\u4e2a\u7279\u6b8a\u7684\u6587\u4ef6\u3002
concepts
\u603b\u7ebf(bus)\uff1a\u8fde\u63a5\u5404\u4e2a\u786c\u4ef6\u7ec4\u6210\u7684\u201c\u62bd\u8c61\u201d\u5185\u90e8\u901a\u4fe1\u7ebf\u8def\uff0c\u66f4\u4fa7\u91cd\u4e8e\u5982\u4f55\u89c4\u8303\u5316\u5730\u4f20\u8f93\u6570\u636e\uff0c\u662f\u786c\u4ef6\u4e0e\u534f\u8bae\u7684\u7edf\u4e001\uff1b \u7aef\u53e3(port)\uff1a\u8bbe\u5907\u4e0e\u603b\u7ebf\u7684\u8fde\u63a5\u70b9\uff1b \u63a7\u5236\u5668(controller)\uff1a\u63a7\u5236\u8bbe\u5907\u7684\u786c\u4ef6\u7ec4\u6210\uff1b \u96c6\u6210\u5728\u8bbe\u5907\u4e0a\u6216\u5355\u72ec\u5728\u7535\u8def\u677f\u4e0a\uff1b \u901a\u5e38\u5305\u62ec\u5904\u7406\u5668\u3001\u79c1\u6709\u5185\u5b58\u3001\u5fae\u4ee3\u7801\uff08\u5c0f\u91cf\u4ee3\u7801\uff09\u3001\u603b\u7ebf\u63a7\u5236\u5668\u7b49\uff1b "},{"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
\u78c1\u76d8\u5c31\u662f\u5178\u578b\u7684\uff0c\u901a\u5e38\u4f7f\u7528 DMA \u6765\u5b9e\u73b0 I/O \u7684\u8bbe\u5907\u3002
"},{"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 ioctl
Wiki\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
\u6570\u636e\u4f20\u8f93\u6a21\u5f0f(data transfer mode)\uff1a \u9010\u4e2a\u5b57\u8282\u4f20\u8f93\uff0c\u5982 terminal\uff1b \u4ee5\u5757\u4e3a\u5355\u4f4d\u4f20\u8f93\uff0c\u5982 disk\uff1b \u8bbf\u95ee\u65b9\u6cd5(access method)\uff1a \u9700\u8981\u987a\u5e8f\u8bbf\u95ee\uff0c\u5982 modemWiki\uff1b \u53ef\u4ee5\u968f\u673a\u8bbf\u95ee\uff0c\u5982 CD-ROM\uff1b \u4f20\u8f93\u65b9\u6cd5(transfer method)\uff1a \u540c\u6b65\u7684\uff0c\u9700\u8981\u6309\u9884\u8ba1\u7684\u54cd\u5e94\u65f6\u95f4\u8fdb\u884c\u4f20\u8f93\u5e76\u548c\u7cfb\u7edf\u7684\u5176\u4ed6\u65b9\u9762\u76f8\u534f\u8c03\uff0c\u5982 keyboard\uff1b \u963b\u585e\u5f0f\uff1a\u4e00\u76f4\u7b49\u5f85\u76f4\u5230 I/O \u5b8c\u6210\uff1b \u975e\u963b\u585e\u5f0f\uff1a\u8fd4\u56de\u5c3d\u53ef\u80fd\u591a\u7684\u6570\u636e\uff0c\u4e0d\u7ba1\u662f\u5426\u5b8c\u6210\uff1b \u5f02\u6b65\u7684\uff0c\u54cd\u5e94\u65f6\u95f4\u4e0d\u9700\u8981\u89c4\u5219\u6216\u8005\u53ef\u9884\u6d4b\uff0c\u4e0d\u9700\u8981\u4e0e\u5176\u4ed6\u8ba1\u7b97\u673a\u4e8b\u4ef6\u534f\u8c03\uff0c\u5982\u7f51\u7edc I/O\uff1b \u5171\u4eab(sharing)\uff1a \u53ef\u5171\u4eab\uff1a\u53ef\u4ee5\u88ab\u591a\u4e2a\u8fdb\u7a0b\u6216\u7ebf\u7a0b\u5e76\u53d1\u4f7f\u7528\uff0c\u5982 keyboard\uff1b \u72ec\u5360\u7684\uff1a\u4e0d\u80fd\u88ab\u5171\u4eab\uff0c\u5982 tape\uff1b \u8bbe\u5907\u901f\u5ea6(device speed) I/O \u65b9\u5411(I/O direction)\uff1a R-
\uff0c\u5982 CD-ROM\uff1b -W
\uff0c\u5982 graphics controllerWiki\uff1b RW
\u5982 disk\uff1b \u4fee\u6539\u81ea xyx \u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0\u3002
Bus (computing) | Wikipedia \u21a9
"},{"location":"cour_note/D3QD_OperatingSystem/Unit5/","title":"Unit 5: \u5b58\u50a8 | Storage","text":" \u7ea6 3547 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 18 \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
\u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u67f1\u9762\uff1b \u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u78c1\u9053\uff1b \u78c1\u76d8\u65cb\u8f6c\u5230\u6247\u533a\u4f4d\u4e8e\u78c1\u5934\u4e0b\u65b9\uff1b \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
\u5b9a\u4f4d\u65f6\u95f4(positioning time / random-access time)\uff1a \u5bfb\u9053\u65f6\u95f4(seek time)\uff1a\u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u67f1\u9762\u7684\u65f6\u95f4\uff1b \u65cb\u8f6c\u65f6\u5ef6(rotational latency)\uff1a\u76ee\u6807\u6247\u533a\u65cb\u8f6c\u5230\u78c1\u5934\u4e0b\u65b9\u7684\u65f6\u95f4\uff1b \u53d6\u51b3\u4e8e\u78c1\u76d8\u7684\u8f6c\u901f\uff0c\u4e00\u822c\u4ee5 round per minute(rpm) \u8868\u793a\uff0c\u5bb9\u6613\u5f97\u5230\uff0c\u5e73\u5747\u65cb\u8f6c\u65f6\u5ef6\u4e3a \\(\\frac{1}{2} \\cdot \\frac{1}{rpm} \\cdot 60\\) \u79d2\uff1b \u4f20\u8f93\u65f6\u95f4(transfer time)\uff1a\u6570\u636e\u5728 disk \u548c\u3000memory \u4e4b\u95f4\u4f20\u8f93\u7684\u65f6\u95f4\uff1b \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
\u5f00\u9500\u7684\u5927\u5934\u662f access time\uff1b \u8bf7\u6c42\u6d89\u53ca\u7684\u5185\u5b58\u8ddd\u79bb\u8d8a\u8fdc\uff0c\u5177\u4f53\u7684 access time \u8d8a\u5927\uff1b \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)Wiki\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
\u4f4e\u5e73\u5747\u54cd\u5e94\u65f6\u95f4\uff1b \u9ad8\u541e\u5410\u91cf\uff1b Disadvantages
\u54cd\u5e94\u65f6\u95f4\u65b9\u5dee\u8f83\u5927\uff1b \u5b58\u5728\u9965\u997f\u95ee\u9898\uff08\u4e0a\u9762\u90a3\u4e2a\u95ee\u9898\u7684\u6781\u7aef\u60c5\u51b5\uff09\uff1b \u8ba1\u7b97 seek time \u9700\u8981\u989d\u5916\u5f00\u9500\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#scan--look","title":"SCAN & LOOK","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
\u9ad8\u541e\u5410\u91cf\uff1b \u54cd\u5e94\u65f6\u95f4\u65b9\u5dee\u4f4e\uff08\u66f4\u5747\u5300\u5730\u54cd\u5e94\uff09\uff1b \u5e73\u5747\u54cd\u5e94\u65f6\u95f4\u4f4e\uff1b Disadvantages
\u7531\u4e8e\u79fb\u52a8\u5355\u5411\uff0c\u6240\u4ee5\u5982\u679c\u8bf7\u6c42\u53d1\u751f\u5728\u78c1\u5934\u521a\u521a\u7ecf\u8fc7\u7684\u5730\u65b9\uff0c\u90a3\u4e48\u53ef\u80fd\u4f1a\u9700\u8981\u7b49\u5f85\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u54cd\u5e94\uff1b \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 LOOK \u7b97\u6cd5\u3002\u663e\u800c\u6613\u89c1\u7684\uff0cLOOK \u7b97\u6cd5\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 SCAN\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#c-scan--c-look","title":"C-SCAN & C-LOOK","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
C-SCAN \u76f8\u6bd4 SCAN \u6709\u66f4\u5747\u5300\u7684\u7b49\u5f85\u65f6\u95f4\uff1b \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-LOOK \u7b97\u6cd5\u3002\u540c\u6837\uff0cC-LOOK \u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 C-SCAN\u3002
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u5047\u8bbe\u8bbe\u5907 LBA \u4ece 0 \u5230 4999\uff0c\u73b0\u5728\u78c1\u5934\u4f4d\u4e8e 143
\u3002\u6b64\u65f6\uff0c\u63a5\u4e0b\u6765\u5f85\u89e3\u51b3\u8bf7\u6c42\u6309\u7167\u5148\u6765\u540e\u5230\u7684\u987a\u5e8f\u6392\u5217\u4e3a\uff1a86
, 1470
, 913
, 1774
, 948
, 1509
, 1022
, 1750
, 130
\uff0c\u5e76\u5047\u8bbe\u4e4b\u540e\u4e0d\u4f1a\u518d\u6709\u65b0\u7684\u8bf7\u6c42\u3002
\u5982\u679c\u78c1\u5934\u4ece LBA = x \u7684\u5730\u65b9\u79fb\u52a8\u5230 LBA = y \u7684\u5730\u65b9\u9700\u8981\u7ecf\u8fc7\u7684\u8ddd\u79bb\u4e3a |x - y|\uff0c\u8bf7\u95ee\u91c7\u7528\u5982\u4e0b\u8fd9\u4e9b\u7b56\u7565\uff0c\u78c1\u5934\u7684 seek distance \u5206\u522b\u4e3a\u591a\u5c11\uff1f
FCFS SSTF SCAN\uff08\u5148\u5411\u53f3\uff09 LOOK\uff08\u5148\u5411\u53f3\uff09 C-SCAN\uff08\u5411\u53f3\uff09 C-LOOK\uff08\u5411\u53f3\uff09 \u63d0\u793a\uff1a\u4ece\u8ba1\u7b97\u4e0a\u6765\u8bb2\u6bd4\u8f83\u7e41\u7410\u7684\u5c31\u53ea\u6709\u7b2c\u4e00\u4e2a\uff0c\u540e\u9762\u7684\u90fd\u6709\u6bd4\u8f83\u5bb9\u6613\u7684\u7b97\u6cd5\u3002
FCFS\uff1a
\u6ca1\u4ec0\u4e48\u597d\u8bf4\u7684\uff0c\u8001\u8001\u5b9e\u5b9e\u4e00\u4e2a\u4e00\u4e2a\u7b97\u8fc7\u6765\u5427\uff0c\u7b54\u6848\u662f 7081\u3002
SSTF\uff1a
\u9700\u8981\u5bfb\u627e\u6700\u8fd1\u7684\uff0c\u4f46\u662f\u4e71\u5e8f\u6765\u770b\u5f88\u96be\u53d7\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5148\u6392\u5e8f\u4e00\u4e0b\uff0c\u5f97\u5230\uff1a
86
, 130
, 913
, 948
, 1022
, 1470
, 1509
, 1750
, 1774
\u800c\u6211\u4eec\u5f53\u524d\u7684\u4f4d\u7f6e\u662f 143
\uff0c\u6240\u4ee5\u6700\u8fd1\u7684\u5c31\u662f 130
\uff0c\u56e0\u6b64\u8ba1\u5165 143 - 130
\uff1b\u7136\u540e\u5c31\u662f 86
\uff0c\u8ba1\u5165 130 - 86
\uff1b\u63a5\u4e0b\u6765\u6211\u4eec\u53d1\u73b0\u5de6\u4fa7\u90fd\u6ca1\u6570\u5b57\u4e86\uff0c\u53f3\u4fa7\u662f\u5355\u5411\u7684\uff0c\u6240\u4ee5\u76f4\u63a5\u52a0\u4e0a\u4e00\u4e2a 1774
- 86
\u5c31\u597d\u4e86\u3002\u6700\u7ec8\u7ed3\u679c\u662f 1745
\u3002
SCAN\uff1a
\u7531\u4e8e\u8fd9\u91cc\u7684\u4e1c\u897f\u90fd\u662f\u4e00\u6b21\u6027\u7ed9\u51fa\u6765\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u9700\u8981\u5411\u53f3\u626b\u5230\u5e95\uff0c\u7136\u540e\u626b\u56de\u6765\u5230 86
\u5373\u53ef\u3002
\u6240\u4ee5\u7b54\u6848\u662f 4999
- 143
+ 4999
- 86
= 9769
\u3002
LOOK\uff1a
\u6211\u4eec\u5f88\u5bb9\u6613\u53d1\u73b0\uff0c\u6211\u4eec\u9700\u8981\u5904\u7406\u7684\u660e\u660e\u6700\u5927\u624d 1774
\uff0c\u4f46\u662f\u5374\u5f97\u8dd1\u5230 4999
\uff0c\u6240\u4ee5\u4f7f\u7528 LOOK \u7684\u8bdd\u6211\u4eec\u5c31\u53ef\u4ee5\u7701\u5f88\u591a\u8ddd\u79bb\u3002\u53ea\u9700\u8981\u626b\u5230 1774
\u7136\u540e\u518d\u626b\u56de\u5230 130
\u5373\u53ef\u3002
\u6240\u4ee5\u7b54\u6848\u662f 1774
- 143
+ 1774
- 86
= 3319
\u3002
C-SCAN\uff1a
\u7c7b\u4f3c SCAN\uff0c\u5411\u53f3\u626b\u5230\u5e95\uff0c\u7136\u540e\u4ece\u5de6\u626b\u5230 130
\uff08\u56e0\u4e3a\u8fd4\u7a0b\u4e0d\u4f1a\u5904\u7406\uff0c\u6240\u4ee5\u5904\u7406\u7684\u987a\u5e8f\u662f\u5148 86
\u518d 130
\uff09\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u867d\u7136 LOOK \u53ea\u5728\u5411\u53f3\u626b\u7684\u65f6\u5019\u505a\u5904\u7406\uff0c\u4f46\u662f\u8fd4\u7a0b\u4e5f\u9700\u8981\u8ba1\u5165 seek distance\uff0c\u6bd5\u7adf arm \u4e0d\u53ef\u80fd\u662f\u95ea\u73b0\u56de 0
\u3002
\u6240\u4ee5\u7b54\u6848\u662f 4999
- 143
+ 4999
+ 130
= 9985
\u3002
C-LOOK\uff1a
\u7c7b\u4f3c LOOK\uff0c\u5411\u53f3\u626b\u5230 1774
\uff0c\u7136\u540e\u4ece\u5de6\u626b\u5230 130
\uff0c\u540c\u6837\uff0c\u4e0d\u80fd\u5fd8\u8bb0\u8ba1\u5165\u8fd4\u7a0b\u7684 seek distance\u3002
\u6240\u4ee5\u7b54\u6848\u662f 1774
- 143
+ 1774
- 86
+ 130
- 86
= 3363
\uff0c\u7136\u540e\u4f60\u4f1a\u53d1\u73b0\uff0c\u753b\u6a2a\u7ebf\u7684\u90e8\u5206\u5c31\u662f LOOK \u7684\u8ba1\u7b97\u65f6\u95f4\uff0c\u800c 130
- 86
\u5c31\u53cd\u5e94\u4e86 C-XXXX \u7b97\u6cd5\u8fd4\u7a0b\u4e0d\u5904\u7406\u7684\u7279\u70b9\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 LOOK \u6216\u8005 C-LOOK\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
\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 \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 \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
\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 \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 \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\uff08\u4e0d\u9700\u8981\u518d\u7ecf\u8fc7\u7cfb\u7edf\u8c03\u7528\uff09\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
Volume (computing) | Wikipedia \u21a9
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/","title":"Unit 6: \u6587\u4ef6\u7cfb\u7edf | File System","text":" \u7ea6 8843 \u4e2a\u5b57 47 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 45 \u5206\u949f
\u5173\u4e8e FCB
\u4e66\u672c\u4e0a\u5e76\u6ca1\u6709\u5f3a\u8c03 FCB \u7ef4\u62a4\u7684\u662f\u6253\u5f00\u7684\u6587\u4ef6\u7684\u4fe1\u606f\uff08\u751a\u81f3\u6697\u6233\u6233\u5730\u5728\u5426\u5b9a\u8fd9\u53e5\u8bdd\uff09\uff0c\u4f46\u662f\u505a\u9898\u7684\u65f6\u5019\u53ef\u80fd\u4f1a\u5f3a\u8c03\u8fd9\u4e00\u70b9\u3002\u5173\u4e8e\u8fd9\u4e00\u70b9\u6211\u8fd8\u9700\u8981\u505a\u4e00\u4e9b\u8003\u8bc1\uff0c\u8bf7\u8bfb\u8005\u4fdd\u6301\u5ba1\u614e\u7684\u6001\u5ea6\u3002
\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
name
\uff1a\u8fd9\u662f\u552f\u4e00\u7684\u4ee5 human-readable \u5f62\u5f0f\u4fdd\u5b58\u7684\u4fe1\u606f\uff0c\u5373\u6587\u4ef6\u540d\uff1b identifier
\uff1a\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u7528\u4e8e\u552f\u4e00\u6807\u8bc6\u4e00\u4e2a\u6587\u4ef6\uff1b type
\uff1a\u4e00\u4e9b\u6587\u4ef6\u7cfb\u7edf\u9700\u8981\u652f\u6301\u4e0d\u540c\u7684\u6587\u4ef6\u7c7b\u578b\uff0c\u6b64\u65f6\u8fd9\u4e9b\u4fe1\u606f\u7528\u4e8e\u6807\u8bc6\u7c7b\u578b\uff1b location
\uff1a\u6807\u8bc6\u6587\u4ef6\u5728\u54ea\u4e2a\u8bbe\u5907\u7684\u54ea\u4e2a\u4f4d\u7f6e\uff1b size
\uff1a\u5f53\u524d\u6587\u4ef6\u5927\u5c0f\uff0c\u4e5f\u53ef\u80fd\u5305\u542b\u6587\u4ef6\u88ab\u5141\u8bb8\u7684\u6700\u5927\u5927\u5c0f\uff1b protection
\uff1a\u8bbf\u95ee\u63a7\u5236\u4fe1\u606f\uff0c\u51b3\u5b9a\u54ea\u4e9b\u7528\u6237\u5177\u6709\u5bf9\u5e94\u7684\u8bfb/\u5199/\u6267\u884c\u6743\u9650\u7b49\uff1b timestamp
\uff1a\u4fdd\u5b58\u521b\u5efa\u65f6\u95f4\u3001\u4e0a\u6b21\u4fee\u6539\u65f6\u95f4\u3001\u4e0a\u6b21\u4f7f\u7528\u65f6\u95f4\u7b49\uff0c\u8fd9\u4e9b\u4fe1\u606f\u53ef\u7528\u6765\u505a\u4e00\u4e9b\u5b89\u5168\u4fdd\u62a4\u548c\u4f7f\u7528\u76d1\u63a7\uff1b user indentification
\uff1a\u521b\u5efa\u8005\u3001\u4e0a\u6b21\u4fee\u6539\u8005\u3001\u4e0a\u6b21\u8bbf\u95ee\u8005\u7b49\uff0c\u8fd9\u4e9b\u4fe1\u606f\u53ef\u7528\u6765\u505a\u4e00\u4e9b\u5b89\u5168\u4fdd\u62a4\u548c\u4f7f\u7528\u76d1\u63a7\uff1b \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
create
\uff1a\u5206\u4e3a\u4e24\u6b65\uff0c\u24f5 \u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u4e3a\u6587\u4ef6\u5206\u914d\u4e00\u5757\u7a7a\u95f4\uff0c\u24f6 \u5728\u76ee\u5f55\u4e2d\u521b\u5efa\u5bf9\u5e94\u7684\u6761\u76ee\uff1b open
/ close
\uff1a\u6253\u5f00\u6587\u4ef6\u540e\u4f1a\u5f97\u5230\u6587\u4ef6\u7684\u53e5\u67c4(handle)\uff0c\u5176\u5b83\u5bf9\u7279\u5b9a\u6587\u4ef6\u7684\u64cd\u4f5c\u4e00\u822c\u90fd\u9700\u8981\u901a\u8fc7\u8fd9\u4e2a\u53e5\u67c4\u6765\u5b8c\u6210\uff0c\u7c7b\u4f3c\u4e8e\u201c\u4e0e\u6587\u4ef6\u5efa\u7acb\u4e00\u4e2a\u4f1a\u8bdd\u201d\uff0c\u5173\u95ed\u6587\u4ef6\u5c31\u662f\u201c\u7ed3\u675f\u8fd9\u4e2a\u4f1a\u8bdd\u201d\uff1b \u901a\u5e38\u6765\u8bf4\uff0c\u6587\u4ef6\u88ab\u6253\u5f00\u540e\u9700\u8981\u7531\u7528\u6237\u6765\u8d1f\u8d23\u5173\u95ed\uff1b \u6253\u5f00\u540e\u7684\u6587\u4ef6\u4f1a\u88ab\u52a0\u5165\u5230\u4e00\u4e2a\u6253\u5f00\u6587\u4ef6\u8868(open-file table)\u4e2d\uff0c\u8fd9\u4e2a\u8868\u4e2d\u4fdd\u5b58\u4e86\u6240\u6709\u6253\u5f00\u7684\u6587\u4ef6\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u6587\u4ef6\u7684\u53e5\u67c4\u3001\u6587\u4ef6\u7684\u4f4d\u7f6e\u3001\u6587\u4ef6\u7684\u8bbf\u95ee\u6743\u9650\u7b49\uff1b \u6587\u4ef6\u53ef\u80fd\u88ab\u591a\u65b9\u7528\u6237\uff08\u8fdb/\u7ebf\u7a0b\uff09\u6253\u5f00\uff0c\u800c\u53ea\u6709\u6240\u6709\u7528\u6237\u90fd\u5173\u95ed\u6587\u4ef6\u540e\u624d\u5e94\u5f53\u91ca\u653e\u6587\u4ef6\u5728\u6253\u5f00\u6587\u4ef6\u8868\u4e2d\u7684\u6761\u76ee\uff0c\u6240\u4ee5\u7ef4\u62a4\u4e00\u4e2a open-file count \u7528\u4e8e\u8bb0\u5f55\u5f53\u524d\u6587\u4ef6\u88ab\u6253\u5f00\u7684\u6b21\u6570\uff0c\u6709\u70b9\u7c7b\u4f3c\u667a\u80fd\u6307\u9488\uff1b read
/ write
\uff1a\u7ef4\u62a4\u4e00\u4e2a current-file-position pointer \u8868\u793a\u5f53\u524d\u64cd\u4f5c\u7684\u4f4d\u7f6e\uff0c\u5728\u5bf9\u5e94\u4f4d\u7f6e\u4e0a\u505a\u8bfb\u5199\u64cd\u4f5c\uff0c\u6709\u4e00\u70b9\u50cf\u56fe\u7075\u673a\uff1b repositioning within a file
\uff1a\u5c06 current-file-position pointer \u7684\u4f4d\u7f6e\u91cd\u65b0\u5b9a\u4f4d\u5230\u7ed9\u5b9a\u503c\uff08\u5982\u6587\u4ef6\u5f00\u5934\u6216\u7ed3\u5c3e\uff09\uff0c\u4e5f\u88ab\u53eb\u505a seek
\uff1b delete
\uff1a\u5728 directory \u4e2d\u627e\u5230\u5bf9\u5e94\u6761\u76ee\u5e76\u5220\u9664\u8be5\u6761\u76ee\uff0c\u5982\u679c\u6b64\u65f6\u5bf9\u5e94\u7684\u6587\u4ef6\u6ca1\u6709\u5176\u5b83\u786c\u94fe\u63a5\uff0c\u5219\u9700\u8981\u91ca\u653e\u5176\u7a7a\u95f4\uff0c\u7c7b\u4f3c\u4e8e\u667a\u80fd\u6307\u9488\uff1b truncate
\uff1a\u6e05\u7a7a\u6587\u4ef6\u5185\u5bb9\uff0c\u4f46\u4fdd\u7559\u6587\u4ef6\u5c5e\u6027\uff1b locking
\uff1b \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 0xFFD8
1\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
\u65e0\u7ed3\u6784\uff1a\u6d41\u5f0f\u7684\u5b58\u50a8\u6240\u6709\u7684 words/bytes\uff0cUNIX \u5c31\u5b9a\u4f4d\u4eea\u6240\u6709\u6587\u4ef6\u5c31\u662f\u666e\u901a\u7684\u4e00\u4e32\u5b57\u8282\uff1b \u7b80\u5355\u8bb0\u5f55\u7ed3\u6784(simple record structure)\uff1a\u5c06\u6587\u4ef6\u4ee5 record \u4e3a\u5355\u4f4d\u5b58\u50a8\uff0crecord \u7684\u957f\u5ea6\u53ef\u4ee5\u662f fixed \u4e5f\u53ef\u4ee5\u662f variable \u7684\uff0c\u4f8b\u5982\u6570\u636e\u5e93\u6587\u4ef6\uff1b \u590d\u6742\u7ed3\u6784(complex structures)\uff1b "},{"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\uff08Linux \u4e2d\uff09\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\u53ef\u4ee5\u8ba4\u4e3a\u76ee\u5f55\u80fd\u591f\u5b9e\u73b0 filename \u5230 FCB \u7684\u6620\u5c04\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u76ee\u5f55\u7ed3\u6784\u7684\u8bbe\u8ba1\u3002
\u800c\u5728 Windows \u4e2d\uff0c\u76ee\u5f55\u548c\u6587\u4ef6\u6709\u4e0d\u540c\u7684\u7cfb\u7edf\u8c03\u7528\u6765\u63a7\u5236\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
\u4e3a\u4e86\u5b9e\u73b0\u7d22\u5f15\uff0c\u6587\u4ef6\u7684\u540d\u5b57\u5fc5\u987b\u662f\u552f\u4e00\u7684\uff1b \u968f\u7740\u6587\u4ef6\u6570\u91cf\u7684\u589e\u5927\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u6108\u53d1\u4e0d\u5408\u7406\uff1b "},{"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
\u76f8\u6bd4\u4e8e\u5355\u7ea7\u76ee\u5f55\uff0c\u4e0d\u540c\u7528\u6237\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u540d\u53ef\u4ee5\u76f8\u540c\u4e86\uff1b disadvantages
\u5e76\u6ca1\u6709\u4ece\u6839\u6e90\u4e0a\u89e3\u51b3\u65e0\u6cd5\u5206\u7ec4\u7684\u95ee\u9898\uff1b "},{"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
\u89e3\u51b3\u4e86\u81ea\u7531\u5206\u7ec4\u7684\u95ee\u9898\uff0c\u4f7f\u6587\u4ef6\u7cfb\u7edf\u7684\u7ed3\u6784\u5316\u7ba1\u7406\u80fd\u529b\u5927\u5927\u589e\u5f3a\uff1b "},{"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 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) ... "},{"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\"]);
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 \u5176\u4e2d\u8bbe\u5907\u9a71\u52a8(device driver)\u63d0\u4f9b\u4e86\u4e00\u5957\u7edf\u4e00\u7684\u63a5\u53e3\uff0c\u901a\u5e38\u662f\u4e00\u7cfb\u5217\u5f02\u6b65\u4e2d\u65ad\u5904\u7406\u65b9\u6848\uff1b5 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 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 address \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 Logical file system \u5b58\u50a8\u4e00\u4e9b\u6587\u4ef6\u7cfb\u7edf\u7684\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 FCB \u4f1a\u7ef4\u62a4\u88ab\u6253\u5f00\u7684\u6587\u4ef6\u7684\u4e00\u4e9b\u5177\u4f53\u4fe1\u606f\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u7684\u5b9e\u73b0","title":"\u6587\u4ef6\u7cfb\u7edf\u7684\u5b9e\u73b0","text":"\u4e3a\u4e86\u5b9e\u73b0\u6587\u4ef6\u7cfb\u7edf\uff0c\u6211\u4eec\u9700\u8981\u5728\u786c\u76d8\u548c\u5185\u5b58\u4e2d\u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u7ed3\u6784\uff0c\u4e0b\u9762\u5206\u522b\u4ecb\u7ecd on-disk structures \u548c in-memory structures\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u786c\u76d8\u6570\u636e\u7ed3\u6784","title":"\u786c\u76d8\u6570\u636e\u7ed3\u6784","text":"On-Disk \u7684\u6570\u636e\u7ed3\u6784\u7ef4\u62a4 \u24f5 \u5982\u4f55\u542f\u52a8\u786c\u76d8\u4e2d\u7684 OS\uff0c\u24f6 \u786c\u76d8\u4e2d\u5305\u62ec\u7684 block \u603b\u6570\uff0c\u24f7 \u7a7a\u95f2 block \u7684\u6570\u91cf\u548c\u4f4d\u7f6e\uff0c\u24f8 \u76ee\u5f55\u7ed3\u6784\u4ee5\u53ca\u6587\u4ef6\u4e2a\u4f53\u7b49\uff0c\u4e0b\u9762\u4ecb\u7ecd\u51e0\u4e2a\u4e3b\u8981\u7684\u6570\u636e\u7ed3\u6784\u3002
Boot control block \u64cd\u4f5c\u7cfb\u7edf\u88ab\u4fdd\u5b58\u5728\u5f15\u5bfc\u63a7\u5236\u5757(boot control block)\u4e2d\uff0c\u4e00\u822c boot control block \u662f\u64cd\u4f5c\u7cfb\u7edf\u6240\u5728\u7684 volume \u7684\u7b2c\u4e00\u4e2a block\u3002 \u5728 UFS \u4e2d\uff0cboot control block \u4e5f\u88ab\u79f0\u4e3a boot block\uff1b\u5728 NTFS \u4e2d\uff0c\u4e5f\u88ab\u79f0\u4e3a partition boot sector\u3002 \u8be5\u6570\u636e\u7ed3\u6784\u662f per volume \u7684\u3002 Volume control block \u5377\u63a7\u5236\u5757(volume control block)\u7ef4\u62a4\u4e86 volume \u7684\u5177\u4f53\u4fe1\u606f\uff0c\u4f8b\u5982 volume \u7684 blocks \u6570\u91cf\u3001\u7a7a\u95f2 block \u7684\u6570\u91cf\u4e0e\u6307\u9488\u3001\u7a7a\u95f2 PCB \u7684\u6570\u91cf\u4e0e\u6307\u9488\u7b49\u3002 \u5728 UFS volume control block \u4e5f\u88ab\u79f0\u4e3a superblock\uff1b\u5728 NTFS \u4e2d\uff0c\u4e5f\u88ab\u79f0\u4e3a master file table\u3002 \u8be5\u6570\u636e\u7ed3\u6784\u662f per volume \u7684\u3002 Directory structure \u76ee\u5f55\u7ed3\u6784(directory structure)\u5df2\u7ecf\u5728\u524d\u9762\u63d0\u5230\u8fc7\uff0c\u5b83\u7528\u6765\u7ec4\u7ec7 files\uff0c\u540c\u65f6\u4e5f\u7ef4\u62a4\u4e86 files \u7684\u5143\u4fe1\u606f\u3002 \u5728 UFS \u4e2d\uff0c\u5b83\u7ef4\u62a4\u4e86\u6587\u4ef6\u4ee5\u53ca\u5bf9\u5e94\u7684 inode numbers\uff1b\u5728 NTFS \u4e2d\uff0c\u5b83\u5728 master file table \u4e2d\u88ab\u7ef4\u62a4\u3002 \u8be5\u6570\u636e\u7ed3\u6784\u662f per FS \u7684\u3002 File control block \u6587\u4ef6\u63a7\u5236\u5757(file control block, FCB)Wiki\u7ef4\u62a4\u4e86\u88ab\u6253\u5f00\u7684\u6587\u4ef6\u7684\u5177\u4f53\u4fe1\u606f\u3002PCB \u4e00\u822c\u6709\u4e00\u4e2a\u552f\u4e00\u7684\u6807\u8bc6\u7b26\u4e0e\u76ee\u5f55\u9879\u5173\u8054\u3002 \u6ce8\u610f\uff1a\u7406\u8bba\u4e0a\u7684 FCB \u5b9a\u4e49\u5982\u4e0a\uff0c\u5e94\u5f53\u4e3b\u8981\u5b58\u5728\u4e8e\u5185\u5b58\u4e2d\uff1b\u4f46\u662f\u8bfe\u672c\u4e2d\u7684 FCB \u6307\u7684\u662f\u66f4\u5e7f\u6cdb\u7684\uff0c\u56e0\u6b64\u5728\u786c\u76d8\u4e2d\u7ef4\u62a4\u6587\u4ef6\u5143\u4fe1\u606f\u7684\u90a3\u4e9b\u4e1c\u897f\u4e5f\u88ab\u79f0\u4e3a FCB\uff0c\u8bfb\u8005\u9700\u8981\u5728\u8fd9\u91cc\u68b3\u7406\u6e05\u695a\u8fd9\u79cd\u5b9a\u4e49\u4e0a\u7684\u504f\u5dee\uff01 \u4f8b\u5982\uff0c\u5b83\u53ef\u80fd\u88ab\u5305\u542b\u5982\u4e0b\u4fe1\u606f\uff1a \u6587\u4ef6\u6743\u9650\uff1b \u6587\u4ef6\u64cd\u4f5c\u65e5\u671f\uff1b ACL\uff1b \u6587\u4ef6\u5927\u5c0f\uff1b \u6587\u4ef6\u6570\u636e\u6240\u5728\u7684 block \u6216\u8fd9\u4e2a block \u7684\u6307\u9488\uff1b ... \u5728 UFS \u4e2d\uff0cFCB \u6307\u7684\u5c31\u662f\u4e00\u4e2a inode\uff1b\u5728 NTFS \u4e2d\uff0cPCB \u901a\u5e38\u5728 master file table \u4e2d\u88ab\u7ef4\u62a4\uff0c\u5176\u7ef4\u62a4\u5f62\u5f0f\u7c7b\u4f3c\u4e8e\u5173\u7cfb\u5f62\u6570\u636e\u5e93\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5185\u5b58\u6570\u636e\u7ed3\u6784","title":"\u5185\u5b58\u6570\u636e\u7ed3\u6784","text":"In-Memory \u7684\u6570\u636e\u7ed3\u6784\u5728 main memory \u4e2d\u7ef4\u62a4\uff0c\u7528\u4e8e\u5e2e\u52a9\u6587\u4ef6\u7cfb\u7edf\u7ba1\u7406\u548c\u4e00\u4e9b\u7f13\u5b58\u64cd\u4f5c\u3002
Mount table \u5df2\u88ab\u6302\u8f7d\u7684 volume \u4f1a\u88ab\u8bb0\u5f55\u5728 mount table \u4e2d\u3002 Directory cache \u4e3a\u4e86\u63d0\u9ad8\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\uff0c\u4e00\u4e9b\u6700\u8fd1\u88ab\u8bbf\u95ee\u7684\u76ee\u5f55\u4fe1\u606f\u4f1a\u88ab\u7f13\u5b58\u5230\u5185\u5b58\u4e2d\uff0c\u8fd9\u4e9b\u7f13\u5b58\u7684\u76ee\u5f55\u4fe1\u606f\u88ab\u79f0\u4e3a directory cache\u3002 System-wide open-file table \u8bb0\u5f55\u8fd9\u4e2a\u7cfb\u7edf\u4e2d\u6240\u6709\u8fdb\u7a0b\u6253\u5f00\u7684\u6587\u4ef6\u3002 Per-process open-file table \u8bb0\u5f55\u6bcf\u4e2a\u8fdb\u7a0b\u6253\u5f00\u7684\u6587\u4ef6\uff0c\u5176 entry \u6307\u5411 system-wide open-file table \u4e2d\u7684 entry\u3002 Buffers \u5728\u5185\u5b58\u4e2d\uff0c\u7528\u4e8e\u7f13\u51b2 disk block \u7684\u5185\u5bb9\u3002 \u5f53\u4e00\u4e2a disk block \u88ab\u8bfb\u65f6\uff0c\u5b83\u7684\u5185\u5bb9\u4f1a\u88ab\u653e\u5230 buffer \u91cc\uff1b\u5f53\u4e00\u4e2a\u5411 disk block \u5199\u7684\u52a8\u4f5c\u53d1\u751f\u65f6\uff0c\u4f1a\u5148\u88ab\u5199\u5165 buffer\u3002 \u901a\u8fc7\u4e0a\u9762\u8fd9\u79cd\u65b9\u5f0f\uff0cbuffer \u6280\u672f\u53ef\u4ee5\u5b9e\u73b0\u7edf\u4e00 CPU \u548c I/O \u8bbe\u5907\u4e4b\u95f4\u7684\u901f\u5ea6\u5dee\u5f02\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u64cd\u4f5c_1","title":"\u6587\u4ef6\u64cd\u4f5c","text":"\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4e3e\u4f8b\u8bf4\u660e\u5177\u4f53\u7684\u64cd\u4f5c\u662f\u5982\u4f55\u5728\u8fd9\u4e9b\u8bbe\u8ba1\u4e0b\u8fd0\u4f5c\u7684\u3002
file creation Application program \u9700\u8981\u521b\u5efa\u6587\u4ef6\u65f6\uff0c\u8c03\u7528 logical file system\uff0c\u5e76\u7ed9\u51fa\u9700\u8981\u521b\u5efa\u7684\u6587\u4ef6\u540d\u3002\u5b83\u4e86\u89e3 directory \u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u4f1a\u505a\u76f8\u5e94\u5904\u7406\u3002
\u521b\u5efa\u6587\u4ef6\u65f6\uff0c\u4e00\u4e2a\u5bf9\u5e94\u7684 FCB \u4f1a\u88ab\u521b\u5efa\uff1b\u4e0e\u6b64\u540c\u65f6\uff0c\u5bf9\u5e94\u7684 parent directory \u4e5f\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\uff0c\u5e76\u88ab\u66f4\u65b0\u3002
file open & close Application program \u9700\u8981\u5148\u6253\u5f00\u6587\u4ef6\u624d\u80fd\u5bf9\u6587\u4ef6\u8fdb\u884c\u8fdb\u4e00\u6b65\u7684 I/O \u64cd\u4f5c\uff0c\u8fd9\u4e00\u6b65\u901a\u8fc7\u7cfb\u7edf\u8c03\u7528 open()
\u6765\u5b9e\u73b0\u3002
\u6253\u5f00\u6587\u4ef6\u65f6\uff0copen()
\u4f1a\u5c06\u6587\u4ef6\u540d\u4f20\u8f93\u7ed9 logical file system\u3002\u540c\u65f6\uff0copen()
\u4f1a\u5728 system-wide open-file table \u91cc\u67e5\u627e\u8fd9\u4e2a\u6587\u4ef6\uff0c\u5982\u679c\u627e\u5230\u4e86\uff0c\u8bf4\u660e\u8fd9\u4e2a\u6587\u4ef6\u6b63\u5728\u88ab\u5176\u5b83\u8fdb\u7a0b\u4f7f\u7528\uff0c\u5c31\u53ef\u4ee5\u5269\u4e0b\u4e00\u4e9b\u989d\u5916\u7684\u5f00\u9500\u76f4\u63a5\u8fdb\u884c\u4e0b\u4e00\u6b65\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u6ca1\u6709\u627e\u5230\uff0c\u5c31\u9700\u8981\u5728 directory structure \u4e2d\u67e5\u627e\u8fd9\u4e2a\u6587\u4ef6\uff0c\u5f53\u8fd9\u4e2a\u6587\u4ef6\u88ab\u627e\u5230\u540e\uff0c\u5176 FCB \u4f1a\u88ab\u590d\u5236\u8fdb system-wide open-file table \u8868\u793a\u8be5\u6587\u4ef6\u88ab\u6253\u5f00\u3002
\u968f\u540e\uff0c\u5728 per-process open-file table \u4e2d\u521b\u5efa\u4e00\u4e2a entry\uff0c\u6307\u5411 system-wide open-file table \u4e2d\u7684 entry\uff0c\u8868\u793a\u5f53\u524d\u8fdb\u7a0b\u6253\u5f00\u4e86\u4e00\u4e2a\u6587\u4ef6\u3002\u540c\u65f6\uff0c\u8fd9\u4e2a\u6307\u5411\u7684 entry \u7684 reference counter \u4f1a\u88ab\u52a0 1\u3002
\u6211\u4eec\u4e4b\u540e\u5bf9\u6587\u4ef6\u7684\u64cd\u4f5c\u90fd\u4f9d\u8d56\u8fd9\u4e2a\u6307\u5411 system-wide open-file table \u4e2d entry \u7684\u6307\u9488\uff0c\u5b83\u5728 UNIX \u4e2d\u88ab\u79f0\u4e3a file descriptor\uff0c\u5728 Windows \u4e2d\u88ab\u79f0\u4e3a file handle\u3002
\u5bf9\u5e94\u7684\uff0c\u5728\u6587\u4ef6 close \u7684\u8fc7\u7a0b\u4e2d\uff0c\u4f1a\u5148\u5220\u9664 per-process open-file table \u4e2d\u7684 entry\uff0c\u7136\u540e\u5c06 system-wide open-file table \u4e2d\u7684 entry \u7684 reference counter \u51cf 1\uff0c\u5982\u679c\u6b64\u65f6 reference counter \u4e3a 0\uff0c\u8bf4\u660e\u6ca1\u6709\u5176\u5b83\u8fdb\u7a0b\u6253\u5f00\u8fd9\u4e2a\u6587\u4ef6\u4e86\uff0c\u90a3\u4e48\u8fd9\u4e2a entry \u4f1a\u88ab\u5220\u9664\uff0c\u6b64\u65f6\u9700\u8981\u66f4\u65b0 directory structure \u4e2d\u7684\u4fe1\u606f\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u76ee\u5f55\u7684\u5b9e\u73b0","title":"\u76ee\u5f55\u7684\u5b9e\u73b0","text":"\u672c\u8282\u4ecb\u7ecd\u4e24\u79cd\u76ee\u5f55\u7684\u5b9e\u73b0\u65b9\u6cd5\u3002
linear list based \u7ebf\u6027\u68c0\u7d22\u6cd5\u901a\u8fc7\u7ebf\u6027\u8868\uff08\u6570\u7ec4/\u94fe\u8868\u7b49\uff09\u6765\u5b58\u50a8\u76ee\u5f55\u4fe1\u606f\uff0c\u6bcf\u4e2a\u76ee\u5f55\u9879\u5305\u542b file name \u548c\u6307\u5411 FCB/Inode \u7684\u6307\u9488\uff0c\u67e5\u627e\u65f6\u9700\u8981\u904d\u5386\u67e5\u627e\u3002
advantages
\u5b9e\u73b0\u7b80\u5355\uff1b disadvantages
\u968f\u7740\u6587\u4ef6\u6570\u91cf\u7684\u589e\u52a0\uff0c\u68c0\u7d22\u6548\u7387\u4f1a\u964d\u4f4e\uff1b improvement
\u4f7f\u7528\u6709\u5e8f\u6570\u636e\u7ed3\u6784\uff08\u5e73\u8861\u6811\u3001B+ \u6811\u7b49\uff09\u53ef\u4ee5\u6539\u5584\u7f3a\u70b9\uff1b hash table based \u54c8\u5e0c\u8868\u6cd5\u901a\u8fc7\u54c8\u5e0c\u8868\u6765\u5b58\u50a8\u76ee\u5f55\u4fe1\u606f\uff0c\u6bcf\u4e2a\u76ee\u5f55\u9879\u5305\u542b file name \u548c\u6307\u5411 FCB/Inode \u7684\u6307\u9488\uff0c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 hash function \u8fdb\u884c random access\u3002
advantages
\u68c0\u7d22\u6548\u7387\u66f4\u9ad8\uff1b disadvantages
\u53ef\u80fd\u51fa\u73b0\u51b2\u7a81\u95ee\u9898\uff0c\u4f46\u53ef\u4ee5\u901a\u8fc7\u7b97\u6cd5\u89e3\u51b3\uff1b \u54c8\u5e0c\u8868\u5bf9\u5bb9\u7eb3\u5185\u5bb9\u7684\u5927\u5c0f\u6709\u5047\u8bbe\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5757\u5206\u914d\u4e0e\u5757\u7ec4\u7ec7","title":"\u5757\u5206\u914d\u4e0e\u5757\u7ec4\u7ec7","text":"\u6211\u4eec\u5728\u8bb2\u5185\u5b58\u7684\u65f6\u5019\uff0c\u8ba8\u8bba\u8fc7\u8fdb\u7a0b\u7684\u5185\u5b58\u5206\u914d\u7b56\u7565\u3002\u8fd9\u91cc\u8ba8\u8bba\u7684\u5185\u5bb9\u662f\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u8003\u8651\u6587\u4ef6\u5185\u5b58\u8981\u5982\u4f55\u88ab\u5206\u914d\uff0c\u540c\u65f6\uff0c\u5757\u5982\u4f55\u5206\u914d\u4e5f\u6697\u793a\u4e86\u5757\u662f\u5982\u4f55\u7ec4\u7ec7\u7684\u3002
\u901a\u5e38\u6765\u8bf4\u4e3b\u8981\u6709\u4e09\u79cd\uff1a\u8fde\u7eed(contiguous)\u3001\u94fe\u63a5(linked)\u548c\u7d22\u5f15(indexed)\uff0c\u5b83\u4eec\u4e4b\u95f4\u5404\u6709\u4f18\u52a3\uff0c\u9700\u8981\u6ce8\u610f\u638c\u63e1\u5b83\u4eec\u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u4f1a\u6709\u8ba1\u7b97\u9898\u3002
continuous \u8fde\u7eed\u5206\u914d\u6307\u7684\u662f\u6bcf\u4e2a\u6587\u4ef6\u5360\u7528\u4e00\u6bb5\u8fde\u7eed\u7684 block\u3002
Contiguous allocation of disk space.
\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 512 B\uff0c\u5982\u679c\u7ed9\u5b9a\u5b58\u53d6\u6587\u4ef6\u7684\u903b\u8f91\u5730\u5740 LA\uff0c\u5219\u5176\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R \u4e3a\uff1a
block_size = 512 # Bytes\nQ = LA / block_size\nR = LA % block_size\n
advantages
\u5b9e\u73b0\u7b80\u5355\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u6587\u4ef6\u7684 start block \u548c length \u5373\u53ef\uff1b \u6587\u4ef6\u8bbf\u95ee\u6548\u7387\u9ad8\uff1b disadvantages
\u5206\u914d\u65f6\u5bfb\u627e\u5408\u9002\u7a7a\u95f4\u6bd4\u8f83\u56f0\u96be\uff1b \u7c7b\u4f3c\u8fdb\u7a0b\u7684\u5185\u5b58\u5206\u914d\u7b56\u7565\uff0c\u9700\u8981\u8003\u8651\u5916\u90e8\u788e\u7247\u7b49\u95ee\u9898\uff1b \u5728\u6587\u4ef6\u53ef\u80fd\u52a8\u6001\u53d8\u5316\u7684\u60c5\u51b5\u4e0b\u4f1a\u5f88\u7cdf\u7cd5\uff08\u6216\u8005\u8bf4\uff0c\u6587\u4ef6\u9700\u8981\u591a\u5c11\u7a7a\u95f4\u6709\u65f6\u662f\u96be\u4ee5\u9884\u8ba1\u7684\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5b9e\u9645\u4f7f\u7528\u7a7a\u95f4\u6bd4\u9884\u671f\u5927\u6216\u5c0f\u7684\u60c5\u51b5\uff09\uff1b \u5982\u679c\u6587\u4ef6\u53d8\u5c0f\uff0c\u53ef\u80fd\u53ea\u662f\u5e26\u6765\u5916\u90e8\u788e\u7247\uff0c\u4f46\u662f\u6587\u4ef6\u53d8\u5927\u5c31\u65e0\u6cd5\u89e3\u51b3\u4e86\uff1b \u4e3a\u4e86\u89e3\u51b3\u5916\u90e8\u788e\u7247\u7684\u95ee\u9898\uff0c\u6709\u4e00\u79cd\u7b56\u7565\u53eb compacts\uff0c\u6307\u7684\u662f\u5148\u6682\u65f6\u5c06\u6587\u4ef6\u7cfb\u7edf\u590d\u5236\u5230\u53e6\u5916\u4e00\u4e2a\u8bbe\u5907\u4e0a\uff0c\u7136\u540e\u5b8c\u5168\u91ca\u653e\u539f\u59cb\u8bbe\u5907\u7684\u8d44\u6e90\uff0c\u518d\u5c06\u6587\u4ef6\u590d\u5236\u56de\u53bb\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u201c\u538b\u7f29\u201d\u3002\u4e0d\u8fc7\u663e\u7136\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u7684\u5f00\u9500\u662f\u5de8\u5927\u7684\u3002
\u4e3a\u4e86\u89e3\u51b3\u6587\u4ef6\u5927\u5c0f\u53d8\u5927\uff0c\u65e0\u6cd5\u6269\u5c55\u7684\u95ee\u9898\uff0c\u6709\u4e00\u79cd\u673a\u5236\u53eb\u505a extent\uff0c\u53ef\u4ee5\u4fee\u6b63\u8fd9\u4e2a\u95ee\u9898\u3002\u5f53\u7a7a\u95f4\u4e0d\u591f\u65f6\uff0c\u7cfb\u7edf\u4f1a\u88ab\u5206\u914d\u4e00\u5757\u65b0\u7684\u8fde\u7eed\u7a7a\u95f4\uff0c\u94fe\u5f0f\u5730\u52a0\u5165\u5230\u539f\u59cb\u7a7a\u95f4\u7684\u540e\u9762\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u89e3\u51b3\u6587\u4ef6\u5927\u5c0f\u53d8\u5927\u7684\u95ee\u9898\u4e86\uff08\u7c7b\u4f3c\u4e8e\u4e00\u79cd\u4e0d\u5b9a\u7684\u5927\u7c92\u5ea6\u7684\uff0c\u7531 FCB \u7ef4\u62a4\u7684\u94fe\u63a5\u65b9\u6848\uff09\u3002\u5f53\u7136\uff0c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u9664\u4e86 start blok \u548c length\uff0c\u8fd8\u9700\u8981\u5728 FCB \u4e0a\u8bb0\u5f55\u6307\u5411 extent \u7684\u6307\u9488\u3002
linked \u6bcf\u4e2a block \u4f5c\u4e3a\u4e00\u4e2a\u94fe\u8282\uff0c\u7ef4\u62a4\u5b58\u50a8\u4fe1\u606f\u4ee5\u5916\u8fd8\u9700\u8981\u7ef4\u62a4\u6307\u5411\u4e0b\u4e00\u4e2a block \u7684\u6307\u9488\u3002\u6b64\u65f6\uff0cFCB \u4e2d\u53ea\u9700\u8981\u8bb0\u5f55\u8d77\u59cb\u5730\u5740\u5373\u53ef\u3002
Linked allocation of disk space.
\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 512 B\uff0c\u6bcf\u4e2a\u5757\u7684\u5f00\u5934\u6d88\u8017 1 B \u6765\u5b58\u653e\u6307\u9488\uff0c\u5982\u679c\u7ed9\u5b9a\u5b58\u53d6\u6587\u4ef6\u7684\u903b\u8f91\u5730\u5740 LA\uff0c\u5219\u5176\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R \u4e3a\uff1a
\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\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\u2510\n\u2502pointer\u2502 data \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\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\u2518\n0 1 512\n
valid_block_size = 512 - 1 # Bytes\nQ = LA / valid_block_size\nR = (LA % valid_block_size) + 1\n
advantages
\u5b9e\u73b0\u7b80\u5355\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u6587\u4ef6\u7684 start pointer \u5373\u53ef\uff1b \u6587\u4ef6\u7684\u521b\u5efa\uff08\u5206\u914d\uff09\u548c\u589e\u957f\u5f88\u5bb9\u6613\uff1b \u89e3\u51b3\u4e86\u8fde\u7eed\u5206\u914d\u4e2d\u7684\u5916\u90e8\u788e\u7247\u95ee\u9898\uff1b disadvantages
\u65e0\u6cd5\u968f\u673a\u8bbf\u95ee\uff0c\u6587\u4ef6\u8bbf\u95ee\u6548\u7387\u4f4e\uff0c\u56e0\u4e3a\u9700\u8981\u4ece\u5934\u5f00\u59cb\u904d\u5386\uff1b \u9700\u8981\u989d\u5916\u7684\u7a7a\u95f4\u6765\u5b58\u50a8\u6307\u9488\uff1b \u989d\u5916\u7a7a\u95f4\u4e8e\u94fe\u8282\u6570\u91cf\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u7c07(cluster)\uff0c\u5373\u591a\u4e2a\u8fde\u7eed\u5757\u4e3a\u4e00\u4e2a\u94fe\u8282\uff0c\u6765\u51cf\u5c11\u6307\u9488\u5e26\u6765\u7684\u989d\u5916\u5f00\u9500\uff1b \u53ef\u9760\u6027\u5b58\u5728\u95ee\u9898\uff1b index \u867d\u7136\u94fe\u63a5\u5f0f\u65b9\u6848\u89e3\u51b3\u4e86\u8fde\u7eed\u5f0f\u65b9\u6848\u4e2d\u5206\u914d\u4e0d\u7075\u6d3b\u7684\u95ee\u9898\uff0c\u4f46\u662f\u4e0d\u652f\u6301\u968f\u673a\u8bbf\u95ee\u3002
\u7d22\u5f15\u65b9\u6cd5\u5c06\u6240\u6709\u6307\u9488\u7edf\u4e00\u7ef4\u62a4\u5230 index block \u4e2d\uff0c\u800c\u4e0d\u662f\u5229\u7528\u94fe\u8868\u7684\u65b9\u5f0f\u3002\u6bcf\u4e2a\u6587\u4ef6\u6709\u81ea\u5df1\u7684 index block\uff0c\u5728 index block \u4e2d\uff0c\u987a\u5e8f\u5b58\u653e\u7740\u6307\u5411\u6587\u4ef6\u7684\u6240\u6709 block \u7684\u6307\u9488\uff0cindex block \u4e2d\u7b2c i \u4e2a entry \u6307\u5411\u4e86\u5b58\u50a8\u6587\u4ef6\u6570\u636e\u7684\u7b2c i \u4e2a block\u3002
Indexed allocation of disk space.
\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 512 B\uff0c\u5982\u679c\u7ed9\u5b9a\u5b58\u53d6\u6587\u4ef6\u7684\u903b\u8f91\u5730\u5740 LA\uff0c\u5219\u5176\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R \u4e3a\uff1a
block_size = 512 # Bytes\nQ = LA / block_size\nR = LA % block_size\n
advantages
\u6587\u4ef6\u7684\u521b\u5efa\uff08\u5206\u914d\uff09\u548c\u589e\u957f\u5f88\u5bb9\u6613\uff1b \u89e3\u51b3\u4e86\u8fde\u7eed\u5206\u914d\u4e2d\u7684\u5916\u90e8\u788e\u7247\u95ee\u9898\uff1b \u652f\u6301\u968f\u673a\u8bbf\u95ee\uff1b disadvantages
\u901a\u5e38\u6709\u66f4\u5927\u7684\u6307\u9488\u7a7a\u95f4\u5f00\u9500\uff0c\u56e0\u4e3a index \u4ee5 block \u4e3a\u6700\u5c0f\u5360\u7528\u5355\u4f4d\uff1b \u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u8981\u8003\u8651 index block \u592a\u5c0f\u7684\u60c5\u51b5\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u590d\u6570\u4e2a index blocks\uff0c\u51e0\u79cd\u5e38\u89c1\u7684\u65b9\u6848\uff1a
\u4f7f\u7528\u94fe\u63a5\u7d22\u5f15\uff0c\u7528\u94fe\u8868\u5c06\u5b83\u4eec\u8fde\u8d77\u6765\uff1b \u4f7f\u7528\u591a\u7ea7\u7d22\u5f15\uff08\u56de\u987e\u591a\u7ea7\u9875\u8868\uff09\uff1b \u4f7f\u7528\u6df7\u5408\u6a21\u5f0f\uff0c\u8be5\u65b9\u6848\u4e3a UNIX \u6240\u91c7\u7528\uff0c\u7c7b\u4f3c\u4e8e\u5206\u7ea7\u7535\u8d39\uff0cinode \u4e2d\u6709 15 \u4e2a\u6307\u9488\uff0c\u5404\u81ea\u7528\u9014\u4e0d\u540c\uff1a \u524d 12 \u4e2a\u76f4\u63a5\u7d22\u5f15 12 \u4e2a block\uff1b \u7b2c 13 \u4e2a\u6307\u5411\u4e00\u4e2a indirect index block\uff08\u7528\u4e0d\u5230\u7684\u65f6\u5019\u5c31\u4e0d\u7528\uff09\uff1b \u7b2c 14 \u4e2a\u6307\u5411\u4e00\u4e2a\u4e8c\u7ea7 indirect index block\uff08\u7528\u4e0d\u5230\u7684\u65f6\u5019\u5c31\u4e0d\u7528\uff09\uff1b \u7b2c 15 \u4e2a\u6307\u5411\u4e00\u4e2a\u4e09\u7ea7 indirect index block\uff08\u7528\u4e0d\u5230\u7684\u65f6\u5019\u5c31\u4e0d\u7528\uff09\uff1b The UNIX inode.
\u5934\u8111\u98ce\u66b4
\u8bf7\u601d\u8003\u8fd9\u4e09\u79cd\u8bbe\u8ba1\u4e0b\uff0c\u5982\u4f55\u8ba1\u7b97\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R\u3002
\u63d0\u793a \u94fe\u63a5\u7d22\u5f15\uff1a
block_size = 512 # Bytes\nnormal_block_size = block_size # Bytes\nptr_valid_block_size = block_size - 1 # Bytes\n\nQ1 = LA / (normal_block_size * ptr_valid_block_size) # the index block\nR1 = LA % (normal_block_size * ptr_valid_block_size)\n\nQ2 = R1 / normal_block_size # the data block\nR2 = R1 % normal_block_size # the offset in the data block\n
\u4e8c\u7ea7\u7d22\u5f15\uff1a
block_size = 512 # Bytes\n\nQ1 = LA / (block_size ** 2) # the inner index block\nR1 = LA % (block_size ** 2)\n\nQ2 = R1 / block_size # the data block\nR2 = R1 % block_size # the offset in the data block\n
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u4f7f\u7528\u4e8c\u7ea7\u7d22\u5f15\u5206\u914d\uff0c\u4e00\u4e2a\u5757\u7684\u5927\u5c0f\u4e3a 1 KiB\uff0c\u7d22\u5f15\u4e2d\u7684\u5757\u5730\u5740\u4e3a 4 B\uff0c\u5219\u6587\u4ef6\u7cfb\u7edf\u80fd\u652f\u6301\u7684\u6700\u5927\u7a7a\u95f4\u5927\u5c0f\u4e3a\uff1f
\u8fd9\u91cc\u6709\u4e24\u6761\u7ebf\uff0c\u7b2c\u4e00\u6761\u662f\u7d22\u5f15\u7cfb\u7edf\u6240\u80fd\u652f\u6301\u7684\u6700\u5927\u5757\u6570\u91cf\uff0c\u7b2c\u4e8c\u6761\u662f\u5757\u5730\u5740\u80fd\u652f\u6301\u7684\u6700\u5927\u5730\u5740\u7a7a\u95f4\u5927\u5c0f\uff0c\u6211\u4eec\u5e94\u5f53\u5206\u522b\u8ba1\u7b97\uff0c\u53d6\u6700\u5c0f\u7684\u90a3\u4e2a\u4f5c\u4e3a\u7b54\u6848\u3002
\u9996\u5148\uff0c\u53ef\u4ee5\u8ba4\u4e3a\u4e8c\u7ea7\u7d22\u5f15\u5b9e\u9645\u4e0a\u5c31\u662f\u4e2a\u4e8c\u7ef4\u6570\u7ec4\uff0c\u4e00\u4e2a\u7ef4\u5ea6\u7531\u4e00\u4e2a\u5757\u7ef4\u62a4\uff0c\u6240\u4ee5\u6bcf\u4e2a\u7ef4\u5ea6\u4e2d\u6709 1 KiB / 4 B = 28 \u4e2a\u9879\uff0c\u6240\u4ee5\u4e00\u5171\u652f\u6301 2 16 \u4e2a\u9879\u3002
\u5176\u6b21\uff0c\u7531\u4e8e\u5757\u5730\u5740\u7531 4 B \u8868\u793a\uff0c\u6240\u4ee5\u5730\u5740\u7a7a\u95f4\u6700\u591a\u6709 232 \u4e2a\u9879\u3002
\u6240\u4ee5\uff0c\u6587\u4ef6\u7cfb\u7edf\u652f\u6301\u7684\u6700\u591a\u9879\u6570\u4e3a 216 \u9879\uff0c\u6700\u5927\u7a7a\u95f4\u4e3a 1 KiB * 216 = 64 MB\u3002
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u6587\u4ef6 F \u7531 200 \u6761\u8bb0\u5f55\u7ec4\u6210\uff0c\u8bb0\u5f55\u4ece 1 \u5f00\u59cb\u7f16\u53f7\u3002\u7528\u6237\u6253\u5f00\u6587\u4ef6\u540e\uff0c\u6b32\u5c06\u5185\u5b58\u4e2d\u7684\u4e00\u6761\u8bb0\u5f55\u63d2\u5165\u5230\u6587\u4ef6 F \u4e2d\uff0c\u4f5c\u4e3a\u5176\u7b2c 30 \u6761\u8bb0\u5f55\u3002\u8bf7\u56de\u7b54\u4e0b\u5217\u95ee\u9898\uff0c\u5e76\u8bf4\u660e\u7406\u7531\u3002
\u82e5\u6587\u4ef6\u7cfb\u7edf\u91c7\u7528\u8fde\u7eed\u5206\u914d\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u78c1\u76d8\u5757\u5b58\u653e\u4e00\u6761\u8bb0\u5f55\uff0c\u6587\u4ef6 F \u7684\u5b58\u50a8\u533a\u57df\u524d\u540e\u5747\u6709\u8db3\u591f\u7a7a\u95f2\u7684\u78c1\u76d8\u7a7a\u95f4\uff0c\u5219\u5b8c\u6210\u4e0a\u8ff0\u63d2\u5165\u64cd\u4f5c\u6700\u5c11\u9700\u8981\u8bbf\u95ee\u51e0\u6b21\u5b58\u50a8\u5757? F \u7684\u6587\u4ef6\u63a7\u5236\u5757\u5185\u5bb9\u4f1a\u53d1\u751f\u54ea\u4e9b\u6539\u53d8\uff1f
\u82e5\u6587\u4ef6\u7cfb\u7edf\u91c7\u7528\u94fe\u63a5\u5206\u914d\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u78c1\u76d8\u5757\u5b58\u653e\u4e00\u6761\u8bb0\u5f55\u548c\u4e00\u4e2a\u94fe\u63a5\u6307\u9488\uff0c\u5219\u5b8c\u6210\u4e0a\u8ff0\u63d2\u5165\u64cd\u4f5c\u9700\u8981\u8bbf\u95ee\u51e0\u6b21\u78c1\u76d8\u5757\uff1f\u82e5\u6bcf\u4e2a\u78c1\u76d8\u5757\u5927\u5c0f\u4e3a 1 KiB\uff0c\u5176\u4e2d 4 B \u5b58\u653e\u94fe\u63a5\u6307\u9488\uff0c\u5219\u8be5\u6587\u4ef6\u7cfb\u7edf\u652f\u6301\u7684\u6587\u4ef6\u6700\u5927\u957f\u5ea6\u662f\u591a\u5c11 GiB\uff1f
\u7b2c\u4e00\u9898\uff1a
\u7b2c\u4e00\u5c0f\u95ee\uff1a
\u8fde\u7eed\u5206\u914d\u7684\u8bdd\uff0c\u5c31\u6709\u70b9\u7c7b\u4f3c\u4e8e\u6570\u7ec4\u3002\u8981\u5bf9\u6570\u7ec4\u505a\u63d2\u5165\uff0c\u5c31\u9700\u8981\u79fb\u52a8\u540e\u9762\u7684\u5143\u7d20\uff0c\u4f46\u662f\u8fd9\u91cc\u63d0\u5230\uff0cF \u7684\u524d\u540e\u5747\u6709\u8db3\u591f\u7a7a\u95f2\u7684\u7a7a\u95f4\uff0c\u90a3\u4e48\u5728\u8fd9\u91cc\u628a 30 \u53f7\u4e4b\u524d\u7684\u5143\u7d20\u5f80\u524d\u79fb\u5e94\u5f53\u6bd4\u628a 29 \u53f7\u4e4b\u540e\u7684\u5143\u7d20\u5f80\u540e\u79fb\u66f4\u5feb\uff0c\u6240\u4ee5\u6211\u4eec\u8fd9\u91cc\u9009\u62e9\u5c06 1 ~ 29 \u5757\u7684\u5185\u5bb9\u5411\u524d\u79fb\u52a8\u3002 \u5bf9\u4e8e\u8fde\u7eed\u5206\u914d\uff0c\u8981\u60f3\u79fb\u52a8\u4e00\u5757\u7684\u5185\u5bb9\uff0c\u24f5 \u9996\u5148\u9700\u8981\u8bfb\u53d6\u4e00\u5757\u7684\u5185\u5bb9\uff0c\u24f6 \u7136\u540e\u662f\u5199\u5165\u53e6\u5916\u4e00\u4e2a\u5757\u3002\u56e0\u6b64\uff0c\u6bcf\u6b21\u79fb\u52a8\u90fd\u9700\u8981\u4e24\u6b21\u5bf9\u5757\u7684 I/O \u8bbf\u95ee\uff0c\u8fd9\u91cc\u4e00\u5171\u6709 29 \u4e2a\u5757\u8981\u79fb\u52a8\uff0c\u6240\u4ee5\u9700\u8981 29 * 2 = 58 \u6b21\u79fb\u52a8\u3002 \u5b8c\u6210\u79fb\u52a8\u4e4b\u540e\uff0c\u9700\u8981\u5728 30 \u5757\u7684\u4f4d\u7f6e\u5199\u5165\u65b0\u7684\u8bb0\u5f55\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e5f\u6709\u4e00\u6b21 I/O \u8bbf\u95ee\uff0c\u4e00\u5171\u662f 58 + 1 = 59 \u6b21\u3002 \u7b2c\u4e8c\u5c0f\u95ee\uff1a
\u800c\u5173\u4e8e\u6587\u4ef6\u63a7\u5236\u5757\u7684\u53d8\u5316\uff0c\u4e0e\u6587\u4ef6\u5b58\u50a8\u76f4\u63a5\u76f8\u5173\u7684\u662f\uff1a\u6587\u4ef6\u8d77\u59cb\u5730\u5740\u6539\u53d8\uff08\u5411\u524d\u79fb\u52a8\u4e00\u5757\uff09\u4ee5\u53ca\u6587\u4ef6\u957f\u5ea6\u6539\u53d8\uff08\u589e\u52a0\u4e00\u6761\u8bb0\u5f55\uff09\u3002 \u6b64\u5916\uff0c\u53ef\u80fd\u8fd8\u4f1a\u66f4\u65b0 dirty bit\u3001\u6700\u540e\u66f4\u65b0\u65f6\u95f4\u7b49\u3002 \u7b2c\u4e8c\u9898\uff1a
\u7b2c\u4e00\u5c0f\u95ee\uff1a
\u94fe\u63a5\u5206\u914d\u5c31\u7c7b\u4f3c\u4e8e\u94fe\u8868\u63d2\u5165\uff0c\u53ea\u9700\u8981\u627e\u5230\u76ee\u6807\u4f4d\u7f6e\uff0c\u7136\u540e\u5c06\u524d\u9a71\u7684 next
\u6307\u9488\u4fee\u6539\u4e3a\u63d2\u5165\u8282\u70b9\uff0c\u5c06\u63d2\u5165\u8282\u70b9\u7684 next
\u6539\u4e3a\u540e\u9a71\u5373\u53ef\u3002 \u9996\u5148\u9700\u8981\u627e\u5230 29 \u53f7\u94fe\u8282\uff0c\u94fe\u5f0f\u53ea\u652f\u6301\u987a\u5e8f\u8bbf\u95ee\uff0c\u6240\u4ee5\u9700\u8981 29 \u6b21 I/O \u8bbf\u95ee\u624d\u80fd\u627e\u5230\u7b2c 29 \u4e2a\u94fe\u8282\uff0c\u6b64\u65f6\u62ff\u5230 29 \u53f7\u94fe\u8282\u7684 next
\u6307\u9488\u5c31\u77e5\u9053 30 \u53f7\u94fe\u8282\u5728\u54ea\u91cc\u4e86\u3002 \u63a5\u4e0b\u6765\u521b\u5efa\u65b0\u94fe\u8282\uff0c\u5176 next
\u6307\u9488\u6307\u5411\u521a\u521a\u62ff\u5230\u7684 29 \u94fe\u8282\u7684 next
\u6307\u9488\uff0c\u9700\u8981 1 \u6b21 I/O \u8bbf\u95ee\u3002 \u7136\u540e\u4fee\u6539 29 \u53f7\u94fe\u8282\u7684 next
\u6307\u9488\u6307\u5411\u65b0\u94fe\u8282\uff0c\u9700\u8981 1 \u6b21 I/O \u8bbf\u95ee\u3002 \u6240\u4ee5\uff0c\u4e00\u5171\u662f 29 + 1 + 1 = 31 \u6b21 I/O \u8bbf\u95ee\u3002 \u7b2c\u4e8c\u5c0f\u95ee\uff1a
\u8fd9\u79cd\u95ee\u9898\u4e4d\u4e00\u773c\u770b\u53ef\u80fd\u4f1a\u89c9\u5f97\uff1a\u300c\u94fe\u8868\u4e0d\u662f\u4e0d\u9650\u957f\u5ea6\u5417\uff0c\u4e3a\u4ec0\u4e48\u4f1a\u6709\u6700\u5927\u5927\u5c0f\u300d\uff0c\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u6307\u9488\u662f\u5b9a\u957f\u7684\uff0c\u5730\u5740\u662f\u6709\u9650\u7684\uff0c\u56e0\u6b64\u51b3\u5b9a\u4e86\u94fe\u8282\u4e5f\u662f\u6709\u9650\u7684\u3002 \u6240\u4ee5\uff0c\u8fd9\u91cc\u7684\u300c\u5176\u4e2d 4 B \u5b58\u653e\u94fe\u63a5\u6307\u9488\u300d\u5305\u542b\u4e86\u4e24\u4e2a\u4fe1\u606f\uff1a\u24f5 \u6bcf\u4e2a\u78c1\u76d8\u5757\u6709\u6548\u5b58\u50a8\u7a7a\u95f4\u4e3a 1 KiB - 4 B\uff0c\u24f6 \u6700\u591a\u53ea\u6709 232 \u4e2a\u94fe\u8282\u3002 \u56e0\u6b64\uff0c\u8be5\u6587\u4ef6\u7cfb\u7edf\u652f\u6301\u7684\u6587\u4ef6\u6700\u5927\u957f\u5ea6\u4e3a 232 * (1 KiB - 4 B) = 4080 GiB\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u7a7a\u95f2\u7a7a\u95f4\u7ba1\u7406","title":"\u7a7a\u95f2\u7a7a\u95f4\u7ba1\u7406","text":"\u6211\u4eec\u524d\u9762\u5728\u6587\u4ef6\u7cfb\u7edf\u5206\u5c42\u8bbe\u8ba1\u91cc\u63d0\u5230\u8fc7\uff0cfile-organization module \u9700\u8981\u8d1f\u8d23\u8fdb\u884c\u7a7a\u95f2\u7a7a\u95f4\u7684\u7ba1\u7406\u3002\u73b0\u5728\u6211\u4eec\u6765\u8003\u8651\u5982\u4f55\u7ba1\u7406\u7a7a\u95f2\u7a7a\u95f4\u3002
\u4f4d\u56fe \u4f4d\u56fe(bitmap)\u5373\u4f4d\u5411\u91cf\uff0c\u7528\u5bf9\u5e94 bit \u7684 0 \u6216 1 \u6765\u6807\u8bb0\u5bf9\u5e94\u7684 block \u662f\u5426\u7a7a\u95f2\u3002
\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\u9700\u8981\u5e26\u6765\u7684\u989d\u5916\u5f00\u9500\u662f\uff0c\u6709\u591a\u5c11 blocks \u5c31\u9700\u8981\u591a\u5c11\u4e2a\u989d\u5916\u7684 bits\u3002\u4f8b\u5982\uff0c\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 4 KiB\uff0c\u786c\u76d8\u4e00\u5171\u6709 1 GiB\uff0c\u5219\u9700\u8981 230 / 212 = 218 = 256 KiB \u7684\u989d\u5916\u7a7a\u95f4\u6765\u5b58\u50a8\u4f4d\u56fe\u3002
\u76f8\u5bf9\u6765\u8bf4\u5bb9\u6613\u5f97\u5230\u8fde\u7eed\u7684\u7a7a\u95f4\uff0c\u56e0\u4e3a bitmap \u4e2d bit \u7684\u76f8\u90bb\u6697\u793a block \u7684\u76f8\u90bb\u3002
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u6587\u4ef6\u7cfb\u7edf\u7528\u4f4d\u56fe\u6cd5\u8868\u793a\u78c1\u76d8\u7a7a\u95f4\u7684\u5206\u914d\u60c5\u51b5\uff0c\u4f4d\u56fe\u5b58\u4e8e\u78c1\u76d8\u7684 32 ~ 127 \u53f7\u5757\u4e2d\uff0c\u6bcf\u4e2a\u76d8\u5757\u5360 1024 B\uff0c\u76d8\u5757\u548c\u5757\u5185\u5b57\u8282\u5747\u4ece 0 \u5f00\u59cb\u7f16\u53f7\u3002\u5047\u8bbe\u8981\u91ca\u653e\u7684\u76d8\u5757\u53f7\u4e3a 409612\uff0c\u5219\u4f4d\u56fe\u4e2d\u4fee\u6539\u7684\u4f4d\u6240\u5728\u7684\u76d8\u5757\u53f7\u548c\u5757\u5185\u5b57\u8282\u504f\u79fb\u91cf\u5206\u522b\u662f_____\u3002
A. 82 \u548c 2\uff1b B. 82 \u548c 1\uff1b C. 81 \u548c 2\uff1b D. 81 \u548c 1\uff1b \u9996\u5148\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u8003\u8651\u4f4d\u56fe\u5728\u78c1\u76d8\u4e2d\u7684\u4f4d\u7f6e\u662f\u5426\u5bf9\u8ba1\u7b97\u6709\u6ca1\u6709\u5f71\u54cd\uff0c\u53ea\u9700\u8981\u5c06\u5b83\u4eec\u770b\u4f5c\u6b63\u5e38\u7684\u78c1\u76d8\u5373\u53ef\u3002\u4e8e\u662f\u6211\u4eec\u77e5\u9053\uff0c\u5728\u300c\u4f4d\u56fe\u5b58\u4e8e\u78c1\u76d8\u7684 32 ~ 127 \u53f7\u5757\u4e2d\u300d\u8fd9\u53e5\u8bdd\u4e2d\uff0c\u6709\u7528\u7684\u4fe1\u606f\u5b9e\u9645\u4e0a\u662f \u24f5 \u4f4d\u56fe\u4ece 32 \u53f7\u76d8\u5f00\u59cb\uff0c\u24f6 \u4f4d\u56fe\u4e00\u5171\u7528\u4e86 127 - 32 + 1 = 96 \u4e2a\u76d8\u5757\uff0c\u5176\u4e2d\u540e\u8005\u5728\u672c\u9053\u9898\u91cc\u7528\u4e0d\u5230\u3002
\u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u76f4\u63a5\u8ba1\u7b97 409612 \u5bf9\u5e94\u7684\u4f4d\u6bd4\u7279\u5728\u54ea\u91cc\u3002
\u6839\u636e\u4f4d\u56fe\u6cd5\u7684\u539f\u7406\uff0c\u4e00\u4e2a\u5b57\u8282\u80fd\u8868\u793a 8 \u4e2a\u5757\u3001\u4e00\u4e2a\u76d8\u5757\u80fd\u8868\u793a 8 * 1024 \u4e2a\u5757\u3002\u56e0\u6b64\uff1a
409612 / (8 * 1024) = 50 ... 12
\u5176\u4e2d\uff0c50 \u8868\u793a\u5b83\u88ab\u7b2c 50 \u4e2a\u4f4d\u56fe\u5757\u4e2d\u88ab\u8868\u793a\uff0c\u5757\u5185\u6bd4\u7279\u504f\u79fb\u91cf\u4e3a 12\u3002
\u4f46\u662f\uff0c\u4f4d\u56fe\u4ece 32 \u5757\u624d\u5f00\u59cb\uff0c\u6240\u4ee5\u8868\u793a\u8fd9\u4e00\u5757\u7684\u4f4d\u56fe\u5757\u53f7\u5e94\u5f53\u662f 50 + 32 = 82\uff0c\u800c\u5757\u5185\u5b57\u8282\u504f\u79fb\u91cf\u4e3a 12 / 8 = 1\u3002\uff08\u5b57\u8282\u504f\u79fb\u91cf\u662f 1 \u8bf4\u660e\u662f\u7b2c\u4e8c\u4e2a\u5b57\u8282\uff01\u4ece 0 \u5f00\u59cb\u7b97\uff01\uff09
\u94fe\u8868 \u7c7b\u4f3c free-frame list\uff0c\u7528\u94fe\u8868\u5c06\u7a7a\u95f2\u7684 block \u8fde\u8d77\u6765\u3002
\u4e0d\u5bb9\u6613\u9020\u6210\u7a7a\u95f4\u6d6a\u8d39\uff0c\u4f46\u4e0d\u592a\u5bb9\u6613\u5f97\u5230\u8fde\u7eed\u7684\u7a7a\u95f4\u3002
\u5206\u7ec4 \u5c06 n \u4e2a\u7a7a\u95f2\u5757\u7684\u5730\u5740\u5b58\u653e\u5728\u7b2c 0 \u4e2a\u7a7a\u95f2\u5757\u4e2d\uff0c\u5728\u7b2c n \u4e2a\u7a7a\u95f2\u5757\u5b58\u50a8\u540e n \u4e2a\u7a7a\u95f2\u5757\u7684\u5730\u5740\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002
\u8ba1\u6570 \u8ba1\u6570\u65b9\u6cd5\u662f\u57fa\u4e8e\u94fe\u8868\u65b9\u6cd5\u7684\u6539\u8fdb\uff0c\u57fa\u4e8e\u8fde\u7eed\u7a7a\u95f4\u901a\u5e38\u88ab\u4e00\u8d77\u4f7f\u7528\u7684\u5047\u8bbe\uff0c\u4e0d\u662f\u5b58\u50a8\u6bcf\u4e2a\u4e00\u4e2a block\uff0c\u800c\u662f\u53ea\u7ef4\u62a4\u6bcf\u4e2a\u8fde\u7eed\u5185\u5b58\u6bb5\u7684\u8d77\u59cb\u5730\u5740\u548c\u957f\u5ea6\uff08\u5757\u6570\uff09\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5178\u578b\u6587\u4ef6\u7cfb\u7edf","title":"\u5178\u578b\u6587\u4ef6\u7cfb\u7edf","text":"ext TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
Links
Inode structure - record rec_len? | StackOverflow
FAT TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
Links
FAT \u5373 file-allocation table\uff0c\u662f\u4e00\u79cd\u94fe\u63a5\u5206\u914d\u7684\u53d8\u79cd\uff0c\u4f7f\u7528 FAT \u7684\u6587\u4ef6\u7cfb\u7edf\u6709 FAT12\u3001FAT16\u3001FAT32\u3001exFAT\uff0864\u4f4d\uff09\u3002\u7531\u4e8e\u7b80\u5355\u9ad8\u6548\uff0c\u5b83\u88ab MS-DOS \u4f7f\u7528\u3002
FAT \u7684\u6bcf\u4e2a\u76ee\u5f55\u9879\u4e3a 32 \u4e2a\u5b57\u8282\u3002 FAT32 \u957f\u6587\u4ef6\u540d\u7684\u76ee\u5f55\u9879\u7531\u51e0\u4e2a 32 B \u8868\u9879\u7ec4\u6210\u3002 \u7528\u4e00\u4e2a\u8868\u9879\u5b58\u653e\u77ed\u6587\u4ef6\u540d\u548c\u5176\u4ed6\u5c5e\u6027\uff08\u5305\u62ec\u7c07\u53f7\u3001\u6587\u4ef6\u5927\u5c0f\uff0c\u6700\u540e\u4fee\u6539\u65f6\u95f4\u548c\u6700\u540e\u4fee\u6539\u65e5\u671f\u3001\u521b\u5efa\u65f6\u95f4\u3001\u521b\u5efa\u65e5\u671f\u548c\u6700\u540e\u5b58\u53d6\u65e5\u671f\uff09\uff0c\u77ed\u6587\u4ef6\u540d\u7684\u5c5e\u6027\u662f 0x20
\u3002 \u7528\u8fde\u7eed\u82e5\u5e72\u4e2a\u8868\u9879\u5b58\u653e\u957f\u6587\u4ef6\u540d\uff0c\u6bcf\u4e2a\u8868\u9879\u5b58\u653e 13 \u4e2a\u5b57\u7b26\uff08\u4f7f\u7528 Unicode \u7f16\u7801\uff0c\u6bcf\u4e2a\u5b57\u7b26\u5360\u7528 2 \u4e2a\u5b57\u8282\uff09\u3002 \u957f\u6587\u4ef6\u540d\u7684\u8868\u9879\u9996\u5b57\u8282\u7684\u4e8c\u8fdb\u5236\u6570\u4f4e 5 \u4f4d\u503c\uff0c\u5206\u522b\u4e3a 00001
\u300100010
\u300100011
\u3001...\u8868\u793a\u5b83\u4eec\u7684\u6b21\u5e8f\uff0c\u5de6\u8d77\u7b2c 2 \u4f4d\u4e3a 1\uff08\u4e5f\u5c31\u662f\u5728\u4f4e 5 \u4f4d\u57fa\u7840\u4e0a\u52a00x40
\uff09\u8868\u793a\u8be5\u8868\u9879\u662f\u6700\u540e\u4e00\u9879\u3002\u6700\u540e\u9879\u5b58\u653e 13 \u4e2a\u5b57\u7b26\u4f4d\u7f6e\u591a\u4f59\u65f6\uff0c\u5148\u7528 2 \u4e2a\u5b57\u8282 0 \u8868\u793a\u7ed3\u675f\uff0c\u518d\u7528 0xFF`` \u586b\u5145\u3002\u957f\u6587\u4ef6\u540d\u7684\u5c5e\u6027\u662f
0x0F\u3002\u957f\u6587\u4ef6\u540d\u9879\u7684\u7b2c 13\u300127\u300128 \u5b57\u8282\u4e3a
0x00`\uff0c\u7b2c 14 \u5b57\u8282\u4e3a\u77ed\u6587\u4ef6\u540d\u6821\u9a8c\u548c\u3002 NTFS TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
Links
\u6bcf\u4e2a\u5206\u533a\u90fd\u6709 MFT \u5373 master file table\u3002 MFT \u7531\u4e00\u4e2a\u4e2a MFT entry\uff08\u4e5f\u79f0\u4e3a\u6587\u4ef6\u8bb0\u5f55\uff09\u7ec4\u6210\uff0c\u6bcf\u4e2a MFT entry \u5360\u7528 1 KB \u7684\u7a7a\u95f4\u3002 MFT \u524d 16 \u4e2a\u8bb0\u5f55\u7528\u6765\u5b58\u653e\u5143\u6570\u636e\u6587\u4ef6\u7684\u4fe1\u606f\uff0c\u5b83\u4eec\u5360\u6709\u56fa\u5b9a\u7684\u4f4d\u7f6e\u3002 \u6bcf\u4e2a MFT entry \u5934\u90e8(header)\u7684\u51e0\u5341\u4e2a\u5b57\u8282\u6709\u7740\u56fa\u5b9a\u7684\u7ed3\u6784\uff0c\u7528\u6765\u63cf\u8ff0\u8be5 MFT entry \u7684\u76f8\u5173\u4fe1\u606f\uff1b\u540e\u9762\u7684\u5b57\u8282\u5b58\u653e\u7740\u6587\u4ef6\u5c5e\u6027\u7b49\u4fe1\u606f\u3002 \u6bcf\u4e2a\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u4fe1\u606f\u90fd\u5305\u542b\u5728 MFT \u4e2d\uff0c\u6bcf\u4e2a\u6587\u4ef6\u6216\u76ee\u5f55\u81f3\u5c11\u5bf9\u5e94\u4e00\u4e2a MFT entry\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u865a\u62df\u6587\u4ef6\u7cfb\u7edf","title":"\u865a\u62df\u6587\u4ef6\u7cfb\u7edf","text":"\u6211\u4eec\u5728\u524d\u9762\u7ed9\u51fa\u4e86\u5927\u91cf\u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\uff0c\u4f46\u662f\u64cd\u4f5c\u7cfb\u7edf\u5e94\u5f53\u80fd\u5e7f\u6cdb\u652f\u6301\u5404\u79cd\u6587\u4ef6\u7cfb\u7edf\uff08\u4e0d\u540c\u7684 disk \u4f7f\u7528\u7684 FS \u53ef\u80fd\u4e0d\u540c\uff09\u3002\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u5728\u6587\u4ef6\u7cfb\u7edf\u4e0a\u518d\u505a\u4e00\u6b21\u62bd\u8c61\uff0c\u5373\u865a\u62df\u6587\u4ef6\u7cfb\u7edf(virtual FS, VFS)\u3002
Schematic view of a virtual file system.
VFS \u6709\u4e24\u4e2a\u4e3b\u8981\u529f\u80fd\uff1a
\u5c01\u88c5\u5e76\u900f\u660e\u5316\u5177\u4f53\u6587\u4ef6\u64cd\u4f5c\uff0c\u540c\u4e00\u63a5\u53e3\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u5177\u4f53\u5b9e\u73b0\uff08\u7c7b\u4f3c\u4e8e\u201c\u591a\u6001\u201d\uff09\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u6765\u652f\u6301\u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\uff1b \u53cd\u8fc7\u6765\u4e3a\u6587\u4ef6\u7cfb\u7edf\u63d0\u4f9b\u4e00\u4e2a\u552f\u4e00\u6807\u8bc6\u6587\u4ef6\u7684\u65b9\u5f0f\uff0cVFS \u57fa\u4e8e\u4e00\u4e2a\u540d\u4e3a vnode \u7684 file-representation structure \u7684\u4e1c\u897f\u6765\u8868\u793a\u6587\u4ef6\uff0c\u5176\u4e2d\u5305\u542b\u4e86\u5728\u6574\u4e2a\u6587\u4ef6\u7f51\u7edc\u4e2d\u6807\u8bc6\u6587\u4ef6\u7684\u6570\u5b57\u6307\u793a\u7b26\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\u4e0e\u5b89\u5168","title":"\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\u4e0e\u5b89\u5168","text":"TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u9875\u7f13\u51b2","title":"\u9875\u7f13\u51b2","text":"\u9875\u7f13\u51b2(page cache)\u6280\u672f\u901a\u8fc7\u865a\u62df\u5185\u5b58\u6280\u672f\uff0c\u4ee5\u9875\u4e3a\u5355\u4f4d\u8fdb\u884c\u7f13\u51b2\uff0c\u800c\u975e\u4ee5\u9762\u5411 FS \u7684 block \u4e3a\u5355\u4f4d\u3002\u56e0\u4e3a\u4f7f\u7528\u865a\u62df\u5185\u5b58\u76f8\u5173\u7684\u63a5\u53e3\u4f1a\u6bd4\u4f7f\u7528\u6587\u4ef6\u7cfb\u7edf\u7684\u76f8\u5173\u63a5\u53e3\u66f4\u5feb\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6062\u590d","title":"\u6062\u590d","text":"\u5907\u4efd\u6570\u636e\uff0c\u5e76\u65f6\u5e38\u68c0\u67e5\u6570\u636e\u7684\u4e00\u81f4\u6027\u548c\u5b8c\u6574\u6027\uff0c\u5982\u679c\u53d1\u73b0\u95ee\u9898\u5219\u5c1d\u8bd5\u5229\u7528\u5907\u4efd\u6570\u636e\u8fdb\u884c\u6062\u590d\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u65e5\u5fd7\u7cfb\u7edf","title":"\u65e5\u5fd7\u7cfb\u7edf","text":"\u65e5\u5fd7\u7ed3\u6784\u7684\u6587\u4ef6\u7cfb\u7edf(log-structured FS)\u662f\u4e00\u79cd\u6587\u4ef6\u7cfb\u7edf\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u5b83\u5c06\u6240\u6709\u7684\u4fee\u6539\u64cd\u4f5c\u90fd\u4f5c\u4e3a\u4e00\u4e2a\u4e8b\u52a1(transaction)\u8bb0\u5f55\u5728\u4e00\u4e2a\u65e5\u5fd7\u4e2d\uff0c\u800c\u4e0d\u662f\u76f4\u63a5\u4fee\u6539\u6587\u4ef6\u672c\u8eab\uff08\u5bf9\u4e8e\u6587\u4ef6\u7684\u4fee\u6539\u548c\u65e5\u5fd7\u7684\u521b\u5efa\u662f\u5f02\u6b65\u7684\uff09\u3002
\u8fd9\u79cd\u65b9\u5f0f\u7684\u597d\u5904\u662f\uff0c\u5f53\u7cfb\u7edf\u5d29\u6e83\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u65e5\u5fd7\u6765\u6062\u590d\u6587\u4ef6\u7cfb\u7edf\u3002
ISO/IEC 10918-1: 1993(E) p.36\uff0c\u5176\u4e2d SOI (Start Of Image) \u7684\u503c\u4e3a 0xFFD8
\u3002\u00a0\u21a9
Why are hard links not allowed for directories? \u21a9
File Permissions \u21a9
Implementation of File Systems \u21a9\u21a9
Device driver | Wikipedia \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
\u672c\u6587\u9762\u5411 \u8ba4\u4e3a PPT \u5e76\u4e0d\u9ad8\u6548\uff0c\u4f46\u540c\u65f6\u53c8\u786e\u5b9e\u9700\u8981\u4e00\u79cd\u300c\u6f14\u793a\u300d\u9014\u5f84 \u7684\u504f\u6280\u672f\u4eba\u5458\uff1b \u867d\u7136\u5de5\u5177\u57fa\u4e8e\u524d\u7aef\u6280\u672f\u6808\uff0c\u4f46\u524d\u7aef\u77e5\u8bc6\u4ec5\u51b3\u5b9a\u5de5\u5177\u4f7f\u7528\u4e0a\u9650\uff0c\u5b8c\u5168\u53ef\u4ee5\u505a\u5230\u65e0\u524d\u7aef\u57fa\u7840\u8fdb\u884c\u57fa\u7840\u4f7f\u7528\uff1b \u6211\u5e76\u6ca1\u6709\u5c1d\u8bd5\u8fc7\u8131\u79bb\u547d\u4ee4\u884c\u6765\u5b9e\u73b0\u8fd9\u4e9b\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5927\u6982\u201c\u504f\u6280\u672f\u201d\u4eba\u5458\u4e0d\u5e94\u5f53\u4e0d\u4f1a\u4f7f\u7528\u547d\u4ee4\u884c\uff0c\u81f3\u5c11\u4f60\u8981\u77e5\u9053\u5728\u54ea\u91cc\u80fd\u8fd0\u884c\u547d\u4ee4\uff1b\u6b64\u5916\uff0c\u60a8\u9700\u8981\u786e\u4fdd\u60a8\u7684\u547d\u4ee4\u884c\u73af\u5883\u80fd\u591f\u4f7f\u7528 npm\uff1b "},{"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
reveal.js
\u7684\u5b98\u65b9 demo\uff1a\ud83d\udd17 \u6211\u81ea\u5df1\u5199\u7684\u4e00\u4e2a project\uff1a\ud83d\udd17 reveal-md
\u7684 github repo\uff1a\ud83d\udd17 "},{"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
PPT \u7b49\u56fe\u5f62\u5316\u7684\u300c\u6f14\u793a\u300d\u6587\u6863\u5236\u4f5c\u5e73\u53f0\uff1b \u4f7f\u7528Beamer
\u3001reveal.js
\u3001nodeppt
\u7b49\u5de5\u5177\uff0c\u4f7f\u7528\u4ee3\u7801\u7f16\u5199\u300c\u6f14\u793a\u300d\u6587\u6863\uff1b \u8bed\u96c0\u7684\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff1b \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
\u901a\u8fc7\u70b9\u51fb/ \u7a7a\u683c\u6765\u9009\u62e9\u4e0b\u4e00\u9875\uff0c\u4f7f\u7528 h/\u2190
j/\u2193
k/\u2191
l/\u2192
\u6216\u8005\u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u65b9\u5411\u76d8\u6765\u8fdb\u884c\u4e0a\u4e0b\u5de6\u53f3\u5207\u6362\uff0c\u76f4\u63a5\u70b9\u51fb\u9875\u9762\u5e95\u90e8\u7684\u8fdb\u5ea6\u6761\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u9875\u9762\u8df3\u8f6c\u3002
\u6309\u4e0b f
\u6765\u5168\u5c4f\u663e\u793a\uff0c\u6309\u4e0b Esc
\u6216\u8005 f
\u9000\u51fa\u3002 \u6309 f
\u4e4b\u524d\u3002 \u5168\u5c4f\u663e\u793a\u3002 \u6309\u4e0bs
\u8fdb\u5165\u6f14\u8bb2\u8005\u6a21\u5f0f\uff0c\u4e5f\u5c31\u662f\u518d\u591a\u8df3\u51fa\u6765\u4e00\u4e2a\u5f39\u7a97\uff0c\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\u53ef\u4ee5\u5728\u6295\u5f71\u4eea\u91cc\u653e\u5168\u5c4f\uff0c\u5728\u81ea\u5df1\u7535\u8111\u4e0a\u5c55\u793a\u8fd9\u4e2a\u7a97\u53e3\u3002\u4fee\u6539\u53f3\u4e0a\u89d2\u7684 Layout \u53ef\u4ee5\u4fee\u6539\u663e\u793a\u6a21\u5f0f\u3002Notes
\u7684\u5185\u5bb9\u4f1a\u5728\u540e\u9762\u4ecb\u7ecd\uff0c\u7c7b\u4f3c\u4e8e PPT \u7684\u5907\u6ce8\u3002
\u6309\u4e0bo
\u8fdb\u5165\u603b\u89c8\u89c6\u56fe\uff0c\u53ef\u4ee5\u5229\u7528\u65b9\u5411\u952e\u8fdb\u884c\u79fb\u52a8\uff0c\u56de\u8f66\u6216\u70b9\u51fb\u8fdb\u884c\u9009\u62e9\u3002\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u663e\u793a\u7684\u5185\u5bb9\u548c\u5b9e\u9645\u5c55\u793a\u7684\u9875\u9762\u5185\u5bb9\u5728\u5e03\u5c40\u4e0a\u5b58\u5728\u5dee\u5f02\u3002
\u6309\u4e0bv
\u6216.
\u9ed1\u5c4f\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\u5c06 <!--s-->
\u8bbe\u4e3a separator\uff0c\u5c06 <!--v-->
\u8bbe\u4e3a vertical separator\u3002 \u8fd9\u4e00\u90e8\u5206\u5185\u5bb9\u9700\u8981\u653e\u5728 md
\u6587\u4ef6\u7684\u5f00\u5934\uff0c\u4e4b\u540e\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u3002 \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
title
\u5373\u663e\u793a\u5728\u7f51\u9875\u6807\u7b7e\u4e0a\u5185\u5bb9\uff1b (vertical)separator
\u5373\u4e4b\u524d\u63d0\u5230\u8fc7\u7684\u4e24\u4e2a separator
\uff1b theme
\u4e3a Slides \u4e3b\u9898\uff0c\u53ef\u4f9b\u4f7f\u7528\u7684\u5b98\u65b9\u9ed8\u8ba4\u4e3b\u9898\u53ef\u4ee5\u770b\u8fd9\u91cc\uff1a\ud83d\udd17\uff1b highlightTheme
\u4e3a\u4ee3\u7801\u6846\u9ad8\u4eae\u4e3b\u9898\uff0c\u5b98\u65b9\u5bf9\u9ad8\u4eae\u4e3b\u9898\u7684\u8bf4\u660e\u5728\u8fd9\u91cc\uff1a\ud83d\udd17\uff1b revealOptions
\u5219\u5bf9\u5e94\u4e86 reveal.js
\u4e2d config \u7684\u5185\u5bb9\uff1b \u8fd9\u4e00\u5757\u4e0d\u53ea\u8fd9\u4e9b\u5185\u5bb9\uff0c\u6d89\u53ca\u7684\u5185\u5bb9\u975e\u5e38\u591a\uff0creveal.js
\u5b98\u65b9\u7684\u6587\u6863\u4e2d\u90fd\u6709\u8be6\u7ec6\u7684\u5185\u5bb9\uff0c\u6211\u8fd9\u91cc\u5217\u51fa\u4e86 \u5bbd\u3001\u9ad8\u3001\u8fb9\u754c\u3001\u6362\u9875\u52a8\u753b\u3001\u6807\u53f7 \u7b49\u3002 \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
\u8fd9\u4e2a\u95ee\u9898\u6211\u8fd8\u63d0\u4e86\u4e2a issue\uff0c\u91cc\u9762\u4e5f\u9644\u4e86\u89e3\u51b3\u7684\u529e\u6cd5\uff1a--static with --theme generate the index.html
with the wrong path of theme.css
\u5728\u4f7f\u7528 gh-page \u8fdb\u884c\u90e8\u7f72\uff0c\u5e76\u4e14\u6307\u5b9a\u4e86\u989d\u5916\u7684 css
\u6587\u4ef6\u7684\u65f6\u5019\uff0c\u4e00\u5b9a\u8981\u6dfb\u52a0 --assets-dir assets
\uff0c\u5426\u5219\u9ed8\u8ba4\u7684\u7d20\u6750\u6587\u4ef6\u5939\u7684\u540d\u5b57\u662f _assets
\uff0c\u800c _
\u5f00\u5934\u7684\u6587\u4ef6\u5939\u4f1a\u88ab gh-page \u5ffd\u7565\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
\u6587\u7ae0\u9898\u76ee\uff1aAction-Conditioned 3D Human Motion Synthesis with Transformer VAE \u5206\u7c7b\uff1aComputer Science
> Computer Vision and Pattern Recognition
\u4f5c\u8005\uff1aMathis Petrovich, Michael J. Black, G\u00fcl Varol \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2104.05670 \u4ee3\u7801\uff1a\ud83d\udd17 \u76f8\u5173\u5185\u5bb9
Transformer VAE SMPL \u4e00\u4e2a\u6027\u8d28\u826f\u597d\u7684\u4eba\u4f53\u6a21\u578b\u89c4\u8303 MoCap "},{"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":" Future human motion prediction Human motion synthesis Monocular human motion estimation Transformer VAEs \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
\u6587\u7ae0\u9898\u76ee\uff1aEG3D: Efficient Geometry-aware 3D Generative Adversarial Networks \u4f5c\u8005\uff1a Eric Ryan Chan * 1, 2 , Connor Zhizhen Lin * 1 , Matthew Aaron Chan * 1 , Koki Nagano * 2 , Boxiao Pan 1 , Shalini De Mello 2 , Orazio Gallo 2 , Leonidas Guibas 1 , Jonathan Tremblay 2 , Sameh Khamis 2 , Tero Karras 2 , Gordon Wetzstein 1 \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2112.07945 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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
\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 \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
https://www.cnblogs.com/ghostcai/p/16615616.html \uff08\u7b14\u8bb0\uff09 "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aMAS: Multi-view Ancestral Sampling for 3D Motion Generation Using 2D Diffusion \u4f5c\u8005\uff1aRoy Kapon, Guy Tevet, Daniel Cohen-Or, Amit H. Bermano \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2310.14729 "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aNeural State Machine for Character-Scene Interactions \u4f5c\u8005\uff1aSebastian Starke, He Zhang, Taku Komura, Jun Saito \u8bba\u6587\uff1a\ud83d\udd17 "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aNeRF: Representing Scenes as Neural Radiance Fields for View Synthesis \uff08\u795e\u7ecf\u8f90\u5c04\u573a\uff09 \u5206\u7c7b\uff1aComputer Science
> Computer Vision and Pattern Recognition
\u4f5c\u8005\uff1aBen Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren Ng \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2003.08934 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"location":"pape_read/NeRF/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NeRF/#\u8d21\u732e","title":"\u8d21\u732e","text":" \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 \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 \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
\u53ef\u4ee5\u8868\u8fbe\u590d\u6742\u771f\u5b9e\u7684\u51e0\u4f55\u5f62\u72b6 \u9002\u5408\u4f7f\u7528\u6295\u5f71\u56fe\u50cf\u505a\u68af\u5ea6\u4f18\u5316 \u95ee\u9898\uff1a\u4ec0\u4e48\u610f\u601d\uff1f \u964d\u4f4e\u4e86\u9ad8\u5206\u8fa8\u7387\u7a7a\u95f4\u56fe\u50cf\u7684\u5b58\u50a8\u6210\u672c "},{"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} \\] \u5168\u662f FC\uff1b \u8f93\u5165\u662f 5D \u5ea7\u6807\u2014\u2014\u70b9\u7684\u7a7a\u95f4\u5ea7\u6807 \\((x,y,z)\\) \u548c\u89c6\u89d2\u65b9\u5411 \\((\\theta, \\phi)\\)\uff1b \u8f93\u51fa\u662f\u4f53\u79ef\u5bc6\u5ea6\u4ee5\u53ca\u5bf9\u5e94\u7a7a\u95f4\u4f4d\u7f6e\u7684\u4e0e\u89c6\u89d2\u6709\u5173\u7684\u8f90\u5c04\uff08\u6216\u8005\u8bf4\u89c6\u89d2\u6709\u5173\u7684 RGB \u989c\u8272\uff09\uff1b \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
\u5173\u4e8e\u5bc6\u5ea6 \\(\\sigma\\) \u7684\u51fd\u6570\uff0c\u4ec5\u4e0e\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e \\(\\mathrm{x} = (x,y,z)\\) \u6709\u5173\uff0c\u800c\u4e0e\u89c6\u89d2\u65e0\u5173\uff1b \u5173\u4e8e\u989c\u8272 \\(\\mathrm{c}\\) \u7684\u51fd\u6570\uff0c\u4e0e\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e \\(\\mathrm{x} = (x,y,z)\\) \u548c\u89c2\u5bdf\u65b9\u5411 \\(\\mathrm{d}\\) \u540c\u65f6\u6709\u5173\uff1b \u8fd9\u5927\u6982\u4e0e NeRF \u5728\u4e0d\u540c\u89c6\u89d2\u4e0a\u5149\u5f71\u8868\u73b0\u7684\u826f\u597d\u4e5f\u6709\u8f83\u5927\u5173\u7cfb\uff1b \u5b9e\u73b0\u4e0a\u662f\u5148\u901a\u8fc7 MLP \u7528 \\(\\mathrm{x}\\) \u8bad\u7ec3\u51fa \\(\\sigma\\) \u548c\u4e00\u4e2a\u4e2d\u95f4\u7279\u5f81\u5411\u91cf\uff0c\u518d\u5c06\u8fd9\u4e2a\u4e2d\u95f4\u5411\u91cf\u4e0e \\(\\mathrm{d}\\) \u62fc\u63a5\uff0c\u7ee7\u7eed\u653e\u5230 MLP \u4e2d\uff1b \u5229\u7528\u5982\u4e0a\u201c\u51fd\u6570\u201d\uff0c\u5177\u4f53\u6765\u8bf4\u64cd\u4f5c\u5982\u4e0b\uff1a
\u5728\u573a\u666f\u4e2d\u5339\u914d\u7a7f\u8fc7\u7684\u76f8\u673a\u5149\u7ebf\u4ee5\u751f\u6210\u91c7\u6837\u7684 3D \u70b9\u96c6\u5408\uff1b \u4f7f\u7528\u8fd9\u4e9b\u70b9\u4ee5\u53ca\u5bf9\u5e94\u7684 2D \u89c6\u89d2\u65b9\u5411\u8f93\u5165\u5230\u7f51\u7edc\u4e2d\uff0c\u4ee5\u5f97\u5230\u989c\u8272\u548c\u5bc6\u5ea6\u96c6\u5408\uff1b \u4f7f\u7528\u4f20\u7edf\u7684\u4f53\u79ef\u6e32\u67d3\u6280\u672f\u7d2f\u79ef\u8fd9\u4e9b\u989c\u8272\u548c\u5bc6\u5ea6\u4ee5\u5f97\u5230 2D \u56fe\u50cf\uff1b \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
\u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u6765\u4f7f MLP \u80fd\u591f\u652f\u6301\u66f4\u9ad8\u9891\u7684\u56fe\u50cf\u4fe1\u606f\uff1b \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 https://zhuanlan.zhihu.com/p/360365941 \uff08\u7b14\u8bb0 \u5173\u4e8e\u4f53\u79ef\u6e32\u67d3\u8bb2\u5f97\u5f88\u6e05\u6670\uff09 https://zhuanlan.zhihu.com/p/380015071 \uff08\u7b14\u8bb0\uff09 https://wandb.ai/wandb_fc/chinese/reports/NeRF-Neural-Radiance-Fields-View-Synthesis---VmlldzozNDQxNzk \uff08\u4fa7\u91cd\u5982\u4f55\u4f7f\u7528\uff09 https://www.youtube.com/watch?v=nCpGStnayHk\uff08\u4e0a\u9762\u90a3\u7bc7\u6587\u7ae0\u7684\u4ecb\u7ecd\u89c6\u9891\uff09 https://blog.csdn.net/qq_43620967/article/details/124467551 \uff08\u7ffb\u8bd1\uff09 https://blog.csdn.net/weixin_44292547/article/details/126042398 \uff08\u7ffb\u8bd1\uff09 https://blog.csdn.net/weixin_44580210/article/details/122284120 \uff08\u7b14\u8bb0\uff09 \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
\u6587\u7ae0\u9898\u76ee\uff1aLearning Human Mesh Recovery in 3D Scenes \u4f5c\u8005\uff1a Zehong Shen, Zhi Cen, Sida Peng, Qing Shuai, Hujun Bao, Xiaowei Zhou \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 \u8bba\u6587\uff1a\ud83d\udd17 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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":" SA-HMR = scene-aware human mesh recovery \u9884\u5148\u7ed9\u5b9a\u626b\u63cf\u597d\u7684\u573a\u666f\uff0c\u518d\u6839\u636e\u5355\u5f20\u7167\u7247\u4f30\u8ba1\u4eba\u7684\u7edd\u5bf9\u4f4d\u7f6e\u548c\u59ff\u52bf "},{"location":"pape_read/SA-MHR/#\u4f18\u52bf\u4e0e\u8d21\u732e","title":"\u4f18\u52bf\u4e0e\u8d21\u732e","text":" \u76f8\u6bd4\u4f20\u7edf\u7684\u901a\u8fc7\u4f18\u5316\u8fed\u4ee3\u7684\u751f\u6210\u529e\u6cd5\uff0c\u672c\u65b9\u6cd5\u5728\u63a8\u65ad\u8fc7\u7a0b\u4e2d\u66f4\u52a0\u8fc5\u901f\uff1b \u95ee\u9898\uff1a\u6700\u4f18\u5316\u4e2d\u7684 contact regions \u7684 chamfer distance \u7ea6\u675f\u662f\u4e3a\u4e86\u4ec0\u4e48\uff1f \u5c3d\u53ef\u80fd\u589e\u52a0\u4e00\u56e2\u7684\u805a\u5408\u6027\uff1f \u662f\u3002 \u6982\u62ec\u8d21\u732e\uff1a
\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 \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 \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":" \u4f30\u8ba1\u4eba\u4f53\u7684\u5168\u5c40\u4f4d\u7f6e(absolute human position)\u3001\u573a\u666f\u63a5\u89e6\u70b9(dense scene contacts)\u3001\u4ee5\u53ca\u4e00\u4e2a\u573a\u666f\u611f\u77e5\u7684\u4eba\u4f53\u7f51\u683c(scene aware human mesh)\uff1b \u51c6\u5907\u5de5\u4f5c\uff1a \u4eba\u4f53 \u4f7f\u7528 SMPL \u6765\u8868\u793a\u4eba\u4f53\uff0c\u8ba1\u7b97\u7f51\u683c\u9876\u70b9 \\(V\\in\\mathrm{R}^{6890\\times 3}\\)\uff1b \u4f7f\u7528 H36M \u5173\u952e\u70b9\u56de\u5f52\u77e9\u9635(joint regression matrix) \\(M \\in \\mathrm{R}^{14\\times 6890}\\)\uff1b \u95ee\u9898\uff1a\u8fd9\u662f\u4ec0\u4e48\uff1f \u4e00\u4e2a from smpl to h36m \u7684\u77e9\u9635\u3002 \u8ba1\u7b97 3D \u5173\u952e\u70b9 \\(J\\in \\mathrm{R}^{14\\times 3} = MV\\)\uff1b \u573a\u666f \u7528\u4e00\u4e2a bbox \u53bb\u6846\u9009\u76ee\u6807\u4eba\u4f53\uff1b \u8f6c\u5316\u4e3a\u7279\u5b9a\u5927\u5c0f\u7684\u56fe\u50cf \\(I \\in \\mathrm{R}^{224\\times 224\\times 3}\\)\uff1b \u6839\u636e\u7ed9\u5b9a\u7684\u56fe\u50cf\u533a\u57df\u548c\u76f8\u673a\u53c2\u6570\uff0c\u5f97\u5230\u5bf9\u5e94\u4e8e\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u89c6\u9525\u4f53\u7a7a\u95f4\uff0c\u9009\u53d6\u8fd9\u90e8\u5206\u70b9\u4e91\u4f5c\u4e3a\u8f93\u5165\u7684\u70b9\u4e91 \\(S \\in \\mathrm{R}^{N_S \\times 3}\\)\uff1b \u4eba\u4e0e\u573a\u666f\u7684\u63a5\u89e6 \u4f7f\u7528 7 \u4e2a\u6700\u5bb9\u6613\u6210\u4e3a\u63a5\u89e6\u70b9\u7684\u533a\u57df\u548c 1 \u4e2a\u8868\u793a\u4e0d\u63a5\u89e6\u7684\u533a\u57df\uff0c\u8fd9 8 \u4e2a\u6807\u7b7e\u5728\u70b9\u4e91\u4e2d\u505a\u5206\u5272\u4efb\u52a1\uff1b \u4eba\u4f53\u6839\u4f4d\u7f6e\u548c\u573a\u666f\u63a5\u89e6\u70b9\u7684\u4f30\u8ba1\uff1a \u6982\u8ff0 \u9996\u5148\u4f7f\u7528\u4e00\u4e2a\u7a00\u758f 3D CNN \u6765\u4f30\u8ba1\u5bc6\u5ea6\u573a\u666f\u7684\u63a5\u89e6\u70b9\u2014\u2014\u70b9\u4e91\u6807\u7b7e\u4efb\u52a1(point cloud labeling task)\u548c\u7edd\u5bf9\u7684\u4eba\u4f53\u4f4d\u7f6e\u2014\u2014\u6295\u7968\u5411\u91cf\u573a\u4fee\u6b63\u4efb\u52a1(voting vector field refinement task)\uff0c\u6839\u636e\u5f97\u5230\u7684\u7ed3\u679c\uff0c\u4ee5\u7edd\u5bf9\u4f4d\u7f6e\u4e3a\u4e2d\u5fc3\u8868\u793a\u63a5\u89e6\u70b9\uff1b \u95ee\u9898\uff1a\u4ec0\u4e48\u662f voting vector field refinement task\uff1f\u540e\u9762\u6709\u5199\u3002 \u7c97\u4f30\u6839 \u4f7f\u7528\u4e00\u4e2a CNN \u5f97\u5230\u4e00\u4e2a\u70ed\u56fe\u548c\u5f52\u4e00\u5316\u7684\u6df1\u5ea6\u56fe\uff1b \u4ece\u70ed\u56fe\u4e2d\u80fd\u4f7f\u7528 argmax
\u5f97\u5230\u521d\u59cb\u7684\u4eba\u4f53\u6839\u90e8\u5ea7\u6807 \\((x,y)\\)\uff0c\u4ece\u6df1\u5ea6\u56fe\u4e2d\u4f30\u8ba1\u51fa \\(\\tilde Z\\)\uff1b \u5229\u7528\u76f8\u673a\u5185\u53c2\u53ef\u4ee5\u8ba1\u7b97\u51fa 3D \u7a7a\u95f4\u4e2d\u7684\u5ea7\u6807 \\((X,Y,Z)\\)\uff1a \\(Z = \\tilde{Z} \\frac{f}{w},\\quad X = \\frac{x - c_x}{f} \\cdot Z,\\quad Y = \\frac{y-c_y}{f}\\cdot Z\\) \u4ece\u7ed3\u679c\u6765\u770b\uff0c\\((x, y)\\) \u7684\u4f30\u8ba1\u662f\u6bd4\u8f83\u51c6\u786e\u7684\uff0c\u4f46 \\(\\tilde{Z}\\) \u7684\u6548\u679c\u6bd4\u8f83\u5dee\uff1b 3D \u7279\u5f81\u6784\u9020 \u5728\u70b9\u4e91\u4e2d\u5bfb\u627e ROI\u2014\u2014\u4ee5 \\(r=(X,Y,Z)\\) \u4e3a\u4e2d\u5fc3\uff0c\\(\\gamma_1\\) \u4e3a\u534a\u5f84\u7684\u7403\u5f62\u533a\u57df\uff0c\u7531 \\(\\tilde{Z}\\) \u7684\u4f30\u8ba1\u5e76\u4e0d\u51c6\u786e\uff0c\u6240\u4ee5\u5728\u8ddd\u79bb \\(\\gamma_2\\) \u7684\u3001\u6cbf\u7740 \\(z\\) \u8f74\u7684\u5730\u65b9\u518d\u91c7\u4e24\u4e2a\u7403\u5f62 ROI\uff1b \u95ee\u9898\uff1a\u4e0d\u51c6\u786e\u7684\u662f \\(\\tilde{Z}\\)\uff0c\u53ef\u662f \\(X, Y\\) \u7684\u5f97\u5230\u4e5f\u4e0e \\(\\tilde{Z}\\) \u6709\u5173\u5440\uff1f \u900f\u89c6\u6295\u5f71\uff0c\u800c\u975e\u6b63\u4ea4\u6295\u5f71\u3002 \u63a5\u4e0b\u6765\u5c06 ROI \u4e2d\u7684\u70b9\u4e91\u4f53\u7d20\u5316\uff0c\u5e76\u4e14\u8ba1\u7b97\u5f97\u5230\u6bcf\u4e00\u4e2a\u4f53\u7d20\u7684\u7279\u5f81\uff0c\u7279\u5f81\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a \u7531\u4f53\u7d20\u4e2d\u5fc3 \\(\\overline{s}_i\\) \u6307\u5411\u6839 \\(r\\) \u7684\u504f\u79fb\u5411\u91cf(offset vector) \\(o_i = r - \\overline{s}_i\\)\uff1b \u5229\u7528\u76f8\u673a\u53c2\u6570\uff0c\u5c06 \\(\\overline{s}_i\\) \u6295\u5f71\u56de\u56fe\u7247\u540e\uff0c\u5728\u7279\u5f81 map \u4e0a\u8fdb\u884c\u53cc\u7ebf\u6027\u91c7\u6837\u5f97\u5230\u7684\u4e0d\u6295\u5f71\u56fe\u50cf\u7279\u5f81(unprojecting image feature) \\(\\hat{f}\\)\uff1b \u4f30\u8ba1\u4fee\u6b63\u6839\u548c\u573a\u666f\u63a5\u89e6\u70b9 \u4f7f\u7528\u4e00\u4e2a\u7a00\u758f 3D CNN \u6765\u5904\u7406 3D \u7279\u5f81\uff0c\u4ee5\u6c42\u4f18\u5316\u6839\u7684\u4f30\u8ba1\u5e76\u4f30\u8ba1\u573a\u666f\u63a5\u89e6\u4f4d\u7f6e\uff0c\u7f51\u7edc\u7684\u8f93\u51fa\u5305\u62ec\u4e09\u4e2a\u90e8\u5206\uff1a\u66f4\u65b0\u540e\u7684\u504f\u79fb\u5411\u91cf(updated offset vector) \\(o_i^*\\)\u3001\u5176\u7f6e\u4fe1\u5ea6(confidence) \\(c_i\\)\u3001\u4ee5\u53ca\u5173\u4e8e\u516b\u4e2a\u63a5\u89e6\u4f4d\u7f6e\u6216\u4e0d\u63a5\u89e6\u4f4d\u7f6e\u7684\u5206\u5272\u7ed3\u679c\uff1b \u4f7f\u7528 \\(r^* = \\sum \\limits_i c_i \\cdot (o^*_i + \\overline{s}_i)\\) \u6765\u8ba1\u7b97\u4f18\u5316\u540e\u7684\u6839\uff0c\u5176\u4e2d \\(i\\) \u4e3a ROI \u4e2d\u7684\u4f53\u7d20\u7684 index\uff08\u4e4b\u524d\u63d0\u5230\u7684 voting vector field refinement task\uff09\uff1b \u63a5\u89e6\u70b9\u5206\u7c7b\u5305\u62ec 7 \u4e2a\u6700\u5bb9\u6613\u6210\u4e3a\u63a5\u89e6\u70b9\u7684\u5206\u7c7b\uff0c\u548c 1 \u4e2a\u7528\u6765\u8868\u793a\u4e0d\u63a5\u89e6\u7684\u7c7b\u522b\uff0c\u901a\u8fc7\u53d6\u5f97\u5206\u6700\u9ad8\u7684\u5f97\u5230\u70b9\u4e91\u7684\u6807\u7b7e\uff0c\u6700\u7ec8\u5f97\u5230\u4e00\u4e2a\u6709\u6807\u7b7e\u7684\u70b9\u4e91\u6570\u636e\u4f5c\u4e3a\u4e4b\u540e\u7684\u8f93\u5165\uff08\u4e4b\u524d\u63d0\u5230\u7684 point cloud labeling task\uff09\uff1b SA-HMR\uff1a \u53d7\u6570\u636e\u96c6\u9650\u5236\uff0c\u672c\u90e8\u5206\u7684\u5de5\u4f5c\u4ee5\u9884\u8bad\u7ec3\u597d\u7684 METRO \u4e3a\u57fa\u7840 SA-HMR \u6dfb\u52a0\u4e00\u4e2a\u5e73\u884c\u7684\u573a\u666f\u76f8\u5173\u7f51\u7edc\uff0c\u4f7f\u7528\u4ea4\u53c9\u6ce8\u610f\u529b\u673a\u5236\u6765\u63d0\u9ad8 METRO \u7684\u573a\u666f\u611f\u77e5\uff1b METRO \u4f7f\u7528\u81ea\u6ce8\u610f\u529b\u673a\u5236\u5b9e\u73b0\u5355\u76ee\u7684\u4eba\u4f53\u7f51\u683c\u6062\u590d\uff1b \u63d0\u53d6\u5168\u5c40\u7684 CNN \u7279\u5f81 \u27a1\ufe0f \u5c06\u7279\u5f81\u5408\u5e76\u5230\u65e0\u59ff\u52bf\u7684 SMPL \u7f51\u683c\u9876\u70b9\u4e0a \u27a1\ufe0f \u9884\u6d4b\u5305\u542b\u5f62\u4f53\u7684\u59ff\u52bf\uff1b \u4ea4\u53c9\u6ce8\u610f\u529b\u4e0b\u7684 METRO \u9996\u5148\u4f7f\u7528 METRO \u9aa8\u5e72\u90e8\u5206\u4e2d\u7684 CNN \u4ece\u56fe\u7247\u4e2d\u63d0\u53d6\u51fa\u56fe\u50cf\u7279\u5f81\uff0c\u5e76\u6620\u5c04\u3001\u6c60\u5316\u5f97\u5230\u4e0e\u4eba\u4f53 mesh \u9876\u70b9\u4e2a\u6570\u4e00\u81f4\u7684 tokens\uff1b \u5c06\u521d\u59cb\u9876\u70b9\u4e0e\u8fd9\u4e9b\u751f\u6210\u7684 token \u76f4\u63a5\u62fc\u63a5\uff0c\u585e\u8fdb transformer \u91cc\uff0c\u4ee5\u6b64\u6765\u8ba9 transformer \u80fd\u66f4\u597d\u7684\u6ce8\u610f\u5230\u8bed\u4e49\u4e0a\u66f4\u76f8\u5173\u7684\u90e8\u5206\uff1b \u4e3a\u4e86\u5c06\u7528\u6765\u4f30\u8ba1\u4eba\u4f53\u59ff\u6001\u7684 METRO \u4e0e\u9879\u76ee\u63d0\u51fa\u7684\u573a\u666f\u7f51\u7edc\u76f8\u7ed3\u5408\uff0c\u4f7f\u7528\u4e86\u4ea4\u53c9\u6ce8\u610f\u529b(cross attention)\uff1b \u5373 Q \u548c K \u4e0d\u540c\u5c5e\u4e00\u4e2a\u6a21\u5757\uff0c\u5728\u672c\u9879\u76ee\u7684\u8bed\u5883\u4e0b\uff0c\u6307\u4e24\u4e2a\u6a21\u5757\u7684 Q \u548c K \u90fd\u6765\u81ea\u5bf9\u65b9\uff1b \u8fd9\u91cc\u5bf9 METRO \u4f7f\u7528\u5171\u4eab\u6743\u91cd\u7684\u56de\u5f52\u5c42\uff0c\u5177\u4f53\u5e94\u7528\u5728\u4ece\u9010\u70b9\u7279\u5f81\u5230\u70b9\u4f4d\u7f6e\u7684\u56de\u5f52\uff1b \u56e0\u6b64\uff0c\u5f53\u7279\u5f81\u76f8\u4f3c\u7684\u70b9\u88ab\u8f93\u5165\u4ee5\u540e\uff0c\u8f93\u51fa\u7684\u5ea7\u6807\u4e5f\u503e\u5411\u4e8e\u76f8\u4f3c\uff0c\u76f8\u5f53\u4e8e\u8bf4\u5728\u505a scene image \u548c real image \u7684\u7279\u5f81\u5339\u914d\uff1b \u8fd9\u9690\u5f0f\u5730\u5c06\u76f8\u4f3c\u7684\u4eba\u4f53\u9876\u70b9\u548c\u573a\u666f\u70b9\u5bf9\u9f50\uff0c\u4ee5\u4fbf\u4e8e transformer \u5bfb\u627e\u5bf9\u5e94\u5173\u7cfb\uff1b Loss \u7b2c\u4e00\u90e8\u5206 \u00b7 \u6839\u548c\u63a5\u89e6\u70b9 \\(L_ {RC} = L_ {R2D} + w_ {RZ} \\cdot L_ {RZ} + L_ {ROV} + L_ {R3D} + L_ {C}\\) \\(L_ {R2D}\\) \u662f\u6839\u7684\u70ed\u529b\u56fe\u7684 MSE loss\uff1b \\(L_{RZ},L_{ROV},L_{R3D}\\) \u662f\u76f8\u5bf9\u6df1\u5ea6\u3001\u504f\u79fb\u5411\u91cf\u3001\u6839\u7684 3D \u5ea7\u6807\u7684 L1 loss\uff1b \\(L_C\\) \u662f\u63a5\u89e6\u70b9\u7684\u6807\u7b7e\u7684\u4ea4\u53c9\u71b5 loss\uff1b \u7b2c\u4e8c\u90e8\u5206 \u00b7 HMR \\(L_{\\mathrm{HMR}}=L_\\mathrm{V}+L_\\mathrm{J}+L_{\\mathrm{CP}}+L_\\mathrm{GV}\\) \u56db\u4e2a term \u5206\u522b\u662f\u5e73\u79fb\u5bf9\u9f50\u7684\u4eba\u4f53\u9876\u70b9\u7684\u3001\u4eba\u4f53\u5173\u952e\u70b9\u7684\u3001\u91cd\u5efa\u7684\u63a5\u89e6\u70b9\u7684\u3001\u5168\u5c40\u4eba\u4f53\u9876\u70b9\u7684 L1 loss\uff1b "},{"location":"pape_read/SA-MHR/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":" RICH \u573a\u666f\uff1a6 \u5ba4\u5916 & 2 \u5ba4\u5185 \u4e0d\u5904\u7406\u591a\u4eba\u3001\u4e0d\u5904\u7406 bbox \u51fa\u753b\u9762\u7684\u60c5\u51b5 PROX \u573a\u666f\uff1a12 \u5ba4\u5185 "},{"location":"pape_read/SA-MHR/#\u6548\u679c\u5ea6\u91cfmetrics","title":"\u6548\u679c\u5ea6\u91cf(metrics)","text":" HMR G-MPJPE: Global Mean-Per-Joint-Position-Error G-MPVE: Global Mean-Per-Vertex-Error \u5373\u5168\u5c40\u7684 JP \u548c V \u7684 L2 \u8bef\u5dee\uff0c\u76f8\u5bf9\u7684\uff0c\u540e\u9762\u8fd8\u6709\u4e00\u4e2a\u975e\u5168\u5c40\u7684\u8bef\u5dee\uff0c\u8868\u793a\u7684\u662f\u8282\u70b9/\u9876\u70b9\u76f8\u5bf9\u4e8e pelvis \u7684\u5ea7\u6807\u7684\u8bef\u5dee\uff0c\u5168\u5c40\u7684\u8bef\u5dee\u66f4\u80fd\u4f53\u73b0\u5728\u5168\u5c40\u8303\u56f4\u5185\u7684\u6548\u679c\uff1b contact PenE: Penetration Error \u5373\u7a7f\u6a21\u8bef\u5dee\uff0c\u5bf9\u4e8e\u6240\u6709\u7a7f\u5165\u6a21\u8868\u9762\u7684\u70b9\uff0c\u7d2f\u52a0\u5176\u5230\u8868\u9762\u7684\u8ddd\u79bb\uff0c\u8d8a\u7a7f\u8d8a\u574f\uff1b \u95ee\u9898\uff1a\u5177\u4f53\u6765\u8bf4\u5982\u4f55\u8861\u91cf v to scene \u7684\u8ddd\u79bb\uff1f\u5982\u679c\u7a7f\u4e86\u4e00\u4e2a\u6241\u5e73\u6a21\u662f\u5426\u8868\u8fbe\u4e0d\u660e\u663e\uff1f \u662f\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6807\u51c6\u53ea\u662f\u793a\u610f\uff0c\u5b9e\u9645\u5f88\u96be\u505a\u3002 ConFE: Contact Failure Error \u524d\u4e00\u4e2a term \u8868\u793a\u5f53\u8fd9\u91cc\u662f\u63a5\u89e6\u65f6\uff0c\u8981\u5c3d\u53ef\u80fd\u63a5\u8fd1\uff1b\u540e\u4e00\u4e2a term \u8868\u793a\u5f53\u8fd9\u91cc\u4e0d\u63a5\u89e6\u65f6\uff0c\u8981\u5c3d\u53ef\u80fd\u4e0d\u7a7f\u6a21\uff1b \u95ee\u9898\uff1a\u7b2c\u4e8c\u4e2a term \u662f\u4e0d\u662f\u4e0e PenE \u7684\u529f\u80fd\u91cd\u5408\u4e86\uff1f \u6709\u4e00\u90e8\u5206\u91cd\u5408\uff0c\u4f46\u662f\u662f\u5fc5\u8981\u7684\uff0c\u5b83\u8861\u91cf\u7684\u6709\u4e24\u4e2a\u5185\u5bb9\uff1a1. \u5c5e\u4e8e\u63a5\u89e6\u70b9\u7684\uff0c\u8981\u5c3d\u53ef\u80fd\u201c\u63a5\u89e6\u201d\uff1b2. \u4e0d\u5c5e\u4e8e\u63a5\u89e6\u70b9\u7684\uff0c\u8981\u5c3d\u53ef\u80fd\u201c\u4e0d\u63a5\u89e6\u201d\uff1b "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aStochastic Scene-Aware Motion Prediction \u4f5c\u8005\uff1aMohamed Hassan, Duygu Ceylan, Ruben Villegas, Jun Saito, Jimei Yang, Yi Zhou, and Michael Black \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 \u8bba\u6587\uff1a\ud83d\udd17 Demo\uff1a\ud83d\udd17 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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
\u5bfc\u822a\u81f3\u4ea4\u4e92\u76ee\u6807\uff1b \u5bfb\u627e\u4ea4\u4e92\u63a5\u89e6\u70b9(contact point)\uff1b \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
\u968f\u673a\u6a21\u578b \u8f93\u5165 3D \u573a\u666f \u91c7\u6837\u6709\u6548\u4ea4\u4e92\u76ee\u6807 \u751f\u6210\u76ee\u6807\u9650\u5236\u7684\u3001\u573a\u666f\u611f\u77e5\u7684\u3001\u903c\u771f\u7684\u4eba\u4f53\u52a8\u4f5c\u5e8f\u5217 "},{"location":"pape_read/SAMP/#\u8d21\u732e","title":"\u8d21\u732e","text":" \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 \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 \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 \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":" MotionNet
(core)\uff1a\u4e00\u4e2a cVAE\uff0c\u8f93\u5165\u76ee\u6807\u5bf9\u8c61\u548c\u52a8\u4f5c\uff0cMotionNet
\u6bcf\u4e00\u5e27\u5c06\u91c7\u6837\u4e00\u4e2a\u6f5c\u5411\u91cf\uff0c\u8054\u5408\u524d\u4e00\u5e27\u7684\u52a8\u4f5c\u6765\u63a7\u5236\uff08\u5373\u9884\u6d4b\uff09\u4e0b\u4e00\u4e2a\u52a8\u4f5c\uff1b \u5305\u542b\u4e00\u4e2a encoder \u548c\u4e00\u4e2a decoder\uff1b \\(X_i\\) \u8868\u793a\u7b2c \\(i\\) \u65f6\u523b\u7684\u72b6\u6001\uff0c\\(Z\\) \u4e3a\u751f\u6210\u7684\u6f5c\u5411\u91cf\uff0c\\(I\\) \u4e3a\u4ea4\u4e92\u5bf9\u8c61(interaction objects)\uff08\u4ee5\u4eba\u7269\u4e3a\u539f\u70b9\u7684\u4f53\u7d20\u7a7a\u95f4\u8868\u8fbe\uff09\uff1b encoder \u5305\u542b Interaction Encoder \u548c State Encoder\uff0c\u5206\u522b\u5c06 \\(I\\) \u548c \\(X\\) \u7f16\u7801\uff08\u4f7f\u7528 3 \u4e2a FC\uff09\u4e3a\u4f4e\u7ef4\u5ea6\u5411\u91cf\uff0c\u518d\u62fc\u63a5\u8d77\u6765\u8f93\u5165\u5230\u4e24\u4e2a\u5b8c\u5168\u76f8\u540c\u7684 FC \u4e2d\u4ee5\u9884\u6d4b \\(\\mu\\) \u548c \\(\\sigma\\) \u5373\u4e00\u4e2a\u6f5c\u5d4c\u5165\u7a7a\u95f4(latent embedding space)\uff1b \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u4ece\u4ee5\u4e0a\u8ff0\u7ed3\u679c\u4e3a\u53c2\u6570\u7684\u9ad8\u65af\u5206\u5e03\u4e2d\u91c7\u6837\u51fa\u6f5c\u5411\u91cf \\(Z\\) \u4f5c\u4e3a decoder \u7684\u8f93\u5165\uff1b \u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\u8fd9\u91cc\u7684 \\(j^r_i\\) \u662f 6d \u7684\uff1f\uff08\u5b9e\u9645\u4e0a\u662f 9d \u65cb\u8f6c\u77e9\u9635\u4e2d\u4f1a\u53d8\u5143\u6709 6 \u4e2a\uff0c\u901a\u8fc7\u8fd9\u4e2a 6d \u7684\u5411\u91cf\u80fd\u591f\u8fd8\u539f\u51fa\u8fd9\u4e2a\u77e9\u9635\uff0c\u800c\u81f3\u4e8e\u4e3a\u4ec0\u4e48\u7528\u8fd9\u4e2a 6d \u5185\u5bb9\u800c\u975e\u89d2\u5ea6\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff0c\u89d2\u5ea6\u5177\u6709\u7a81\u53d8\u4e0d\u8fde\u7eed\uff1a\\(2pi = 0\\)\uff0c\u6240\u4ee5\u90fd\u4e0d\u600e\u4e48\u7528\u4e86\uff09 decoder \u662f\u4e00\u4e2a MoE\uff0c\u6709 Prediction Network \u548c Gating Network \u4e24\u4e2a\u90e8\u5206\uff0c\u524d\u8005\u8d1f\u8d23\u751f\u6210\u9884\u6d4b\u7ed3\u679c\uff0c\u540e\u8005\u8d1f\u8d23\u751f\u6210\u5404\u4e2a\u4e13\u5bb6\u7f51\u7edc\u7684\u7ed3\u679c\u5408\u6210\u8fc7\u7a0b\u4e2d\u7684\u6743\u91cd\uff1b \u4f7f\u7528\u7684 loss \u4e3a \\(||\\hat{X_i} - X_i||^2_2 + \\beta_1\\mathop{KL}(Q(Z|X_i, X_{i-1}, I) || p(Z))\\)\uff1b \u7279\u522b\u6ce8\u610f\uff0c\u5728\u6d4b\u8bd5\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4ec5\u4ec5\u4ece\u6807\u51c6\u6b63\u6001\u5206\u5e03\u4e2d\u91c7\u6837\u6f5c\u5411\u91cf\uff1b \u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\uff1f GoalNet
\uff1a\u7528\u6765\u751f\u6210\u4ea4\u4e92\u70b9\u548c\u4ea4\u4e92\u65b9\u5411(contact points and orientations)\uff0c\u5373\u76ee\u6807(goals)\uff1b \u8be5\u6a21\u5757\u8ba9 SAMP \u80fd\u591f\u9002\u5e94\u4e0d\u540c\u7684\u76ee\u6807\u51e0\u4f55\u4f53\uff1b \u540c\u6837\u5305\u542b\u4e00\u4e2a encoder \u548c\u4e00\u4e2a decoder\uff1b \\(I\\) \u4e3a\u4ea4\u4e92\u5bf9\u8c61(interaction objects)\uff08\u4ee5\u7269\u4f53\u81ea\u8eab\u4e3a\u539f\u70b9\u7684\u4f53\u7d20\u7a7a\u95f4\u8868\u8fbe\uff09\uff0c\\(\\{g^p, g^d\\}\\) \u5206\u522b\u4e3a\u76ee\u6807(goal)\u7684\u4f4d\u7f6e\u548c\u65b9\u5411\uff0c\\(Z_{goal}\\) \u4e3a\u6f5c\u5411\u91cf\uff1b \u4f7f\u7528\u7684 loss \u4e3a \\(||\\hat{g}^p - g^p||^2_2 + ||\\hat{g}^d - g^d||^2_2 + \\beta_2 \\mathop{KL}(Q(Z_{goal}|g^p, g^d, I) || p(Z_{goal}))\\)\uff1b Path Planning Module
\uff1a\u4f7f\u7528 A* \u5bfb\u8def\u4ee5\u907f\u969c(obstacles)\uff1b \u751f\u6210\u7684\u8def\u7ebf\u4e2d\u5c06\u4f1a\u6709\u8bb8\u591a\u8def\u70b9(way-points)\u4f5c\u4e3a\u8fc7\u7a0b\u4e2d\u7684\u76ee\u6807\u70b9(goals)\uff1b explicit A*\uff1b \u6240\u8c13\u7684\u201c\u8def\u5f84\u201d\uff0c\u5177\u4f53\u6307\u7684\u662f\u4e00\u7cfb\u5217\u8def\u70b9(way point)\uff0c\u901a\u8fc7\u8fd9\u4e9b\u201c\u5c0f\u76ee\u6807\u201d\uff0c\u6765\u4e00\u6b65\u6b65\u5f15\u5bfc\u865a\u62df\u4eba\u5230\u8fbe\u76ee\u6807\u524d\uff0c\u5728\u6700\u540e\u4e00\u4e2a\u8def\u70b9\u8fdb\u884c\u76ee\u6807\u52a8\u4f5c\u7684\u751f\u6210\uff1b \u8fd9\u4e00\u65b9\u9762\u4e0e NSM \u4f7f\u7528 sensor \u68c0\u6d4b\u4e0d\u540c\uff0c\u66f4\u52a0\u9ad8\u6548\uff1b \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
\u95ee\u9898\uff1atrajectory \u548c path \u548c pose \u7684\u533a\u522b\uff1f\u662f\u6307\u5305\u62ec\u4e86\u52a8\u4f5c\u548c\u884c\u52a8\u8def\u7ebf\u7684\u8f68\u8ff9\u5417\uff1f \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
\u6587\u7ae0\u9898\u76ee\uff1aTRACE: 5D Temporal Regression of Avatars with Dynamic Cameras in 3D Environments \u4f5c\u8005\uff1aAuthors:Yu Sun, Qian Bao, Wu Liu, Tao Mei, Michael J. Black \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 \u8bba\u6587\uff1a\ud83d\udd17 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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":" \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 \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 \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 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 \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 \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 \u95ee\u9898\uff1aKalman filter \u597d\u50cf\u548c\u6ee4\u6ce2\u6709\u5173\uff1f\u4e3a\u4ec0\u4e48\u8bf4\u662f temporal priors\uff1f \u4f7f\u5e73\u6ed1\u3002 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 \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":" \u63d0\u4f9b\u4e86 5D \u7684\u8868\u8fbe\u65b9\u5f0f\uff0c\u62bd\u8c61\u6765\u8bf4\u9700\u8981\u5305\u62ec\uff1a\u65f6(1)\u7a7a(3)\u5ea7\u6807 + \u4e3b\u4f53\u7279\u5f81(1\uff0c\u62bd\u8c61\u4e00\u70b9\u6765\u770b)\uff1b end2end \u5e76\u4e14 one stage \u7684\u65b9\u6cd5\uff1b \u53d7\u5230 BEV \u542f\u53d1\uff0c\u5f15\u5165\u4e86\u4e86\u4e00\u79cd\u9e1f\u77b0\u89c6\u89d2\u7684 2D map \u6765\u63a8\u7406 3D \u4e2d\u7684 Human\u3002\u8fd9\u4e2a map \u548c\u4e00\u4e2a\u4ee5\u56fe\u7247\u4e3a\u4e2d\u5fc3\u7684 map \u4e00\u8d77\u7528\u6765\u63a8\u7406 Human \u7684 3D \u5ea7\u6807\u3002\u7c7b\u4f3c\u7684\u8fd8\u6709\u4e00\u5806\u5176\u4ed6\u7684 map\uff1b \u4e00\u4e2a memory unit\uff0c\u6765\u505a\u4e00\u4e9b long-term \u7684\u4e8b\u60c5\uff0c\u6bd4\u5982\u5bf9\u906e\u6321\u751a\u81f3\u6682\u65f6\u5931\u914d\u7684\u9c81\u68d2\u7684\u8ffd\u8e2a\uff1b \u4e00\u4e2a\u4e3b\u8981\u7528\u5168\u666f\u89c6\u9891\u6a21\u62df DC-video \u7684\u6570\u636e\u96c6\uff1b "},{"location":"pape_read/TRACE/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"\u53c2\u8003\u6d41\u7a0b\u56fe\u505a\u89e3\u91ca\u3002
\u8f93\u5165\u7684 Video \u6309\u5e27\u8f93\u5165\uff0c\u5373\u8f93\u5165 N \u5f20\u56fe\u7247\uff1b\u540c\u65f6 user \u6307\u5b9a\u9700\u8981\u8ffd\u8e2a\u7684\u4eba\u6570 K\uff1b \u968f\u540e\uff0c\u56fe\u7247\u5e8f\u5217\u5206\u522b\u901a\u8fc7 Image backbone \u548c Motion backbone \u5f97\u5230\u5355\u5e27\u7684\u7279\u5f81 map \\(F_i\\) \u548c\u5149\u6d41 map \\(O_i\\)\uff1b Image backbone(HRNet-32) \u7ebf\u91cc\uff0c\u5229\u7528 \\(F_{i-1}\\) \u548c \\(F_{i}\\)\uff0c\u4ee5\u53ca\u4e0a\u4e00\u4e2a\u65f6\u5e8f\u7279\u5f81\u4f20\u64ad\u6a21(temporal feature propagation module, ConvGRU)\u5757\u5f97\u5230\u7684 \\(H_{i-1}\\)\uff0c\u9884\u6d4b\u8fd9\u4e00\u5e27\u7684\u65f6\u5e8f\u7279\u5f81\uff0c\u5e76\u5f97\u5230\u7ecf\u8fc7\u6a21\u7cca\u7684\u2014\u2014\u5305\u542b\u65f6\u5e8f\u4fe1\u606f\u7684\u7279\u5f81 map \\(F_i'\\)\uff1b \u95ee\u9898\uff1a\u8fd9\u91cc\u7684 ConvGRU \u76f8\u5173\u7684\u4e0d\u662f\u5f88\u6e05\u695a\uff0c\u6bd4\u5982 \\(H_i\\) \u662f\u4ec0\u4e48\uff1f \u6682\u65f6\u8df3\u8fc7\u3002 Motion backbone(RAFT) \u8ba1\u7b97\u5149\u6d41\uff1b \u5728\u5b8c\u6210\u65f6\u5e8f\u7279\u5f81\u63d0\u53d6(temporal feature extraction)\u4ee5\u540e\uff0c\u662f\u4e00\u7cfb\u5217\u7684 head network\uff0c\u5b83\u4eec\u5e76\u4e0d\u5b8c\u5168\u5e73\u884c\uff0c\u90e8\u5206 branch \u548c\u5176\u5b83 branch \u6709\u5148\u540e\u8981\u6c42\uff0c\u4f46\u662f\u65e2\u7136\u56fe\u90fd\u8fd9\u4e48\u753b\u4e86\uff0c\u8fd9\u91cc\u5c31\u5f53\u5e73\u884c\u7684\u6a21\u5757\u6765\u8bb2\uff1b Detection \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u4e3a\u8f93\u5165\uff1b \u76f8\u673a\u5ea7\u6807\u7cfb\uff1b \u4f7f\u7528\u6b63\u89c6\u548c\u4fef\u89c6\u4e24\u4e2a\u65b9\u5411\u7684 view maps \u5408\u6210\u9884\u6d4b\uff08\u6765\u5219 BEV\uff09\uff0c\u5f97\u5230\u4e00\u4e2a 3D \u4e2d\u5fc3 map(3D Center map) \\(M_C^{3D}\\in \\mathrm{R}^{1\\times D\\times H\\times W}\\) \u548c\u4e00\u4e2a 3D \u5b9a\u4f4d map(3D Localization map) \\(M_{L}^{3D} \\in \\mathrm{R}^{1\\times D\\times H\\times W}\\)\uff1b \u4ece \\(M_C^{3D}\\) \u4e2d\u5f97\u5230 K \u4e2a\u5bf9\u8c61\u7684 3D \u4e2d\u5fc3 \\(\\tilde t_{i}\\) \u53ca\u5176\u7f6e\u4fe1\u5ea6 \\(c_i\\)\uff0c\u7136\u540e\u4ece \\(M_{L}^{3D}\\) \u4e2d\u5728 \\(\\tilde t_{i}\\) \u5904\u91c7\u6837\u4ece \\(\\tilde t_{i}\\) \u6307\u5411\u7cbe\u786e\u4f4d\u7f6e\u7684\u504f\u79fb\u5411\u91cf \\(\\Delta t_i\\)\uff0c\u4e8e\u662f\u5f97\u5230\u7cbe\u786e\u7684\u4f4d\u7f6e\u4e3a \\(t_i = \\tilde{t}_i + \\Delta t\\)\uff1b \u95ee\u9898\uff1a\u4e3a\u5565\u8981\u4e24\u6b65\uff0c\u4e0d\u80fd\u76f4\u63a5\u5f97\u5230\u7cbe\u786e\u4f4d\u7f6e\u5417\uff1f \u9700\u8981\u5b9e\u9a8c\u8bc1\u660e\u3002 Tracking \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u548c\u5149\u6d41 \\(O_i\\) \u4e3a\u8f93\u5165\uff1b \u76f8\u673a\u5ea7\u6807\u7cfb\uff1b \u4f7f\u7528 \\(F_i'\\) \u548c \\(O_i\\) \u9884\u6d4b 3D \u8fd0\u52a8\u504f\u79fb map(3D Motion Offset map) \\(M^{3D}_{M} \\in \\mathrm{R}^{3\\times D\\times H\\times W}\\)\uff0c\u6765\u63a8\u7406\u4eba\u5728 3D \u7a7a\u95f4\u4e2d\u7684\u4f4d\u7f6e\u504f\u79fb \\(\\Delta m_i\\)\uff0c\u8fd9\u4e2a\u504f\u79fb\u53ea\u662f\u7528\u6765\u505a tracking \u7684\uff1b \u5229\u7528 \\(\\Delta m_i\\)\uff0c\\(t_i\\) \u548c \\(c_i\\)\uff0c\u5728 Memory unit \u7684\u4f5c\u7528\u4e0b\u5b9e\u73b0\u8ffd\u8e2a\uff1b Memory unit \u7684\u5de5\u4f5c\u6d41\u7a0b\u5206\u4e09\u4e2a\u6b65\u9aa4\uff1a \u521d\u59cb\u5316\uff1b \u5339\u914d\uff1b \u66f4\u65b0\uff1b Mesh \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u548c\u5149\u6d41 \\(O_i\\) \u4e3a\u8f93\u5165\uff1b \u5f97\u5230 SMPL \u7ed3\u679c\uff1b World \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u548c\u5149\u6d41 \\(O_i\\) \u4e3a\u8f93\u5165\uff1b \u5373\u4e4b\u524d\u63d0\u5230\u7684\u4f7f\u7528 pose \u6765\u4f30\u8ba1\u5168\u5c40\u7684\u52a8\u4f5c\uff1b "},{"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
\u5b98\u65b9\u6587\u6863 \ud83d\udd17 \u7b14\u8bb0 \ud83d\udd17 \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.pyfrom 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.yamldriver: mysql\nuser: omry\npassword: secret\n
db/postgresql.yamldriver: postgresql\nuser: postgres_user\npassword: drowssap\ntimeout: 10\n
my_app.pyfrom 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
\u5982\u679c\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u5219 +A=B
\u8868\u793a\u6307\u5b9a A group \u91cc\u7684 b.yaml
\u9879\uff1b \u5982\u679c\u4e0d\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u5219 +A=B
\u8868\u793a\u589e\u52a0\u4e00\u4e2a field\uff0c\u5176 key \u4e3a A\uff0cvalue \u4e3a B\uff1b \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:
If multiple configs define the same value, the last one wins. If multiple configs contribute to the same dictionary, the result is the combined dictionary. \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.yamldefaults:\n- group1: option1\n- group1/group2: option1_1\n
group1/option1.yamldefaults:\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
\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 \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
PyTorch \u4e3b\u8981\u6709\u4e24\u4e2a\u7528\u9014\uff1a \u80fd\u591f\u4f7f\u7528 GPU \u52a0\u901f\u7684 NumPy \u66ff\u4ee3\u54c1\uff1b \u5185\u7f6e\u7684\u81ea\u52a8\u5fae\u5206\u5e93\u7b49\u5bf9\u795e\u7ecf\u7f51\u7edc\u7684\u5b9e\u73b0\u4ea7\u751f\u8f83\u5927\u7684\u5e2e\u52a9\uff1b \u53c2\u8003\u8d44\u6599 PyTorch \u5b98\u7f51\uff1a\ud83d\udd17 A 60 MINUTE BLITZ\uff1a\ud83d\udd17 *\u672c\u6587\u4e3b\u8981\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u601d\u8def\u6765\uff1b PyTorch \u5b98\u65b9\u6559\u7a0b\u4e2d\u6587\u7248\uff1a\ud83d\udd17 PyTorch\u7b80\u660e\u6559\u7a0b\uff1a\ud83d\udd17 "},{"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
\u4e00\u822c\u6765\u8bf4(\u4e0d\u8003\u8651const+reference)\u80fd\u521b\u5efa\u7684\u5f15\u7528\u7684\u5fc5\u987b\u662f\u4e2a\u53d8\u91cf\uff0c\u800c\u4e0d\u80fd\u662f\u4e2a\u8868\u8fbe\u5f0f\u3001\u5e38\u91cf\u3002 \u6362\u53e5\u8bdd\u8bf4\uff0c\u53ea\u80fd\u7ed9\u5de6\u503c(left value)\u521b\u5efa\u5f15\u7528 \u7279\u522b\u7684\uff1a 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
\u5f15\u7528\u5728\u521b\u5efa\u7684\u65f6\u5019\u5fc5\u987b\u521d\u59cb\u5316\uff0c\u5373int &x;
\u9519\u8bef\uff1bint &x = y;
\u6b63\u786e\u3002 Bindings\u4e00\u65e6\u5efa\u7acb\uff0c\u65e0\u6cd5\u53d6\u6d88 reference\u672c\u8d28\u4e0a\u5c31\u662f\u53d7\u9650\u7684pointer reference\u4e0d\u5b58\u5728reference reference\u4e0d\u5b58\u5728pointer \u5b9a\u4e49int *p = &x;
int&* ref = ...;
\u975e\u6cd5\uff0cref
\u4e0d\u80fd\u662f\u4e00\u4e2a\u5f15\u7528\u7684\u6307\u9488 int*& ref = p;
\u5408\u6cd5\uff0cref
\u662f\u4e00\u4e2a\u6307\u9488\u7684\u5f15\u7528 \u4e0d\u5b58\u5728reference\u6570\u7ec4 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
int &refA = A;
\u975e\u6cd5 const int &refA = A;
\u5408\u6cd5 const int &refA = 1;
\u5408\u6cd5 \u51fd\u6570\u4f20\u53c2\u540c\u7406 "},{"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":" <Class Name>::<Function Name>
\u8868\u793a\u8fd9\u4e2a <Function Name>
\u662f\u4e0d\u81ea\u7531\u7684\uff0c\u5c5e\u4e8e <Class Name>
\u7684\uff1b ::<Function Name>
\u8868\u793a\u8fd9\u4e2a <Function Name>
\u662f\u5168\u5c40\u53d8\u91cf\u4e2d\u7684\u81ea\u7531\u51fd\u6570\uff08\u53d8\u91cf\u540c\u7406\uff09\uff1b #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
\u7c7b\u7684\u9759\u6001\u53d8\u91cf\u5c5e\u4e8e\u7c7b\u4e0d\u5c5e\u4e8e\u5b9e\u4f8b\uff0c\u4e0d\u80fd\u901a\u8fc7\u6b63\u5e38\u7684\u65b9\u5f0f\u521d\u59cb\u5316\uff0c\u53ef\u4ee5\u7528\u8fc7\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26\u5728\u5168\u5c40\u521d\u59cb\u5316 \u5b9e\u9645\u4e0a\uff0c\u7f16\u8bd1\u5668\u5c06\u5bf9\u8c61\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u81ea\u52a8\u8f6c\u6362\u6210\u4e86\u7c7b\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u3002\u56e0\u6b64\uff0c\u5efa\u8bae\u59cb\u7ec8\u4f7f\u7528className::staticVar
\u8bbf\u95ee\u9759\u6001\u53d8\u91cf_(xxjj\u5728\u8fd9\u91cc\u8bf4\u7684)_ "},{"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
overload\u4e0d\u652f\u6301\u81ea\u52a8\u7c7b\u578b\u8f6c\u6362 "},{"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);
\u6b64\u65f6\u8c03\u7528fun()
\u53ef\u4ee5\u7701\u7565\u5b58\u5728\u9ed8\u8ba4\u53c2\u6570\u7684\u53c2\u6570 \u4f46\u662f\u4e0d\u5b58\u5728\u9ed8\u8ba4\u503c\u7684\u53c2\u6570\u5fc5\u987b\u5728\u5b58\u5728\u9ed8\u8ba4\u503c\u7684\u53c2\u6570\u524d\u9762 void fun(int x, int a = 0);
\u5408\u6cd5 void fun(int x = 0, int a);
\u975e\u6cd5 \u5982\u679c\u540c\u65f6\u5b58\u5728\u51fd\u6570\u58f0\u660e\u548c\u51fd\u6570body\uff0c\u5219\u5728\u8fd9\u4e24\u90e8\u5206\u4e2dDefault Argument\u53ea\u80fd\u5728\u5176\u4e2d\u4e00\u4e2a // \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
inline
\u4ec5\u4ec5\u662f\u5bf9\u7f16\u8bd1\u5668\u7684\u4e00\u4e2a\u5efa\u8bae \ud83d\udd17\u5f15\u7528\u4e00\u4e0bxxjj\u7684\u6587\u7ae0 \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cinline
\u662f\u5728\u6bcf\u4e00\u4e2a\u7f16\u8bd1\u5355\u5143\u4e2d\u8fdb\u884c\u7684\uff0c\u6240\u4ee5\u8fd9\u5c31\u5bfc\u81f4\u4e86\u5185\u8054\u51fd\u6570\u7684\u539f\u578b\u5e94\u5f53\u80fd\u76f4\u63a5\u88ab\u8c03\u7528\u8be5\u51fd\u6570\u7684\u6587\u4ef6\u8bbf\u95ee\u5230\u3002 eg. \u5728a.cpp
\u4e2d\u8c03\u7528f();
\u5e76#include \"b.h\"
\u5728b.h
\u4e2d\u58f0\u660einline void f();
\u5728b.cpp
\u4e2d\u5199\u660ef()
\u7684body \u7ed3\u679c\u5c31\u662f\u4f1a\u7f16\u8bd1\u9519\u8bef\u2014\u2014\u9700\u8981\u5c06f()
\u7684body\u653e\u5230a.cpp
\u6216\u8005b.h
\u4e2d\u624d\u53ef\u4ee5\u2014\u2014\u56e0\u4e3a\u5728\u7f16\u8bd1\u7684\u65f6\u5019a.cpp
\u4ec5\u548cb.h
\u4e00\u8d77\u7f16\u8bd1\uff0c\u5e76\u4e0d\u77e5\u9053f()
\u7684body\u5728\u54ea\u91cc\uff0c\u65e0\u6cd5\u8fdb\u884c\u201c\u5185\u8054\u201d inline
\u4e0e \u5b8f \u5f88\u76f8\u4f3c\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u533a\u522b\uff1a
\u505a\u7684\u4e8b\u60c5\u662f\u7c7b\u4f3c\u7684\uff0c\u4f46\u7528\u5b8f\u65e0\u6cd5\u5b9e\u73b0\u9690\u5f0f\u7c7b\u578b\u8f6c\u5316 \u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4inline
\u53ea\u662f\u4e2a\u5efa\u8bae\uff0c\u7f16\u8bd1\u5668\u672a\u5fc5\u4f1a\u5b9e\u73b0 \u5728\u4e00\u4e2a\u7c7b\u91cc\u5b9a\u4e49body\u7684\u51fd\u6570\uff0c\u5b83\u9ed8\u8ba4\u662finline
\u51fd\u6570 \u5982\u679c\u5728\u7c7b\u91cc\u6ca1\u6709\u5b9a\u4e49body\uff0c\u90a3\u4e48\u8be5\u51fd\u6570\u662f\u5185\u8054\u51fd\u6570\u5f53\u4e14\u4ec5\u5f53\u524d\u9762\u6709inline
\u5173\u952e\u8bcd "},{"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
char * const p;
\u4fee\u9970\u7684\u662fp
const char *p;
\u4fee\u9970\u7684\u662f*p
char const *p;
\u4fee\u9970\u7684\u662f*p
const char * const p;``*p
\u548cp
\u90fd\u88ab\u4fee\u9970 const
\u51fa\u73b0\u5728*
\u5de6\u4fa7\uff0c\u4fee\u9970\u7684\u662f*p
const
\u51fa\u73b0\u5728*
\u53f3\u4fa7\uff0c\u4fee\u9970\u7684\u662fp
\uff08\u82e5const char *p = &ch;
\uff0c\u867d\u7136\u901a\u8fc7*p
\u65e0\u6cd5\u66f4\u6539\u6307\uff0c\u4f46ch
\u4ecd\u7136\u53ef\u4ee5\u4fee\u6539\uff0c\u8fdb\u4e00\u6b65\u4f53\u73b0\u8fd9\u662f\u4e2a\u7f16\u8bd1\u65f6\u523b\u884c\u4e3a\uff09 \u5728\u8fd9\u4e9b\u6027\u8d28\u4e0b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e00\u4e2a\u975econst
\u7684\u53d8\u91cf\u8d4b\u503c\u7ed9const
\u53d8\u91cf\uff08\u7279\u522b\u662f\u51fd\u6570\u4f20\u53c2\uff09\uff0c\u6765\u63a7\u5236\u6307\u9488\u7684\u8bfb\u5199\u6743\u9650\uff08\u53ef\u4ee5\u7528\u6765\u51cf\u5c11\u4ee3\u7801\u5199\u9519\u7684\u60c5\u51b5\uff09 \u4e00\u4e2a\u88abconst
\u4fee\u9970\u8fc7\u7684\u5bf9\u8c61\u7684\u6210\u5458\u51fd\u6570\u53ea\u6709\u5728\u8be5\u51fd\u6570\u4e5f\u88abconst
\u4fee\u9970\u8fc7\u4e14\u7ecf\u8fc7\u7f16\u8bd1\u5668\u68c0\u6d4b\u786e\u5b9e\u4e0d\u4fee\u6539\u6210\u5458\u53d8\u91cf\u7684\u60c5\u51b5\u4e0b\u624d\u80fd\u6267\u884c int A::fun() const;
\u548cint A::fun();
\u53ef\u4ee5\u6784\u6210overload\u5173\u7cfb\uff0c\u56e0\u4e3a\u8fd9\u91cc\u7684const
\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u9690\u85cf\u7684A *this
\u88abconst
\u4fee\u9970\uff0c\u53c2\u6570\u8868\u4e0d\u540c\uff0c\u7b26\u5408overload\u6761\u4ef6 \u5f53\u4e0a\u8ff0\u4e24\u4e2a\u51fd\u6570\u90fd\u5b58\u5728\u65f6\uff0c\u5f53\u4e14\u4ec5\u5f53\u5bf9\u8c61\u88abconst
\u4fee\u9970\u624d\u4f1a\u8c03\u7528\u524d\u8005 \u5982\u679c\u6210\u5458\u53d8\u91cf\u662fconst
\uff0c\u90a3\u5fc5\u987b\u5b58\u5728\u521d\u59cb\u5316\u65b9\u6848 "},{"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
\u7c7b\u7684\u9759\u6001\u53d8\u91cf\u5c5e\u4e8e\u7c7b\u4e0d\u5c5e\u4e8e\u5b9e\u4f8b\uff0c\u4e0d\u80fd\u901a\u8fc7\u6b63\u5e38\u7684\u65b9\u5f0f\u521d\u59cb\u5316\uff0c\u53ef\u4ee5\u7528\u8fc7\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26\u5728\u5168\u5c40\u521d\u59cb\u5316 \u5b9e\u9645\u4e0a\uff0c\u7f16\u8bd1\u5668\u5c06\u5bf9\u8c61\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u81ea\u52a8\u8f6c\u6362\u6210\u4e86\u7c7b\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u3002\u56e0\u6b64\uff0c\u5efa\u8bae\u59cb\u7ec8\u4f7f\u7528className::staticVar
\u8bbf\u95ee\u9759\u6001\u53d8\u91cf_(xxjj\u5728\u8fd9\u91cc\u8bf4\u7684)_ \u7c7b\u7684\u9759\u6001\u51fd\u6570\u4e0d\u518d\u5177\u6709this
\u6307\u9488\uff0c\u4e5f\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u975e\u9759\u6001\u6210\u5458\u53d8\u91cf\u6216\u8005\u975e\u9759\u6001\u6210\u5458\u51fd\u6570 \u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u8981\u5728class
\u91cc\u58f0\u660estatic
\u53d8\u91cf/\u51fd\u6570\uff0c\u5219\u53ea\u5728.h
\u6587\u4ef6\u4e2d\u51fa\u73b0\u5173\u952e\u5b57\uff0c\u4e0d\u8981\u5728.cpp
\u4e2d\u51fa\u73b0 "},{"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>();
using namespace xxx;
\u540e\u53ef\u4ee5\u7701\u7565<Space Name>::
\uff0c\u4f46\u662f\u8981\u6ce8\u610f\u6b67\u4e49\u95ee\u9898 using xxx::yyy;
\u540e\u4ec5\u4ec5\u5bf9yyy
\u6765\u8bf4\u53ef\u4ee5\u7701\u7565<Space Name>::
\uff0c\u540c\u6837\u8981\u6ce8\u610f\u6b67\u4e49\u95ee\u9898 \u4e24\u4e2a\u547d\u540d\u7a7a\u95f4\u6709\u76f8\u540c\u51fd\u6570/\u53d8\u91cf\u7684\u65f6\u5019\uff0c\u9700\u8981\u5199\u660e\u547d\u540d\u7a7a\u95f4 namespace x = y;
\u8868\u793a\u53ef\u4ee5\u7528x
\u6765\u8868\u793a\u547d\u540d\u7a7a\u95f4y
\uff0c\u4f46\u662f\u5728\u6b64\u524dy
\u5fc5\u987b\u5df2\u7ecf\u5b9a\u4e49 namespace
\u91cc\u4e5f\u53ef\u4ee5\u6709namespace
\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a \u7ec4\u5408 "},{"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
\u9aa8\u67b6\u4fe1\u606f(header section)\uff1a\u5b9a\u4e49\u4e86\u9aa8\u67b6\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u6307\u5bfc\u5982\u4f55\u89e3\u6790\u6570\u636e\u5757\u3002 \u6570\u636e\u5757(data section)\uff1a\u5305\u542b\u4e86\u6bcf\u4e00\u5e27\u5404\u90e8\u5206\u7684\u6570\u636e\u4fe1\u606f\u3002 \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
OFFSET
\u8868\u793a\u76f8\u5bf9\u4e0e\u7236\u8282\u70b9\uff0c\u8be5\u8282\u70b9\u7684\u504f\u79fb\uff1b \u5bf9\u4e8e \u6839\u8282\u70b9 \u6765\u8bf4\uff0c\u5b83\u4e00\u822c\u662f0 0 0
\uff1b \u00b7CHANNELS
\u540e\u6709\u4e24\u4e2a\u90e8\u5206\uff0c\u9996\u5148\u662f\u4e00\u4e2a\u6570\u5b57\u8868\u793a\u540e\u9762\u6709\u51e0\u4e2a\u901a\u9053\u3002 \u4e00\u822c\u6765\u8bf4\uff0c\u6839\u8282\u70b9 \u4f1a\u6709 6 \u4e2a\u901a\u9053\uff0c\u5982\u4e0a\u793a\u4f8b\u6709Xposition Yposition Zposition Zrotation Yrotation Xrotation
\uff0c\u5206\u522b\u4ee3\u8868\u5728data section
\u4e2d\uff0c\u5e27\u5e8f\u5217\u7684\u6570\u636e\u6309\u8fd9\u6837\u7684\u65b9\u5f0f\u5b58\u50a8\uff0c\u524d\u4e09\u4e2a\u4ee3\u8868\u7684\u662f \u4f4d\u79fb \u4e0b\u6bcf\u4e2a\u5206\u91cf\u7684\u987a\u5e8f\uff08\u6b64\u5904\u8868\u793a\uff1a\u4f9d\u6b21\u4e3a x \u5750\u6807\uff0c y \u5750\u6807\uff0c z \u5750\u6807\uff0c\u4e00\u822c\u53ea\u6709\u6839\u8282\u70b9\u6709\u8fd9\u4e09\u4e2a\u901a\u9053\uff0c\u7528\u6765\u8868\u793a\u9aa8\u67b6\u7684\u4f4d\u79fb\uff09\uff0c\u540e\u4e09\u4e2a\u4ee3\u8868\u7684\u662f \u65cb\u8f6c\u89d2\u5ea6 \u987a\u5e8f\uff1b \u800c\u5bf9\u4e8e \u975e\u6839\u8282\u70b9\uff0c\u4e00\u822c\u6709 3 \u4e2a\u901a\u9053\uff0c\u4ee3\u8868\u7684 \u65cb\u8f6c\u89d2\u5ea6 \u987a\u5e8f\uff1b \u6ce8\u610f\uff0c\u8fd9\u91cc\u4f7f\u7528\u7684 \u89d2\u5ea6\u5236 \u800c\u975e\u5f27\u5ea6\u5236\uff1b \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
\u5728\u8fd9\u5f20\u56fe\u4e2d\uff0cNeck``LeftCollar``RightCollar
\u662fChest
\u7684\u5b50\u8282\u70b9\uff0c\u5219Neck``LeftCollar``RightCollar
\u7684\u76f8\u5bf9\u4f4d\u7f6e\u5e94\u5f53\u4e0d\u53d8\uff0c\u4e4b\u540e\u7684\u53d8\u6362\u4ec5\u4ec5\u901a\u8fc7\u5b83\u4eec\u6574\u4f53\u76f8\u5bf9\u4e8eChest
\u7684\u65cb\u8f6c\u5b9e\u73b0\u3002 \u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a
ROOT
\u548cJOINT
\u5728\u8bed\u6cd5\u4e0a\u57fa\u672c\u4e00\u81f4\uff0c \u53ea\u4e0d\u8fc7\u7b2c\u4e00\u4e2a\u51fa\u73b0\u7684\u8282\u70b9\u9700\u8981\u7528ROOT
\u7d22\u5f15\uff0c\u4e14\u5b83\u67096\u4e2a\u901a\u9053\uff1b \u800c\u4e4b\u540e\u7684\u5b50\u8282\u70b9\u901a\u8fc7JOINT
\u7d22\u5f15\uff0c\u4e14\u67093\u4e2a\u901a\u9053\u3002 \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
\u9aa8\u67b6\u662f\u6709\u82e5\u5e72\u201c\u9aa8\u68d2\u201d\u7ec4\u6210\u7684\uff0c\u8fd9\u4e2a\u201c\u9aa8\u68d2\u201d\u79f0\u4e3asegment
\uff0c\u800c\u5b9a\u4e49\u4e00\u4e2asegment
\u9700\u8981\u4e24\u4e2a\u7aef\u70b9\uff0c\u800cEnd Site
\u5c31\u662f\u8fd9\u4e2asegment
\u94fe\u7684\u672b\u7aef\uff0c\u5b83\u4e0d\u5177\u5907\u65cb\u8f6c\u4fe1\u606f\uff0c\u56e0\u4e3a\u5b83\u6ca1\u6709\u5b50\u8282\u70b9\uff0c\u4ec5\u4ec5\u7528\u6765\u901a\u8fc7\u5750\u6807\u8868\u8fbe\u6700\u540e\u4e00\u4e2asegment
\u7684\u957f\u5ea6\u3002 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":" https://en.wikipedia.org/wiki/Biovision_Hierarchy https://research.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/BVH.html https://blog.csdn.net/u012336923/article/details/50972968 https://blog.csdn.net/u012336923/article/details/50979894 https://zhuanlan.zhihu.com/p/71818887 https://www.4k8k.xyz/article/one_2_one/97963901 https://www.youizone.com/2015/06/04/bvh-files.html "},{"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
Colab URL: \ud83d\udd17 A&Q: \ud83d\udd17 \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
\u5728\u6587\u672c\u5355\u5143\u4e2d\uff0c\u4f60\u53ef\u7528\u96c6\u6210\\(\\LaTeX\\)\u3001HTML
\u3001\u5bcc\u6587\u672c\u3001Markdown \u7b49\uff1b \u800c\u5bf9\u4e8e\u4ee3\u7801\u5355\u5143\uff0c\u4f60\u5219\u53ef\u4ee5\u76f4\u63a5\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2aPython
\u89e3\u91ca\u5668\uff1a
\u540c\u65f6\uff0c\u5728\u4e00\u884c\u7684\u6700\u524d\u9762\u52a0\u4e0a!
\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u7ec8\u7aef\u547d\u4ee4 \u4f8b\u5982\u5728 \u4ee3\u7801\u5355\u5143 \u4e2d\u8f93\u5165!pwd
\u5c31\u7b49\u4ef7\u4e8e\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165pwd
\u4f46\u5728 \u4ee3\u7801\u5355\u5143 \u4e2d\u8f93\u5165pwd
\u5219\u4f1a\u62a5\u9519\uff0c\u56e0\u4e3a\u8fd9\u4e0d\u662f\u4e00\u4e2aPython
\u547d\u4ee4 \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
\u6570\u636e\u79d1\u5b66: \ud83d\udd17 \u673a\u5668\u5b66\u4e60: \ud83d\udd17 "},{"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":" https://zhuanlan.zhihu.com/p/387509768 https://itiandong.com/2021/colab-tips/ "},{"location":"tech_accu/tool/Colab/#\u5176\u4ed6\u8d44\u6599","title":"\u5176\u4ed6\u8d44\u6599","text":" https://jishuin.proginn.com/p/763bfbd316dc "},{"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
Workflow Commands Commits Convention\uff08\u8ba1\u5212\u4e2d\uff09 Lazy Git\uff08\u8ba1\u5212\u4e2d\uff09 "},{"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":" .gitignore
\u6587\u4ef6 \u8054\u7cfbgit rm --cached <file>
\u201c\u8ffd\u8e2a\u201d\u7684\u6982\u5ff5 HEAD
git stash "},{"location":"tech_accu/tool/Git/Commands/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":" https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html https://www.cnblogs.com/lance-ehf/p/3871643.html https://blog.csdn.net/Lakers2015/article/details/111318801 "},{"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
Git Workflow Github Workflow Gitlab Workflow \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":" \u8fd9\u91cc\u7684 Workflow \u4e0e Github Action \u4e2d\u7684 Workflow \u6709\u533a\u522b\uff01 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
\u521b\u5efa\u5206\u652f (create a branch or fork)\uff1b \u5728\u5206\u652f\u4e2d\u8fdb\u884c\u5f00\u53d1\u5e76\u5b8c\u6210\u63d0\u4ea4 (add commits)\uff1b \u53d1\u9001 Pull Request (open a pull request)\uff1b \u4eba\u5de5\u5ba1\u6838\u4ee3\u7801\u3001\u6c9f\u901a\u4ea4\u6d41\uff0c\u4ee5\u53ca\u5fc5\u8981\u7684\u6d4b\u8bd5 (discuss and review)\uff1b \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":" https://nvie.com/posts/a-successful-git-branching-model/ https://www.ruanyifeng.com/blog/2015/12/git-workflow.html https://gitbook.tw/chapters/gitflow/why-need-git-flow https://medium.com/i-think-so-i-live/git\u4e0a\u7684\u4e09\u7a2e\u5de5\u4f5c\u6d41\u7a0b-10f4f915167e https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md https://about.gitlab.com/topics/version-control/what-is-git-workflow/ "},{"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
\u5982\u679c\u60a8\u662f Linux/MacOS \u7528\u6237\uff0c\u90a3\u4e48\u60a8\u7684\u7cfb\u7edf\u4e00\u822c\u90fd\u4f1a\u81ea\u5e26 Terminal \u7a0b\u5e8f\uff0c\u76f4\u63a5\u6253\u5f00\u5e76\u8f93\u5165 bash \u4ee5\u542f\u7528 bash\uff1b \u5982\u679c\u60a8\u662f Windows \u7528\u6237\uff0c\u90a3\u4e48\u60a8\u53ef\u4ee5\u9009\u62e9\u76f4\u63a5\u4e0b\u8f7d Git Bash\uff1b \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
\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u9f20\u6807\u6eda\u8f6e/\u624b\u52bf\u7ffb\u9875/\u56de\u8f66\u7b49\u9014\u5f84\u53ef\u4ee5\u67e5\u770b\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\uff0c\u6309\u4e0b q
\u79bb\u5f00\u624b\u518c\u9875\u9762\u3002 \u6b64\u5916\uff0cuser manual \u7684\u5185\u5bb9\u53ef\u80fd\u4f1a\u6839\u636e\u4f7f\u7528\u7684 Shell \u4e0d\u540c\u800c\u4e0d\u540c\uff0c\u751a\u81f3\u5728\u4e00\u4e9b Shell \u90fd\u4e0d\u4e00\u5b9a\u6709 user manual\u3002 \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
.
\u8868\u793a\u5f53\u524d\u8def\u5f84\uff1b ..
\u8868\u793a\u4e0a\u7ea7\u8def\u5f84\uff08\u6307\u4e0a\u4e00\u4e2a\uff09 \uff1b \u6b64\u5916\uff0c\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e9b\u5feb\u6377\u65b9\u5f0f\uff1a
\u5982\u679c\u53ea\u6709 cd
\uff0c\u5219\u8fd4\u56de\u5bb6\u76ee\u5f55 ~
\uff08\u53ef\u4ee5\u53d1\u73b0 eg 4 \u548c eg 5 \u7b49\u4ef7\uff09\uff1b cd -
\u8fd4\u56de\u4e0a\u4e00\u6b21 cd
\u4e4b\u524d\u6240\u5728\u7684\u4f4d\u7f6e\uff1b cd ~username
\u5207\u6362\u5230\u76ee\u6807\u7528\u6237\u7684\u5bb6\u76ee\u5f55\uff1b "},{"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
\u6709\u65f6\uff0c\u6211\u4eec\u4f1a\u4e3a ls -l
\u8bbe\u7f6e\u4e00\u4e2a alias\uff0c\u5373 alias ll=\"ls -l\"
\uff0c\u8fd9\u6837\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u66f4\u65b9\u4fbf\u7684 ll
\u4e86\u3002 \u5176\u4e2d\uff0c l
\u4e2d\u7684\u5177\u4f53\u683c\u5f0f\u5982\u4e0b\uff1a -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
\u5173\u4e8e\u8fd9\u90e8\u5206\u5177\u4f53\u90e8\u5206\u5b57\u6bb5\u7684\u5177\u4f53\u89e3\u91ca\uff0c\u8bf7\u53c2\u8003\u76f8\u5173\u8d44\u6599\uff0c\u4e0d\u5c5e\u4e8e\u672c\u6587\u7684\u8303\u7574\u3002 "},{"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
\u800c\u5b9e\u9645\u4e0a cat
\u547d\u4ee4\u6700\u91cd\u8981\u7684\u4f5c\u7528\u5e76\u4e0d\u662f \u663e\u793a \u6587\u4ef6\u5185\u5bb9\uff0c\u4ed4\u7ec6\u89c2\u5bdf\u63cf\u8ff0\uff0c\u5b83\u7684\u4f5c\u7528\u662f \u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u6d41\uff0c\u5176\u4f5c\u7528\u5728\u4e4b\u540e\u4ecb\u7ecd\u4e86\u91cd\u5b9a\u5411\u4e4b\u540e\u4f1a\u51f8\u663e\u51fa\u6765\u3002 "},{"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
\u9f20\u6807\u6eda\u8f6e / \u89e6\u63a7\u677f\u624b\u52bf\uff1a\u7ffb\u9875\u6d4f\u89c8\uff1b [space]
/ PageDown
\uff1a\u5f80\u540e\u7ffb\u4e00\u9875\uff1b b
/ PageUp
\uff1a\u5f80\u524d\u7ffb\u4e00\u9875\uff1b shift
+ g
\uff08\u8f93\u5165 G
\uff09\uff1a\u8df3\u8f6c\u7684\u6587\u672b\uff1b 1,\u00a0shift
+ g
\uff08\u8f93\u5165 1G
\uff09\uff1a\u8df3\u8f6c\u5230\u6587\u9996\uff1b /{something}
, Enter
\uff1a\u641c\u7d22 {something}
\uff0c\u7c7b\u4f3c\u4e8e\u5e38\u89c1\u8f6f\u4ef6\u7684 Ctrl
+ f
\uff1b n
\uff1a\u91cd\u590d\u4e0a\u4e00\u6b21\u641c\u7d22\u64cd\u4f5c\uff0c\u9002\u5408\u5728\u641c\u7d22\u5185\u5bb9\u6709\u591a\u4e2a\u7684\u65f6\u5019\uff0c\u8df3\u8f6c\u5230\u4e0b\u4e00\u4e2a\u641c\u7d22\u7ed3\u679c\uff1b h
\uff1a\u5e2e\u52a9\u624b\u518c\uff1b q
\uff1a\u9000\u51fa\uff1b "},{"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
shell - What does \u201csh a.sh <&0 >&0\u201d mean? - Unix & Linux Stack Exchange 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
Copy from the top answer from: https://unix.stackexchange.com/questions/84620/what-does-sh-a-sh-0-0-mean "},{"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
./script.sh
\uff08\u9700\u8981\u811a\u672c\u5177\u6709\u53ef\u6267\u884c\u6743\u9650\uff09 source script.sh
bash script.sh
/ sh script.sh
/ ... \u4ed6\u4eec\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a
\u4f7f\u7528 bash script.sh
/ sh script.sh
/ ... \u7684\u65b9\u5f0f\u6267\u884c\u811a\u672c\uff0c\u4e3b\u8fdb\u7a0b\u4f1a\u4f11\u7720\uff0c\u5e76\u5f00\u59cb\u4e00\u4e2a\u65b0\u8fdb\u7a0b\u6765\u6267\u884c\u811a\u672c\u5185\u5bb9\uff1b \u4f7f\u7528 source script.sh
\u7684\u65b9\u5f0f\u6267\u884c\u811a\u672c\uff0c\u811a\u672c\u5185\u5bb9\u4f1a\u5728\u4e3b\u8fdb\u7a0b\u8fdb\u884c\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u5728\u66f4\u65b0\u5b8c .bashrc
\u8fd9\u79cd\u6587\u4ef6\u4ee5\u540e\u4f1a\u4f7f\u7528 source
\u6765\u6267\u884c\u5b83\u4ee5\u6c42\u6548\u679c\u9a6c\u4e0a\u88ab\u52a0\u8f7d\u51fa\u6765\uff1b "},{"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
\u5047\u8bbe script.sh
\u7684\u5185\u5bb9\u5982\u4e0b #! /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
\u5219\u5982\u4e0b\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a $ ./foo.sh a b c d e f g h i j\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
\u5047\u8bbe script.sh
\u7684\u5185\u5bb9\u5982\u4e0b #! /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
\u5219\u5982\u4e0b\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a $ ./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
\u5047\u8bbe file
\u7684\u5185\u5bb9\u5982\u4e0b A\nB\nC\n
\u6267\u884c\u4e0b\u5217\u8bed\u53e5 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
Linux \u547d\u4ee4\u5927\u5168 "},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u8d44\u6599","title":"\u76f8\u5173\u8d44\u6599","text":" Shell (computing) - Wikipedia Terminal emulator - Wikipedia Introducing the Shell \u2013 Introduction to the Command Line for Genomics (datacarpentry.org) LinuxCommand.org: Learning the shell. \u8bfe\u7a0b\u6982\u89c8\u4e0e shell \u00b7 the missing semester of your cs education (missing-semester-cn.github.io) man command in Linux with Examples - GeeksforGeeks Shell commands \u2014 Linux command line for you and me 0.1 documentation (lym.readthedocs.io) "},{"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 105 \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
\ud83d\udcc4 \u4f7f\u7528 reveal-md \u6765\u5199 Slides \ud83d\uddc2\ufe0f Git Something \ud83d\uddc2\ufe0f \u64cd\u4f5c\u7cfb\u7edf | Operating System \ud83d\uddc2\ufe0f \u6570\u5b57\u903b\u8f91\u8bbe\u8ba1 | Digital Design \ud83d\uddc2\ufe0f \u9ad8\u7ea7\u6570\u636e\u7ed3\u6784 | Advanced Data Structure \u7ad9\u70b9\u7edf\u8ba1
\u672c\u7ad9\u76ee\u524d\u5171 96 \u9875\uff0c\u7d2f\u8ba1 230349 \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
\u667a\u4e91\u94fe\u63a5\uff1a\ud83d\udd17 \u6388\u8bfe\uff1a\u5434\u56fd\u6862 \u6559\u6750\uff1a\u300a\u6982\u7387\u8bba\u4e0e\u6570\u7406\u7edf\u8ba1\u300b\uff0c\u5f20\u5e3c\u594b\uff0c\u9ad8\u7b49\u6559\u80b2\u51fa\u7248\u793e \u8f85\u52a9\u6559\u6750\uff1a\u300a\u6982\u7387\u8bba\u4e0e\u6570\u7406\u7edf\u8ba1\u6559\u7a0b \u7b2c\u4e09\u7248\u300b\uff0c\u8306\u8bd7\u677e\uff0c\u9ad8\u7b49\u6559\u80b2\u51fa\u7248\u793e\uff08\u540e\u7b80\u79f0\u6a59\u4e66\uff09 Notes
[1.x] \u6982\u7387\u8bba\u7684\u57fa\u672c\u6982\u5ff5 [2.x] \u968f\u673a\u53d8\u91cf\u53ca\u5176\u6982\u7387\u5206\u5e03 [3.x] \u591a\u5143\u968f\u673a\u53d8\u91cf\u53ca\u5176\u5206\u5e03 [4.x] \u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81 [5.x] \u5927\u6570\u5b9a\u5f8b\u53ca\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406 [6.x] \u7edf\u8ba1\u91cf\u4e0e\u62bd\u6837\u5206\u5e03 [7.x] \u53c2\u6570\u4f30\u8ba1 [8.x] \u5047\u8bbe\u68c0\u9a8c "},{"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
\u53ef\u4ee5\u590d\u73b0\uff1b \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
\u7279\u522b\u7684\uff0c\u53ea\u542b\u6709\u4e00\u4e2a\u6837\u672c\u7684\u5b50\u96c6\u79f0\u4e3a\u57fa\u672c\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
\u4e24\u4e92\u9006\u4e8b\u4ef6\u53c8\u79f0\u5bf9\u7acb\u4e8b\u4ef6\u3002 \u82e5 \\(AB=\\varnothing\\)\uff0c\u5219\u79f0\u4e24\u4e8b\u4ef6\u4e0d\u76f8\u5bb9\uff08\u6216\u4e92\u65a5\uff09 \u82e5 \\(A\\subset B \\;and\\;B\\subset A\\)\uff0c\u5219\u79f0\u4e24\u4e8b\u4ef6\u76f8\u7b49 \u5176\u4e2d\uff0c\u548c\u3001\u4ea4\u3001\u9006\u4e8b\u4ef6\u6709\u5982\u4e0b\u8fd0\u7b97\u89c4\u5f8b\uff1a
\u4ea4\u6362\u5f8b\uff1a\\(A\\cup B=B\\cup A\\;,\\;A\\cap B=B\\cap A\\)\uff1b \u7ed3\u5408\u5f8b\uff1a\\(A\\cup(B\\cup C)=(A\\cup B)\\cup C\\;,\\;A(BC)=(AB)C\\)\uff1b \u5206\u914d\u5f8b\uff1a\\(A(B\\cup C)=(AB)\\cup(AC)\\;,\\;(AB)\\cup C=(A\\cup C)(B\\cup C)\\)\uff1b \u5bf9\u5076\u5f8b / \u5fb7\u6469\u6839\u5b9a\u5f8b(De Morgan's law)\uff1a\\(\\overline{\\bigcup\\limits^n_{j=1}A_j}=\\bigcap\\limits^n_{j=1}\\overline{A_j}\\;,\\;\\overline{\\bigcap\\limits^n_{j=1}A_j}=\\bigcup\\limits^n_{j=1}\\overline{A_j}\\)\uff1b \u4e32\u8054\u7cfb\u7edf\u4e0e\u5e76\u8054\u7cfb\u7edf\uff1a
\u4e32\u8054\u7cfb\u7edf\uff1a\\(A=\\bigcap\\limits_{i=1}^nA_i\\) \u5e76\u8054\u7cfb\u7edf\uff1a\\(A=\\bigcup\\limits_{i=1}^nA_i\\) "},{"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
\u975e\u8d1f\u6027 \\(P(A)\\geq0\\)\uff1b \u89c4\u8303\u6027 / \u6b63\u5219\u6027 \\(P(S)=1\\)\uff1b \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
\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 \\(P(A)=1-P(\\overline A)\\)\uff1b\u7279\u522b\u7684\uff0c\u53ef\u4ee5\u5f97\u5230 \\(P(\\varnothing)=0\\)\uff1b \u5f53 \\(A\\supset B\\) \u65f6\uff0c\\(P(A-B) = P(A)-P(B)\\) \u4e14 \\(P(A)\\geq P(B)\\)\uff1b \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 \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
\\(S\\) \u4e2d\u6837\u672c\u70b9\u6570\u6709\u9650\uff1b \\(\\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
\\(B_iB_j=\\varnothing,i,j,...,n,i\\not=j\\)\uff1b \\(\\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
\u82e5 \\(A_1,...,A_n,...\\) \u4e92\u4e0d\u76f8\u5bb9\uff0c\u5219 \\(P(\\cup_{n=1}^{\\infty}A_n|B)=\\sum\\limits_{n=1}^{\\infty}P(A_n|B)\\)\uff1b \u4e58\u6cd5\u516c\u5f0f\uff1a\u5f53 \\(P(A)\\not=0\\;\\,\\;P(B)\\not=0\\) \u65f6\uff0c\u6709 \\(P(AB)=P(A)*P(B|A)=P(B)*P(A|B)\\)\uff1b \u5168\u6982\u7387\u516c\u5f0f\uff1a\\(P(A)=\\sum\\limits_{j=1}^nP(B_j)P(A|B_j)\\)\uff1b \u8d1d\u53f6\u65af\u516c\u5f0f\uff1a\\(P(B_k|A)=\\frac{P(B_kA)}{P(A)}=\\frac{P(B_k)P(A|B_k)}{\\sum\\limits_{j=1}^nP(B_j)P(A|B_j)}\\)\uff1b \u5176\u4e2d\uff0c\u6211\u4eec\u79f0 \\(P(B_j)\\) \u8fd9\u79cd\u4e8b\u5148\u77e5\u9053\u7684\u6982\u7387\u4e3a\u5148\u9a8c\u6982\u7387\uff1b\u800c \\(P(B_j|A)\\) \u8fd9\u79cd\uff0c\u5f53\u4e8b\u4ef6 \\(A\\) \u53d1\u751f\u540e\u9700\u8981\u4fee\u6b63 \\(B_j\\) \u7684\u6982\u7387\u6210\u4e3a\u540e\u9a8c\u6982\u7387\u3002 "},{"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
\u663e\u7136\u6709\uff1a\u76f8\u4e92\u72ec\u7acb \\(\\Rightarrow\\) \u4e24\u4e24\u72ec\u7acb \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
\u72ec\u7acb\u8bd5\u9a8c\u5404\u4e2a\u8bd5\u9a8c\u7ed3\u679c\u4e92\u4e0d\u5f71\u54cd\uff1b \u91cd\u590d\u8bd5\u9a8c\u7684\u6bcf\u4e00\u6b21\u5b50\u8bd5\u9a8c\u90fd\u5728\u76f8\u540c\u60c5\u51b5\u4e0b\u8fdb\u884c\uff1b "},{"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 \\] \u5982\u679c\u9047\u5230\u6765\u81ea\u4e8e\u4e24\u70b9\u5206\u5e03\u7684\u603b\u4f53\u7684\uff0c\u5bb9\u91cf\u4e3a \\(n\\) \u7684\u6837\u672c\u7684\u5747\u503c \\(\\overline X\\)\uff0c\u5219\u6709 \\(n\u00b7\\overline X=\\sum\\limits_{i=1}^n X_i \\sim B(n,p)\\) "},{"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)\\)
\u5176\u610f\u4e49\u4e3a\uff0c\u5982\uff1a\\(a\\) \u767d\u7403\uff0c\\(b\\) \u7ea2\u7403\uff0c\u53d6 \\(n\\) \u6b21\u5f97\u5230 \\(X\\) \u4e2a\u767d\u7403 \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
\\(F(x)\\) \u5355\u8c03\u4e0d\u51cf\uff1b \\(0\\leq F(x) \\leq 1\\) \u4e14 \\(F(-\\infty)=0\\)\uff0c\\(F(+\\infty)=1\\)\uff1b \\(F(x)\\) \u53f3\u8fde\u7eed\uff0c\u5373 \\(F(x+0)=F(x)\\)\uff1b \\(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
\\(f(x) \\geq 0\\)\uff1b \\(\\int_{-\\infty}^{\\infty}f(x)dx=1\\)\uff1b \\(\\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 \u5728\\(f(x)\\) \u7684\u8fde\u7eed\u70b9 \\(x\\) \u5904\uff0c\\(F'(x)=f(x)\\) \\(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 \\] \u5219\u663e\u7136\u6709 \\(\\Phi(x)+\\Phi(-x)=1\\) \u7136\u800c\u7531\u4e8e\u5176\u65e0\u6cd5\u8ba1\u7b97\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u67e5\u8868\u83b7\u5f97\u5177\u4f53\u503c\uff0c\u4ee5\u4e0b\u4e3a\u6807\u51c6\u6b63\u6001\u5206\u5e03\u8868\uff1a https://www.shuxuele.com/data/standard-normal-distribution-table.html https://www.chip1stop.com/sp/knowledge/019_normal-distribution-table_zh \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
\u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(P\\{a<X<b\\}= P\\{\\frac{a-\\mu}{\\sigma}< \\frac{X-\\mu}{\\sigma} < \\frac{b-\\mu}{\\sigma} \\}=\\Phi(\\frac{b-\\mu}{\\sigma})-\\Phi(\\frac{a-\\mu}{\\sigma})\\) \u7279\u522b\u7684\uff1a\u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(P\\{|X-\\mu|<k\\sigma\\} = \\Phi(k)-\\Phi(-k)=2\\Phi(k)-1\\) \\(3\\sigma\\) \u6cd5\u5219 "},{"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
\\(X\\) \u4e3a\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff0c\u4e14\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a \\(f_X(x)\\)\uff1b \u968f\u673a\u53d8\u91cf \\(Y=g(X)\\)\uff1b \u51fd\u6570 \\(y=g(x)\\) \u4e3a\u4e00\u4e25\u683c\u5355\u8c03\uff08\u589e/\u51cf\uff09\u51fd\u6570\uff0c\u5e76\u4e14\u53ef\u5fae\uff1b \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} \\] \u5176\u4e2d \\(D\\) \u4e3a \\(y=g(x)\\) \u7684\u503c\u57df\u3002 \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)\\)
\u6807\u51c6\u5316\uff1a\u7279\u522b\u7684\uff0c\u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(\\frac{X-\\mu}{\\sigma}\\sim N(0,1)\\)\uff1b \u5373\u6b63\u6001\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u7ebf\u6027\u53d8\u6362\u540e\u6b63\u6001\u6027\u4e0d\u53d8\uff1b "},{"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":" \u8054\u5408\u5206\u5e03\u5f8b\uff08Joint Mass Function\uff09 \\(P(X=x_i,Y=y_j)=p_{ij}, \\; i,j=1,2,\\dots\\)\uff1b "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5206\u5e03\u5f8b","title":"\u8fb9\u9645\u5206\u5e03\u5f8b","text":" \u8fb9\u9645\u5206\u5e03\u5f8b\uff08Marginal Mass Function\uff09\u662f\u8054\u5408\u5206\u5e03\u5f8b\u7684\u884c/\u5217\u6c42\u548c\uff1b \\(P(X=x_i)=P(X=x_1,\\bigcup_{j=1}^{\\infty}(Y=y_j))=\\sum_{j=1}^{\\infty}p_{ij}:=p_{i\u00b7}\\)\uff1b \\(P(Y=y_j)=P(\\bigcup_{j=1}^{\\infty}(X=x_i),Y=y_j)=\\sum_{i=1}^{\\infty}p_{ij}:=p_{\u00b7j}\\)\uff1b "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5206\u5e03\u5f8b","title":"\u6761\u4ef6\u5206\u5e03\u5f8b","text":" \u6761\u4ef6\u5206\u5e03\u5f8b\uff08Conditional Mass Function\uff09 \\(P\\{X=x_i|Y=y_j\\}=\\frac{P(X=x_i,Y=y_j)}{P(Y=y_j)}=\\frac{p_{ij}}{p_{\u00b7j}}\\;\\;i,j=1,2,...\\)\uff1b \\(P\\{X<x|Y<y\\}=\\frac{P\\{X<x,Y<y\\}}{P\\{Y<y\\}}\\)\uff0c\u7136\u540e\u6839\u636e\u8054\u5408\u5206\u5e03\u5f8b\u548c\u8fb9\u9645\u5206\u5e03\u5f8b\u8bfb\u8868\u8ba1\u7b97\uff1b "},{"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
\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 \\(0\\leq F(x,y)\\leq 1\\)\uff0c\u4e14 \\(F(x,-\\infty)=F(-\\infty,y)=F(-\\infty,-\\infty)=0\\;,\\;F(+\\infty,+\\infty)=1\\)\uff1b \\(F(x,y)\\) \u5173\u4e8e \\(x\\) \u548c \\(y\\) \u5206\u522b\u53f3\u8fde\u7eed\uff08\u79bb\u6563\uff09\uff1b \\(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\\) Tips\uff1a\u8003\u8651\u51e0\u4f55\u610f\u4e49\uff01 "},{"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
\u5bf9 \\(y\\) \u6765\u8bf4\u540c\u7406\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
\\(f(x,y)\\geq 0\\)\uff1b \\(F(+\\infty,+\\infty)=\\int_{-\\infty}^{+\\infty}\\int_{-\\infty}^{+\\infty}f(u,v)\\mathrm{d}u\\mathrm{d}v=1\\)\uff1b \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 \\((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 \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 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
\u5bf9 \\(Y\\) \u6765\u8bf4\u540c\u7406\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
\u4e8c\u7ef4\u6b63\u6001\u5206\u5e03\u7684\u4e24\u4e2a\u8fb9\u9645\u5206\u5e03\u90fd\u662f\u5bf9\u5e94\u53c2\u6570\u7684\u4e00\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u4e0e \\(\\rho\\) \u65e0\u5173\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
\\(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
\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
\\(F_{max}(z)=P(M\\leq z)=P(X\\leq z,Y\\leq z)\\xlongequal{\\text{X,Y independent}}P(X\\leq z)P(Y\\leq z)=F_X(z)F_Y(z)\\)\uff1b \\(F_{min}(z)=P(N\\leq z)=1-P(N>z)=1-P(X>z,Y>z)\\xlongequal{\\text{X,Y independent}}1-P(X>z)P(Y>z)=1-(1-F_X(z))(1-F_Y(z))\\)\uff1b "},{"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":" \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C) = C\\)\uff1b \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C\u30fbX)=C\u30fbE(X)\\)\uff1b \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 \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
\u82e5\\(X\\)\u53d6\u503c\u96c6\u4e2d\uff0c\u5219 \\(Var(X)\\) \u8f83\u5c0f\uff1b \u82e5\\(X\\)\u53d6\u503c\u5206\u6563\uff0c\u5219 \\(Var(X)\\) \u8f83\u5927\uff1b \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
\u79bb\u6563\u578b\uff1a\\(Var(X)=E\\{[X-E(X)]^2\\}=\\sum_{i=1}^{+\\infty}[x_i-E(X)]^2p_i\\)\uff1b \u8fde\u7eed\u578b\uff1a\\(Var(X)=E\\{[X-E(X)]^2\\}=\\int_{-\\infty}^{+\\infty}[x-E(X)]^2f(x)\\mathrm dx\\)\uff1b \u5229\u7528\u671f\u671b\u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5f97\u5230 \\(Var(X)=E(X^2)-E^2(X)\\)\uff1b "},{"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":" \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C) = 0\\)\uff1b \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C\u30fbX)=C^2\u30fbVar(X)\\)\uff1b \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)\\) \\(Var(X)\\leq E[(X-c)^2]\\)\uff0c\u5e76\u4e14\u5f53\u4e14\u4ec5\u5f53 \\(E(X)=c\\) \u65f6\u7b49\u53f7\u6210\u7acb\uff1b \\(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":" \\(Cov(X,Y)=Cov(Y,X)\\)\uff1b \\(Cov(X,Y)=E(XY)-E(X)E(Y)\\)\uff1b \\(Cov(aX,bY)=abCov(X,Y)\\;,\\;\\;a,b\\in\\R\\)\uff1b \\(Cov(X+Y,Z)=Cov(X,Z)+Cov(Y,Z)\\)\uff1b \\(Cov(X,X)=Var(X)\\)\uff1b \\(Cov(c,Y)=E(cY)-E(c)E(Y)=0\\;,\\;\\;c\\in\\R\\)\uff1b \\(Cov(X+Y,X-Y)=Cov(X,X)-Cov(Y,Y)=Var(X)-Var(Y)\\)\uff1b \\(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 \\(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":" \\(|\\rho_{_{XY}}|\\leq 1\\)\uff1b \\(|\\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 \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
\\(|\\rho_{_{XY}}|\\) \u6bd4\u8f83\u5927\u65f6\uff0c\u5747\u65b9\u8bef\u5dee\u8f83\u5c0f\uff0c\u8868\u793a \\(X,Y\\) \u7ebf\u6027\u5173\u7cfb\u7684\u7a0b\u5ea6\u597d\uff1b \\(|\\rho_{_{XY}}|=1\\) \u65f6\uff0c\u5747\u65b9\u8bef\u5dee\u4e3a \\(0\\)\uff0c\u8868\u793a \\(X,Y\\) \u4e4b\u95f4\u4ee5\u6982\u7387 \\(1\\) \u5b58\u5728\u7ebf\u6027\u5173\u7cfb\uff1b \\(|\\rho_{_{XY}}|\\) \u6bd4\u8f83\u5c0f\u65f6\uff0c\u5747\u65b9\u8bef\u5dee\u8f83\u5927\uff0c\u8868\u660e \\(X,Y\\) \u7ebf\u6027\u5173\u7cfb\u7684\u7a0b\u5ea6\u5dee\uff1b \\(\\rho_{_{XY}}>0\\) \u65f6\uff0c\\(X,Y\\) \u6b63\u76f8\u5173\uff1b \\(\\rho_{_{XY}}<0\\) \u65f6\uff0c\\(X,Y\\) \u8d1f\u76f8\u5173\uff1b \\(\\rho_{_{XY}}=0\\) \u65f6\uff0c\u79f0 \\(X,Y\\) \u4e0d\u76f8\u5173\u6216\u96f6\u76f8\u5173\uff08\u4ec5\u4ec5\u5bf9\u4e8e\u7ebf\u6027\u5173\u7cfb\u6765\u8bf4\uff0c\u4e0e\u72ec\u7acb\u7684\u542b\u4e49\u4e0d\u540c\uff09\uff1b \\(\\rho_{_{XY}}=0\\) \u6709\u5982\u4e0b\u7b49\u4ef7\u6761\u4ef6\uff1a \\(Cov(X,Y)=0\\)\uff1b \\(E(XY)=E(X)E(Y)\\)\uff1b \\(Var(X\\pm Y)=Var(X)+Var(Y)\\)\uff1b \u6ce8\u610f\u533a\u5206\u72ec\u7acb\u6027\u548c\u76f8\u5173\u6027\uff1a
\\(X,Y\\) \u4e92\u76f8\u72ec\u7acb \\(\\;\\;\\Rightarrow \\;\\;\\) \\(X,Y\\) \u4e0d\u76f8\u5173\uff1b \\(X,Y\\) \u4e0d\u72ec\u7acb \\(\\;\\;\\Leftarrow \\;\\;\\) \\(X,Y\\) \u76f8\u5173\uff1b "},{"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":" \\(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 \\(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 \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 \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
\u8fd9\u79cd\u6536\u655b\u4e0d\u662f\u6570\u5b66\u610f\u4e49\u4e0a\u7684\u4e00\u822c\u6536\u655b\uff0c\u800c\u662f\u6982\u7387\u610f\u4e49\u4e0b\u7684\u4e00\u79cd\u6536\u655b\uff1b \u5176\u542b\u4e49\u662f\uff1a\\(Y_n\\) \u5bf9 \\(Y\\) \u7684\u7edd\u5bf9\u504f\u5dee\u4e0d\u5c0f\u4e8e\u4efb\u4f55\u4e00\u4e2a\u7ed9\u5b9a\u91cf\u7684\u53ef\u80fd\u6027\u968f \\(n\\) \u7684\u589e\u5927\u800c\u8d8a\u6765\u8d8a\u5c0f\uff1b\u6216\u8005\u7edd\u5bf9\u504f\u5dee \\(|Y_n-Y|\\) \u5c0f\u4e8e\u4efb\u4f55\u4e00\u4e2a\u7ed9\u5b9a\u91cf\u7684\u53ef\u80fd\u6027\u968f \\(n\\) \u7684\u589e\u5927\u65f6\u800c\u8d8a\u6765\u8d8a\u63a5\u8fd1\u4e8e \\(1\\)\uff1b \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} \\] \u5207\u6bd4\u96ea\u592b\u4e0d\u7b49\u5f0f\u662f\u9a6c\u5c14\u53ef\u592b\u4e0d\u7b49\u5f0f\u7684\u63a8\u8bba\uff1b \u5207\u6bd4\u96ea\u592b\u4e0d\u7b49\u5f0f\u5e94\u7528\u8303\u56f4\u66f4\u5e7f\uff0c\u4f46\u662f\u8ba1\u7b97\u7ed3\u679c\u66f4\u7c97\u7cd9\uff1b "},{"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\u4e3b\u8981\u8ba8\u8bba\u4ec0\u4e48\u6761\u4ef6\u4e0b\uff0c\u968f\u673a\u53d8\u91cf\u5e8f\u5217\u7684\u7b97\u672f\u5e73\u5747\u4f9d\u6982\u7387\u6536\u655b\u5230\u4e00\u4e2a\u7a33\u5b9a\u503c\uff08\u4f2f\u52aa\u5229\u5927\u6570\u5b9a\u5f8b\u4e2d\u7684\u6982\u7387\uff0c\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u4e2d\u7684\u5747\u503c\uff09\u3002 \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 \\] \u4f2f\u52aa\u5229\u5927\u6570\u5b9a\u5f8b\u5efa\u7acb\u4e86\u5728\u5927\u91cf\u91cd\u590d\u8bd5\u9a8c\u4e2d\u4e8b\u4ef6\u51fa\u73b0\u9891\u7387\u7684\u7a33\u5b9a\u6027\uff0c\u6b63\u56e0\u4e3a\u8fd9\u79cd\u7a33\u5b9a\u6027\uff0c\u6982\u7387\u7684\u6982\u5ff5\u624d\u6709\u5ba2\u89c2\u610f\u4e49\uff1b \u4f2f\u52aa\u5229\u5927\u6570\u5b9a\u5f8b\u8fd8\u63d0\u4f9b\u4e86\u901a\u8fc7\u8bd5\u9a8c\u6765\u786e\u5b9a\u4e8b\u4ef6\u6982\u7387\u7684\u65b9\u6cd5\uff1a\u65e2\u7136\u9891\u7387 \\(\\frac{n_A}{n}\\) \u4e0e\u6982\u7387 \\(p\\) \u6709\u8f83\u5927\u504f\u5dee\u7684\u53ef\u80fd\u6027\u5f88\u5c0f\uff0c\u56e0\u6b64\u53ef\u4ee5\u901a\u8fc7\u505a\u8bd5\u9a8c\u6765\u786e\u5b9a\u67d0\u4e8b\u4ef6\u53d1\u751f\u7684\u9891\u7387\uff0c\u5e76\u628a\u5b83\u4f5c\u4e3a\u76f8\u5e94\u7684\u6982\u7387\u4f30\u8ba1\u3002\u8fd9\u662f\u4e00\u79cd\u53c2\u6570\u4f30\u8ba1\u6cd5\uff0c\u8be5\u65b9\u6cd5\u7684\u91cd\u8981\u7406\u8bba\u57fa\u7840\u4e4b\u4e00\u5c31\u662f\u5927\u6570\u5b9a\u5f8b\u3002 \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":" \u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8ba8\u8bba\u4ec0\u4e48\u6761\u4ef6\u4e0b\uff0c\u72ec\u7acb\u968f\u673a\u53d8\u91cf\u7684\u548c\u7684\u5206\u5e03\u51fd\u6570 \\(Y=\\sum X_i\\) \u4f1a\u6536\u655b\u4e8e\u6b63\u6001\u5206\u5e03\u3002 "},{"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":" \u603b\u4f53\u4e0e\u4e2a\u4f53\uff1a\u4e00\u4e2a\u7edf\u8ba1\u95ee\u9898\u603b\u6709\u5b83\u660e\u786e\u7684\u7814\u7a76\u5bf9\u8c61\uff0c\u7814\u7a76\u5bf9\u8c61\u7684\u5168\u4f53\u79f0\u4e3a\u603b\u4f53\uff08\u6bcd\u4f53\uff09\uff0c\u603b\u4f53\u4e2d\u7684\u6bcf\u4e2a\u6210\u5458\u79f0\u4e3a\u4e2a\u4f53\uff1b \u603b\u4f53\u5bb9\u91cf\uff1a\u603b\u4f53\u4e2d\u5305\u542b\u7684\u4e2a\u4f53\u6570\uff1b \u6709\u9650\u603b\u4f53\u662f\u5bb9\u91cf\u6709\u9650\u7684\u603b\u4f53\uff1b \u65e0\u9650\u603b\u4f53\u662f\u5bb9\u91cf\u65e0\u9650\u7684\u603b\u4f53\uff0c\u901a\u5e38\u5c06\u5bb9\u91cf\u975e\u5e38\u5927\u7684\u603b\u4f53\u4e5f\u6309\u65e0\u9650\u603b\u4f53\u5904\u7406\uff1b \u968f\u673a\u6837\u672c\uff1a\u4e3a\u63a8\u6d4b\u603b\u4f53\u7684\u5206\u5e03\u53ca\u5176\u5404\u79cd\u7279\u5f81\uff0c\u6309\u4e00\u5b9a\u89c4\u5219\u4ece\u603b\u4f53\u4e2d\u62bd\u53d6\u82e5\u5e72\u4e2a\u4f53\u8fdb\u884c\u89c2\u5bdf\u8bd5\u9a8c\uff0c\u4ee5\u83b7\u5f97\u5173\u4e8e\u603b\u4f53\u7684\u4fe1\u606f\uff0c\u8fd9\u4e00\u8fc7\u7a0b\u79f0\u4e3a\u62bd\u6837\uff0c\u6240\u62bd\u53d6\u7684\u90e8\u5206\u4e2a\u4f53\u79f0\u4e3a\u6837\u672c\uff0c\u901a\u5e38\u8bb0\u4e3a \\(X=(X_1,X_2,...,X_n)\\)\uff1b \u6837\u672c\u5bb9\u91cf\uff1a\u6837\u672c\u4e2d\u6240\u5305\u542b\u7684\u4e2a\u4f53\u6570\u76ee \\(n\\)\uff1b \u6ce8\u610f\uff0c\u6bcf\u4e00\u4e2a\u6837\u672c \\(X_i\\) \u90fd\u662f\u968f\u673a\u53d8\u91cf\uff0c\u7ef4\u6570\u4e0e\u603b\u4f53\u4e00\u81f4\uff1b \u7b80\u5355\u968f\u673a\u6837\u672c\uff1a\u6ee1\u8db3\u4ee3\u8868\u6027\u548c\u72ec\u7acb\u6027\u7684\u6837\u672c\u79f0\u4e3a\u7b80\u5355\u968f\u673a\u6837\u672c(Simple Random Sample)\uff0c\u83b7\u5f97\u7b80\u5355\u968f\u673a\u6837\u672c\u7684\u62bd\u6837\u65b9\u6cd5\u79f0\u4e3a\u7b80\u5355\u968f\u673a\u62bd\u6837\uff1b \u4ee3\u8868\u6027\uff1a\\(X_1,X_2,...,X_n\\) \u4e2d\u7684\u6bcf\u4e00\u4e2a\u4e0e\u6240\u8003\u5bdf\u7684\u603b\u4f53 \\(X\\) \u90fd\u6709\u76f8\u540c\u7684\u5206\u5e03\uff1b \u72ec\u7acb\u6027\uff1a\\(X_1,X_2,...,X_n\\) \u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff1b \u540e\u9762\u63d0\u5230\u7684\u6240\u6709\u6837\u672c\uff0c\u6307\u7684\u90fd\u662f\u7b80\u5355\u968f\u673a\u6837\u672c\u3002
\u82e5\u603b\u4f53\u6709\u5206\u5e03\u51fd\u6570 \\(F(x)\\)\uff0c\u5219\u6837\u672c\u5177\u6709\u8054\u5408\u5206\u5e03\u51fd\u6570 \\(F_n(x_1,x_2,...,x_n)=\\prod_{i=1}^{n}F(x_i)\\)\uff1b \u82e5\u603b\u4f53\u4e3a\u8fde\u7eed\u578b\uff08\u6216\u79bb\u6563\u578b\uff09\u968f\u673a\u53d8\u91cf\uff0c\u5176\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08\u6216\u5206\u5e03\u5f8b\uff09\u4e3a \\(f(x)\\)\uff0c\u5219\u6837\u672c\u5177\u6709\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\uff08\u6216\u8054\u5408\u5206\u5e03\u5f8b\uff09 \\(f_n(x_1,x_2,...,x_n)=\\prod_{i=1}^{n}f(x_i)\\) "},{"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
\u7edf\u8ba1\u91cf\u4ecd\u7136\u4e3a\u968f\u673a\u53d8\u91cf\uff1b \u7edf\u8ba1\u91cf\u7684\u5206\u5e03\uff08\u79f0\u4e3a\u62bd\u6837\u5206\u5e03\uff09\u4e00\u822c\u4e0e\u603b\u4f53\u5206\u5e03\u6709\u5173\uff0c\u53ef\u4ee5\u4f9d\u8d56\u672a\u77e5\u53c2\u6570\uff1b \u5f53\u6837\u672c\u7684\u89c2\u5bdf\u503c\u786e\u5b9a\u65f6\uff0c\u7edf\u8ba1\u91cf\u7684\u503c\u4e5f\u5c31\u968f\u4e4b\u786e\u5b9a\u4e86\uff1b "},{"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
\\(E(\\overline{X})=\\mu\\)\uff0c\\(Var(\\overline{X})=\\sigma^2/n\\) \\(\\sum_{i=1}^{n}(X_i-\\overline{X})=0\\)\uff1b \u6570\u636e\u89c2\u6d4b\u503c\u4e0e\u6837\u672c\u5747\u503c\u7684\u504f\u5dee\u5e73\u65b9\u548c\u6700\u5c0f\uff0c\u5373\u5728\u5f62\u5982 \\(\\sum(X_i-c)^2\\) \u7684\u51fd\u6570\u4e2d\uff0c\\(\\sum(X_i-\\overline{X})^2\\)\u6700\u5c0f\uff1b \u82e5\u603b\u4f53\u670d\u4ece \\(N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(\\overline{X}\\) \u7684\u7cbe\u786e\u5206\u5e03\u4e3a \\(N(\\mu,\\sigma^2/n)\\)\uff1b \u82e5\u603b\u4f53\u5206\u5e03\u672a\u77e5\u6216\u4e0d\u662f\u6b63\u6001\u5206\u5e03\uff0c\u5219\u5f53 \\(n\\) \u8f83\u5927\u65f6\uff0c\\(\\overline{X}\\) \u8fd1\u4f3c\u670d\u4ece \\(N(\\mu,\\sigma^2/n)\\)\uff1b "},{"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
\\(E(S^2)=\\sigma^2\\)\uff1b \\(\\sum(X_i-\\overline{X})^2=\\sum X_i^2-\\frac{1}{n}(\\sum X_i)^2=\\sum X_i^2-n\\overline{X}^2\\)\uff1b \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
\u5047\u8bbe \\(X_1,X_2,...,X_n\\) \u662f \\(X\\) \u4e2d\u62bd\u53d6\u7684\u6837\u672c\uff0c\\(\\mu_k=E(X^k)\\) \u5b58\u5728\uff0c\u7531\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u53ef\u77e5\uff1a \\(A_k=\\frac{1}{n}\\sum_{i=1}^{n}X_i^k\\xrightarrow{P}\\mu_k,\\;\\;k=1,2,...\\) \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
\u8bbe \\(X \\sim \\chi^2(n)\\)\uff0c\u5219\u6709 \\(E(X)=n\\)\uff0c\\(Var(X)=2n\\)\uff1b \u8bbe \\(Y_1 \\sim \\chi^2(m)\\)\uff0c\\(Y_2\\sim\\chi^2(n)\\)\uff0c\u4e14\u4e24\u8005\u4e92\u76f8\u72ec\u7acb\uff0c\u5219 \\(Y_1+Y_2\\sim \\chi^2(m+n)\\)\uff1b \u8fd9\u4e00\u6027\u8d28\u88ab\u79f0\u4e3a \\(\\chi^2\\) \u5206\u5e03\u7684\u53ef\u52a0\u6027\uff0c\u53ef\u4ee5\u63a8\u5e7f\u5230\u6709\u9650\u4e2a\u76f8\u52a0\u7684\u60c5\u5f62\uff1b \\(\\chi^2\\) \u5206\u5e03\u7684\u4e0a \\(\\alpha\\) \u5206\u4f4d\u6570\uff1a \u5bf9\u4e8e\u7ed9\u5b9a\u7684\u6b63\u6570 \\(\\alpha,\\;0<\\alpha<1\\)\uff0c\u79f0\u6ee1\u8db3\u6761\u4ef6 \\(P\\{\\chi^2>\\chi^2_\\alpha(n)\\}=\\int^{+\\infty}_{\\chi^2_\\alpha(n)}f_{\\chi^2}(x)\\mathrm{d}x=\\alpha\\) \u7684\u70b9 \\(\\chi^2_{\\alpha}(n)\\) \u4e3a \\(\\chi^2(n)\\) \u5206\u5e03\u7684\u4e0a \\(\\alpha\\) \u5206\u4f4d\u6570\uff1b
"},{"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
\u8bbe \\(T\\sim t(n)\\)\uff0c\u5219\u5f53 \\(n\\geq 2\\) \u65f6\uff0c\u6709 \\(E(T)=0\\)\uff1b\u5f53 \\(n\\geq 3\\) \u65f6\uff0c\u6709 \\(Var(T)=\\frac{n}{n-2}\\)\uff1b \u5f53 \\(n\\) \u8db3\u591f\u5927\u65f6\uff0c\\(t\\) \u5206\u5e03\u8fd1\u4f3c\u4e8e\u6807\u51c6\u6b63\u6001\u5206\u5e03 \\(N(0,1)\\)\uff1b \u8bbe \\(T\\sim t(n)\\)\uff0c\\(N\\sim N(0,1)\\)\uff0c\u5219\u5bf9\u4efb\u610f\u7684 \\(n\\geq 1\\)\uff0c\u90fd\u5b58\u5728 \\(a_0>0\\)\uff0c\u4f7f\u5f97 \\(P(|T|\\geq a_0)\\geq P(|N|\\geq a_0)\\)\uff1b \\(t_{1-\\alpha}(n)=-t_{\\alpha}(n)\\)\uff1b
"},{"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
\u8bbe \\(F\\sim F(n_1,n_2)\\)\uff0c\u5219 \\(F^{-1}\\sim F(n_2,n_1)\\)\uff1b \u8bbe \\(X\\sim t(n)\\)\uff0c\u5219 \\(X^2\\sim F(1,n)\\)\uff1b \\(F_{1-\\alpha}(n_1,n_2)=\\frac{1}{F_{\\alpha}(n_2,n_1)}\\)\uff1b
"},{"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
\\(\\overline{X}\\sim N(\\mu,\\frac{\\sigma^2}{n})\\)\uff1b \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff1b \\(\\overline{X}\\) \u4e0e \\(S^2\\) \u76f8\u4e92\u72ec\u7acb\uff1b \\(\\frac{\\overline{X} - \\mu}{S/\\sqrt{n}}\\sim t(n-1)\\)\uff1b \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
\\(\\frac{S_1^2/\\sigma_1^2}{S_2^2/\\sigma^2_2}\\sim F(n_1-1,n_2-1)\\)\uff1b \\(\\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 \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
\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 \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 \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
\u5982\u679c\u65b9\u7a0b\u4e2d\u5b58\u5728\u6052\u7b49\u5f0f\uff0c\u5219\u53ef\u4ee5\u987a\u5ef6\u6c42 \\(\\mu_{k+1},\\mu_{k+2},...\\)\uff1b \u7406\u8bba\u4e0a\u4efb\u610f \\(k\\) \u4e2a\u5173\u4e8e \\(\\mu_{i}\\) \u7684\u65b9\u7a0b\u7ec4\u90fd\u53ef\u4ee5\uff0c\u4f46\u8003\u8bd5\u8981\u6c42\u524d \\(k\\) \u4e2a\u624d\u7b97\u5bf9\uff1b "},{"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
\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 \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
\u89e3\u4f3c\u7136\u65b9\u7a0b \\(\\frac{\\partial L(\\theta)}{\\partial \\theta_i}=0\\)\uff0c\u68c0\u9a8c\u6781\u5927\u503c\u70b9\uff1b \u6216\u8005\u4e5f\u53ef\u4ee5\u89e3\u5bf9\u6570\u4f3c\u7136\u65b9\u7a0b \\(\\frac{\\partial \\ln L(\\theta)}{\\partial \\theta_i}=0\\)\uff0c\u68c0\u9a8c\u6781\u5927\u503c\u70b9\uff1b \u82e5 \\(L(\\theta)\\) \u5173\u4e8e\u67d0\u4e2a \\(\\theta_i\\) \u662f\u5355\u8c03\u7684\uff0c\u5219\u6700\u5927\u503c\u5728\u8fb9\u754c\u53d6\u5f97\uff1b \u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u6cd5\u7684\u6027\u8d28\uff1a
\u4e0d\u53d8\u539f\u5219\uff1a\u8bbe\u53c2\u6570 \\(\\theta\\) \u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u4e3a \\(\\hat\\theta\\) \u82e5 \\(g(\\cdot)\\) \u4e3a\u8fde\u7eed\u51fd\u6570\uff0c\u5219 \\(g(\\theta)\\) \u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u4e3a \\(g(\\hat{\\theta})\\)\uff1b "},{"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
\u82e5 \\(E(\\hat{\\theta})\\not=\\theta\\)\uff0c\u5219\u79f0 \\(|E(\\hat{\\theta})-\\theta|\\) \u4e3a\u4f30\u8ba1\u91cf \\(\\hat\\theta\\) \u7684\u504f\u5dee\uff1b \u82e5 \\(\\lim_{n\\to+\\infty}E(\\hat{\\theta})=0\\)\uff0c\u5219\u79f0 \\(\\hat{\\theta}\\) \u662f \\(\\theta\\) \u7684\u6e10\u8fdb\u65e0\u504f\u4f30\u8ba1(Asymptotic Unbiased Estimation)\uff1b "},{"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
\u82e5 \\(\\hat\\theta\\) \u662f\u53c2\u6570 \\(\\theta\\) \u7684\u65e0\u504f\u4f30\u8ba1\u91cf\uff0c\u5219\u6709 \\(Mse(\\hat\\theta)=Var(\\hat\\theta)\\)\uff1b \u5747\u65b9\u8bef\u5dee\u6709\u5206\u89e3\u5f0f \\(E[(\\hat\\theta-\\theta)^2]=Var(\\hat\\theta)+(E(\\hat\\theta)-\\theta)^2\\)\uff1b \u5747\u65b9\u8bef\u5dee\u51c6\u5219\u5e38\u7528\u4e8e\u6709\u504f\u4f30\u8ba1\u91cf\u4e4b\u95f4\uff0c\u6216\u6709\u504f\u4f30\u8ba1\u91cf\u4e0e\u65e0\u504f\u4f30\u8ba1\u91cf\u4e4b\u95f4\u7684\u6bd4\u8f83\uff1b\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u6709\u65f6\u5747\u65b9\u8bef\u5dee\u51c6\u5219\u6bd4\u65e0\u504f\u6027\u51c6\u5219\u66f4\u52a0\u91cd\u8981\uff1b "},{"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
\u8bbe \\(\\hat\\theta_n\\) \u662f \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u91cf\uff0c\u82e5 \\(\\lim_{n\\to \\infty}E(\\hat\\theta)=\\theta\\)\uff0c\\(\\lim_{n\\to\\infty}Var(\\hat\\theta_n)=0\\)\uff0c\u5219 \\(\\hat\\theta_n\\) \u662f \\(\\theta\\) \u7684\u76f8\u5408\u4f30\u8ba1\u3002 "},{"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
\u7f6e\u4fe1\u533a\u95f4\uff1a\u8bbe\u603b\u4f53 \\(X\\) \u7684\u5206\u5e03\u51fd\u6570 \\(F(x;\\theta)\\) \u542b\u6709\u4e00\u4e2a\u672a\u77e5\u53c2\u6570 \\(\\theta\\)\uff0c\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u503c \\(\\alpha\\)\uff0c\u5982\u679c\u6709\u4e24\u4e2a\u7edf\u8ba1\u91cf \\(\\theta_{L}=\\theta_{L}(X_1,X_2,...,X_n)\\)\uff0c\\(\\theta_{U}=\\theta_{U}(X_1,X_2,...,X_n)\\)\uff0c\\(\\theta_{L}<\\theta_{U}\\)\uff0c\u4f7f\u5f97 \\(P\\{ \\theta_{L}(X_1,X_2,...,X_n) < \\theta < \\theta_{U}(X_1,X_2,...,X_n) \\}\\geq 1-\\alpha \\;\\;,\\;\\; \\forall \\theta \\in \\Theta\\)\uff0c\u5219\u79f0\u968f\u673a\u533a\u95f4 \\([\\theta_{L},\\theta_{U}]\\) \u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha\\) \u7684\u53cc\u4fa7\u7f6e\u4fe1\u533a\u95f4\uff0c\u7b80\u79f0\u7f6e\u4fe1\u533a\u95f4\uff1b \u7f6e\u4fe1\u4e0b\u9650\u548c\u7f6e\u4fe1\u4e0a\u9650\uff1a\u5206\u522b\u662f \\(\\theta_{L}\\) \u548c \\(\\theta_{U}\\)\uff1b \u7f6e\u4fe1\u5ea6\uff08\u7f6e\u4fe1\u6c34\u5e73\uff09\uff1a\\(1-\\alpha\\)\uff1b \u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\uff1a\u5728\u7f6e\u4fe1\u533a\u95f4\u7684\u5b9a\u4e49\u4e2d\uff0c\u5982\u679c\u4fee\u6539\u4e3a \\(P\\{ \\theta_{L}(X_1,X_2,...,X_n) < \\theta \\}\\geq 1-\\alpha \\;\\;,\\;\\; \\forall \\theta \\in \\Theta\\)\uff0c\u5219\u79f0\u968f\u673a\u533a\u95f4 \\([\\theta_{L},+\\infty]\\) \u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha\\) \u7684\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\uff1b \u76f8\u5e94\u5730\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u5355\u4fa7\u7f6e\u4fe1\u4e0b\u9650\uff0c\u4ee5\u53ca\u5177\u6709\u5355\u4fa7\u7f6e\u4fe1\u4e0a\u9650\u7684\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4 \\((-\\infty,\\theta_{U})\\)\uff1b \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":" \u7f6e\u4fe1\u5ea6\u539f\u5219\uff1a \u5e0c\u671b\u968f\u673a\u533a\u95f4 \\([\\theta_{L},\\theta_{U}]\\) \u5305\u542b\u771f\u503c \\(\\theta\\) \u7684\u6982\u7387\u8d8a\u5927\u8d8a\u597d\uff1b \u7cbe\u786e\u5ea6\u539f\u5219\uff1a \u53ef\u4ee5\u7528\u968f\u673a\u533a\u95f4\u7684\u5e73\u5747\u957f\u5ea6 \\(E(\\theta_{U}-\\theta_{L})\\) \u53bb\u8861\u91cf\uff0c\u5e0c\u671b\u5176\u8d8a\u77ed\u8d8a\u597d\uff1b\u5e76\u79f0\u4e8c\u5206\u4e4b\u4e00\u533a\u95f4\u7684\u5e73\u5747\u957f\u5ea6\u4e3a\u7f6e\u4fe1\u533a\u95f4\u7684\u8bef\u5dee\u9650\uff1b \u8fd9\u662f\u4e00\u5bf9\u77db\u76fe\u7684\u6807\u51c6\uff0c\u73b0\u5b9e\u5e94\u7528\u4e2d\u6211\u4eec\u901a\u5e38\u5e0c\u671b\u5728\u4fdd\u8bc1\u7f6e\u4fe1\u5ea6\u7684\u524d\u63d0\u4e0b\uff0c\u5c3d\u53ef\u80fd\u63d0\u9ad8\u7cbe\u786e\u5ea6\uff1b "},{"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
\u6784\u9020\u67a2\u8f74\u91cf \\(G(X;\\theta)\\)\uff1b \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 \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
\u82e5\u8981\u6c42\u5355\u4fa7\u7f6e\u4fe1\u9650\uff0c\u53ea\u9700\u8981\u5c06 \\(P\\{ a<G(X;\\theta)<b \\}\\geq 1-\\alpha\\) \u76f8\u5e94\u5730\u6539\u4e3a \\(P\\{ a<G(X;\\theta) \\}\\geq 1-\\alpha\\) \u6216 \\(P\\{ G(X;\\theta)<b \\}\\geq 1-\\alpha\\) \u5373\u53ef\uff1b \u67a2\u8f74\u91cf\u548c\u7edf\u8ba1\u91cf\u7684\u533a\u522b\uff1a \u67a2\u8f74\u91cf\u662f\u6837\u672c\u548c\u5f85\u4f30\u53c2\u6570\u7684\u51fd\u6570\uff0c\u5176\u5206\u5e03\u4e0d\u4f9d\u8d56\u4e8e\u4efb\u4f55\u672a\u77e5\u53c2\u6570\uff1b \u7edf\u8ba1\u91cf\u53ea\u662f\u6837\u672c\u7684\u51fd\u6570\uff0c\u5176\u5206\u5e03\u5e38\u4f9d\u8d56\u4e8e\u672a\u77e5\u53c2\u6570\uff1b "},{"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
\u6bd4\u8f83\u5747\u503c\uff08\u4f30\u8ba1 \\(\\mu_1-\\mu_2\\)\uff0c\u4e5f\u79f0\u4e3a Behrens-Fisher \u95ee\u9898\uff09\uff1b \u6bd4\u8f83\u65b9\u5dee\uff08\u4f30\u8ba1 \\(\\frac{\\sigma_1^2}{\\sigma_2^2}\\)\uff09\uff1b 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
\u6a59\u4e66 P314 \u7eff\u4e66 P211 "},{"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":" \u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b \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 \u6839\u636e\u5b9e\u9645\u6837\u672c\u4f5c\u51fa\u5224\u65ad\uff1b \u6216\u8005
\u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b \u8ba1\u7b97\u68c0\u9a8c\u7edf\u8ba1\u91cf\u7684\u89c2\u5bdf\u503c\u548c\\(P\\_\\)\u503c\uff1b \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":" \u51af\u00b7\u8bfa\u4f9d\u66fc\u7ed3\u6784\uff1a\u4e00\u79cd\u5c06\u7a0b\u5e8f\u6307\u4ee4\u5b58\u50a8\u5668\u548c\u6570\u636e\u5b58\u50a8\u5668\u5408\u5e76\u5728\u4e00\u8d77\u7684\u7535\u8111\u8bbe\u8ba1\u6982\u5ff5\u7ed3\u6784\u3002 \u95ee\u4f60\u4e00\u4e2achar
\u578b\u53d8\u91cf\u7684\u503c\u662f\u591a\u5c11\uff0c\u8981\u4e48\u8bb0\u5f97\u5f15\u53f7\uff0c\u8981\u4e48\u8bb0\u5f97\u7528ASCII C\u8bed\u8a00\u7a0b\u5e8f\u6613\u4e8e\u79fb\u690d \u4e0e\u786c\u4ef6\u6709\u5173\u7684\u56e0\u7d20\u88ab\u4ece\u8bed\u8a00\u4e3b\u4f53\u4e2d\u5206\u79bb\u51fa\u6765 C\u8bed\u8a00\u6570\u636e\u7c7b\u578b\u68c0\u67e5\u4e0d\u4e25\u683c C\u8bed\u8a00\u8868\u8fbe\u5f0f\u51fa\u73b0\u4e8c\u4e49\u6027 C\u8bed\u8a00\u4e0d\u80fd\u81ea\u52a8\u68c0\u67e5\u6570\u636e\u8d8a\u754c \u6570\u636e\u6587\u4ef6\u53ef\u5206\u4e3a\u6587\u672c\u6587\u4ef6\u548c\u4e8c\u8fdb\u5236\u6587\u4ef6 \u6587\u4ef6\u7684\u6570\u636e\u6d41\u53c8\u5206\u4e3a\u5b57\u7b26\u6d41\u548c\u4e8c\u8fdb\u5236\u6d41 \u4e0b\u9762\u8fd9\u4e9b\u8bf4\u6cd5\u90fd\u6ca1\u9519\uff0c\u4f46\u662f\u6211\u60f3\u5230\u4e86\u66f4\u597d\u7684\u8bf4\u6cd5\u6240\u4ee5\u5212\u4e86\u4ed6\u4eec typedef
\u6570\u7ec4\u7684\u683c\u5f0f\u5982\u4e0b\uff1a \u5219\u4e0b\u9762\u4e24\u4e2a\u7b49\u6548\uff1a \u4f46\u7cfb\u7edf\u5bf9\u4ed6\u4eec\u7684\u7c7b\u578b\u8ba4\u5b9a\u4e0d\u540c\uff0carray
\u4f5c\u4e3a\u4e00\u4e2a\u65b0\u7684~~type~~
\u5b58\u5728 typedef
\u7684\u5b9a\u4e49\u7c7b\u4f3c\u4e8e\u53d8\u91cf\u7684\u5b9a\u4e49\uff1a \u300ceg\u300d\u4e8c\u7ea7\u6307\u9488\u6570\u7ec4\uff1atypedef int **P[10];
\u4e4b\u540e\u4f60\u53ef\u4ee5\u7528P
\u4ee3\u8868\u4e00\u4e2a\u6307\u5411\u4e00\u4e2a\u6307\u5411\u6574\u578b\u7684\u6307\u9488\u7684\u6307\u9488\u768410\u7ef4\u6570\u7ec4\u7684\u7c7b\u578b\uff0810\u4e2a\u4e8c\u7ea7\u6307\u9488\uff09 \u300ceg\u300d\u4e00\u7ea7\u6570\u7ec4\u6307\u9488\uff1atypedef int (*P)[10];
\u4e4b\u540e\u4f60\u53ef\u4ee5\u7528P
\u4ee3\u8868\u4e00\u4e2a\u6307\u541110\u7ef4\u6570\u7ec4\u7684\u6307\u9488\u7684\u7c7b\u578b(1\u4e2a\u4e00\u7ea7\u6307\u9488) \u76f8\u5173\u5185\u5bb9\uff1a\u8fd9\u91cc typedef
\u7684\u5185\u5bb9\u4e00\u822c\u7528\u5927\u5199\u5355\u8bcd(\u6bd4\u5982FILE)\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u81ea\u5b9a\u4e49\u7c7b\u578b\uff0c\u4f46\u4e0d\u7528\u5927\u5199\u4e5f\u4e0d\u4f1a\u51fa\u9519 break;
\u53ef\u4ee5\u51fa\u73b0\u5728loop\u6216\u8005switch\u5185 \u8981\u5c0f\u5fc3\u85cf\u5728\u53c2\u6570\u8868\u91cc\u7684\u7c7b\u578b\u8f6c\u6362 \u9898\u9762\u7b54\u6848 \u5982\u4e0b\u7a0b\u5e8f\u7684\u8f93\u51fa\u4e3a___\u3002 #include <stdio.h>\n\ndouble myFunction(int x){\nreturn x;\n}\n\nint main(){\nprintf(\"%lf\",myFunction(3.14));\n}\n
3 \u56e0\u4e3a 3.14 \u5728\u4f20\u5165 myFunction(int)
\u65f6\u53d1\u751f\u4e86\u7c7b\u578b\u8f6c\u6362\u3002
\u8fd9\u4e2a\u62a5\u9519
#include<stdio.h>\n\n{}\n\nint main(){\n}\n
\u8fd9\u4e2a\u4e0d\u62a5\u9519
#include<stdio.h>\n\nint main(){\n{}\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 \u5bf9\u4e8e\u5e38\u6570\uff1a sizeof(1) = 4
sizeof(1ll) = 8
sizeof(1.0) = 8
sizeof(1.0f) = 4
sizeof()
\u662f\u4e00\u4e2a\u8fd0\u7b97\u7b26\uff0c\u4e0d\u662f\u51fd\u6570\uff0c\u800c\u4e14\u5728\u7f16\u8bd1\u9636\u6bb5\u5c31\u5b8c\u6210\u66ff\u6362\u3002 \u5982\u679c k
\u7684\u7c7b\u578b\u53608B\u5185\u5b58\uff0c\u5219 sizeof(++k)
\u5728\u7f16\u8bd1\u9636\u6bb5\u88ab\u66ff\u6362\u4e3a8\uff0c\u800c k
\u7684\u503c\u4e0d\u4f1a\u6539\u53d8 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u7f16\u8bd1\u7f16\u8bd1\u9884\u5904\u7406","title":"\u7f16\u8bd1\u3001\u7f16\u8bd1\u9884\u5904\u7406","text":" \u7f16\u8bd1\u9884\u5904\u7406 \u7f16\u8bd1\u9884\u5904\u7406\u662f C \u8bed\u8a00\u7f16\u8bd1\u7a0b\u5e8f\u7684\u7ec4\u6210\u90e8\u5206\uff0c\u7528\u4e8e\u89e3\u91ca\u5904\u7406 C \u8bed\u8a00\u7a0b\u5e8f\u4e2d\u7684\u9884\u5904\u7406\u6307\u4ee4\uff08\u7279\u5f81\u662f\u4ee5 #
\u5f00\u5934\uff0c\u5b83\u4eec\u4e0d\u662f\u771f\u6b63\u7684 C \u8bed\u53e5\uff09 \u7f16\u8bd1\u9884\u5904\u7406\u5728\u6b63\u5f0f\u7f16\u8bd1\u4e4b\u524d #include
\u5982\u679c\u540e\u9762\u662f <xxx>
\uff0c\u5219\u5c06\u4f7f\u7528 C \u8bed\u8a00\u7684\u6807\u51c6\u5934\u6587\u4ef6 \u5982\u679c\u540e\u9762\u662f \"xxx\"
\uff0c\u5c06\u5148\u5230\u5f53\u524d\u5de5\u4f5c\u76ee\u5f55\u5bfb\u627e\u88ab\u5305\u542b\u7684\u6587\u4ef6\uff0c\u627e\u4e0d\u5230\u5219\u53bb\u7cfb\u7edf include
\u76ee\u5f55\u5bfb\u627e \u5b8f \u57fa\u672c\u683c\u5f0f #define \u5b8f\u540d(\u5b8f\u53c2) \u5b8f\u5b9a\u4e49\u5b57\u7b26\u4e32
\u5b8f\u53ea\u662f\u7eaf\u7cb9\u7684\u5bf9\u4ee3\u7801\u7684\u5b57\u7b26\u4e32\u66ff\u6362\uff01 \u6761\u4ef6\u7f16\u8bd1
#define FLAG 1\n#if FLAG\n//\u7a0b\u5e8f\u6bb51\n#else\n//\u7a0b\u5e8f\u6bb52\n#endif\n
\u7531\u4e8e\u8fd9\u4e9b\u90fd\u5728\u9884\u7f16\u8bd1\u4e2d\u5904\u7406\uff1a
#if
\u540e\u9762\u7684\u6761\u4ef6\u53ea\u80fd\u662f\u5b8f\u540d \u4e0d\u5728\u6761\u4ef6\u9009\u62e9\u8303\u56f4\u5185\u7684\u4ee3\u7801\u4e0d\u4f1a\u88ab\u7f16\u8bd1 \u7f16\u8bd1\u7a0b\u5e8f \u9996\u5148\u8981\u5bf9 \u6e90\u7a0b\u5e8f \u8fdb\u884c \u8bcd\u6cd5\u5206\u6790\uff0c\u7136\u540e\u8fdb\u884c \u8bed\u6cd5\u5206\u6790 \u548c\u8bed\u4e49\u5206\u6790
\u7f16\u5199\u7a0b\u5e8f -> \u7f16\u8bd1\u751f\u6210\u4e8c\u8fdb\u5236obj\u76ee\u6807\u7a0b\u5e8f\u6587\u4ef6 ->\u4e0e\u5e93\u51fd\u6570\u8fdb\u884c\u8fde\u63a5\uff0c\u5f62\u6210exe\u53ef\u6267\u884c\u6587\u4ef6 "},{"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":" sqrt(x)
\\(\\sqrt x\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b pow(x,n)
\\(x^n\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b exp(x)
\\(e^x\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b fabs(x)
\\(|x|\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b log(x)
\\(\\ln{x}\\)\uff0c\u8fd4\u56de double
\u7c7b\u578b "},{"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":" \u5206\u652f\u8bed\u53e5\u6d4b\u8bd5\u6570\u636e\u81f3\u5c11\u9700\u8981\u51e0\u7ec4\u95ee\u9898\uff1a\u8981\u6ce8\u610f\u6570\u636e\u8fb9\u754c\u4e5f\u8981\u7b97\u4e00\u7ec4: \u5982\u4e0b\u5206\u652f\u8bed\u53e5\u9700\u8981\u8bbe\u8ba1\u81f3\u5c11___\u7ec4\u6d4b\u8bd5\u6570\u636e\uff1f \u9898\u9762\u7b54\u6848 if(x < 60){\n//\u8bed\u53e5\n}\n
\u7b54\u6848\uff1a3 \u89e3\u6790\uff1ax < 60
x = 60
x > 60
switch()
\u8bed\u53e5 \u9664\u4e86\u5e26\u5f15\u53f7\u7684\u5b57\u7b26\uff0ccase
\u540e\u9762\u8981\u6253\u7a7a\u683c\uff0c\u4e0d\u6253\u7a7a\u683c\u53ef\u80fd\u80fd\u8fc7\u7f16\u8bd1\u4f46\u662f\u65e0\u6cd5\u6b63\u5e38\u5224\u65ad case 'a'
\u6709\u6548 case'a'
\u6709\u6548 casea
\u65e0\u6548 case1
\u65e0\u6548 case
\u540e\u8ddf\u7684\u5fc5\u987b\u662f\u4e0d\u91cd\u590d\u7684\u5e38\u91cf\u8868\u8fbe\u5f0f\uff0c\u4e0d\u53ef\u4ee5\u662f\u53d8\u91cf\u53c2\u4e0e\u7684\u8868\u8fbe\u5f0f \u4e0d\u6253 break
\u4f1a\u4ece\u7b26\u5408\u6761\u4ef6\u7684 case
\u5f00\u59cb\u4e00\u76f4\u5f80\u4e0b\u5230\u5e95\u6216\u8005\u4e4b\u540e\u7b2c\u4e00\u4e2a break
\u6240\u4ee5 break;
\u4e0d\u4e00\u5b9a\u53ea\u80fd\u51fa\u73b0\u5728\u5faa\u73af\u91cc
C\u8bed\u8a00\u7684\u903b\u8f91\u8fd0\u7b97\u5177\u6709\u7701\u7565\u7279\u6027\uff1a\u5f53\u524d\u4e00\u4e2a\u8868\u8fbe\u5f0f\u5df2\u7ecf\u80fd\u591f\u51b3\u5b9a\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u503c\u7684\u65f6\u5019\uff0c\u4e0d\u8ba1\u7b97\u540e\u9762\u90a3\u4e2a\u8868\u8fbe\u5f0f
\u9898\u9762\u7b54\u6848 \u4e0b\u5217\u7a0b\u5e8f\u6bb5\u7ed3\u675f\u540e x
\u548c y
\u7684\u503c\u5206\u522b\u4e3a___ \uff0c ___\u3002 int x = 0 , y = 0;\nif((++x) || (++y)){\n//\u8bed\u53e5\n}\n
\u7b54\u6848\uff1a1\uff0c0 "},{"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
\u4e00\u65e6\u5728\u7a0b\u5e8f\u4e2d\u5b9a\u4e49\u4e86\u53d8\u91cf\uff0c\u8ba1\u7b97\u673a\u5728\u6267\u884c\u8fc7\u7a0b\u4e2d\u4f1a\u6839\u636e\u53d8\u91cf\u7684\u7c7b\u578b\u5206\u914d\u76f8\u5e94\u7684\u5185\u5b58\u5355\u5143\u4f9b\u53d8\u91cf\u4fdd\u5b58\u6570\u636e \u81ea\u52a8\u53d8\u91cf\u7684\u5b9a\u4e49\u4e3a\uff1aauto \u7c7b\u578b \u53d8\u91cf\u8868;
\u4e00\u822c\u60c5\u51b5\u4e0b auto
\u53ef\u4ee5\u7701\u7565 \u81ea\u52a8\u53d8\u91cf\u4f1a\u81ea\u52a8\u5206\u914d\u56de\u6536\u5185\u5b58 \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 ... \u9759\u6001\u5c40\u90e8\u53d8\u91cf\u7684\u5185\u5b58\u5b58\u50a8\u5728\u9759\u6001\u5b58\u50a8\u533a\u4e2d\uff0c\u751f\u547d\u5468\u671f\u6301\u7eed\u5230\u7a0b\u5e8f\u7ed3\u675f\uff0c\u4e0d\u4f1a\u5728\u9000\u51fa\u51fd\u6570\u7684\u65f6\u5019\u88ab\u56de\u6536\uff0c\u4e0b\u4e00\u6b21\u4f7f\u7528\u540e\u4f1a\u88ab\u91cd\u65b0\u6fc0\u6d3b \u4e0e\u52a8\u6001\u5168\u5c40\u53d8\u91cf\u76f8\u6bd4\uff0c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u5728\u5f53\u524d\u6587\u4ef6\u5185\uff0c\u52a8\u6001\u5168\u5c40\u53d8\u91cf\u5728\u591a\u6587\u4ef6\u9879\u76ee\u4e2d\u5728\u6bcf\u4e00\u4e2a\u6587\u4ef6\u90fd\u53ef\u4ee5\u7528 \u9759\u6001\u53d8\u91cf\u7684\u5b9a\u4e49\u4e3a\uff1astatic \u7c7b\u578b \u53d8\u91cf\u8868;
\u9759\u6001\u53d8\u91cf\u521d\u503c\u9ed8\u8ba4\u4e3a 0
"},{"location":"cour_note/D1QD_CXiaoCheng/#\u8865\u7801","title":"\u8865\u7801","text":" \u4e3a\u4e86\u65b9\u4fbf\u8ba1\u7b97\u673a\u5185\u7684\u8fd0\u7b97\uff0c\u4e00\u822c\u7528\u8865\u7801\u8868\u793a\u6570\u503c -\u8865\u7801\u7684\u8ba1\u7b97\uff1a\u8d1f\u6570\u9664\u4e86\u7b26\u53f7\u4f4d\u53d6\u53cd\u52a0\u4e00 \u300ceg\u300d\u4e24\u4e2a\u5b57\u8282\u5b58\u50a8-17\uff1a \u539f\u7801\uff1a1000``0000
0001``0001
\u53cd\u7801\uff1a1111``1111
1110``1110
\u8865\u7801\uff1a1111``1111
1110``1111
\u4f7f\u7528\u8865\u7801\u65b9\u4fbf\u7684\u539f\u56e0\u662f\uff1a\u5904\u7406\u8d1f\u6570\u548c\u6574\u6570\u76f8\u52a0\uff0c\u5b9e\u9645\u4e0a\u662f\u505a\u540c\u4f59\u8fd0\u7b97\uff1a \\(-3\\) = \\((1101)_{\u8865\u7801}\\) \\(6\\) = \\((0110)_{\u8865\u7801}\\) \\(-3 + 6\\) = \\((1101)_{\u8865\u7801} + (0110)_{\u8865\u7801}\\) = \\((0011)_{\u8865\u7801}\\) = \\(3\\) \u4f46\u662f\u5982\u679c\u628a\u8865\u7801\u90fd\u5f53\u505a\u662f\u67d0\u4e2a\u6570\u7684\u539f\u7801\u5462\uff1f \\((1101)_{\u539f\u7801}\\) = \\(13\\) \\((0110)_{\u539f\u7801}\\) = \\(6\\) \\((0110)_{\u539f\u7801}\\) + \\((1101)_{\u539f\u7801}\\) = \\(13+6\\) = \\(19\\) = \\((0011)_{\u539f\u7801} + (10000)_{\u539f\u7801}\\) \u663e\u7136\uff0c\u8fd9\u91cc\u7684 10000
\u6ea2\u51fa\u4e86\uff0c\u662f\u4e0d\u662f\u5f88\u50cf\u53d6\u6a21\uff1f \\(19 \\equiv 3 \\mod 16\\) \u800c\u8fd9\u4e2a 16
\u5c31\u662f\\(2^4\\)\uff0c\u8fd9\u4e2a4
\u662f\u4ec0\u4e48\u663e\u800c\u6613\u89c1 \u6240\u4ee5\u5b9e\u9645\u4e0a\u7684\u903b\u8f91\u5c31\u662f\uff1a \u5229\u7528\u7b26\u53f7\u4f4d\u628a x
\u4e2a\u5b57\u8282\u7684\u50a8\u5b58\u5b57\u8282\u5206\u6210\u4e24\u90e8\u5206\uff0c\u5176\u4e2d\\(0 \\;\\;\\sim\\;\\; (2^{8x-1}-1)\\)\u8868\u793a\u975e\u8d1f\u6570\u7684\u5b58\u50a8\u8303\u56f4\uff0c \\(2^{8x-1} \\;\\;\\sim\\;\\; (2^{8x}-1)\\)\u8868\u793a\u8d1f\u6570\u7684\u5b58\u50a8\u8303\u56f4\uff0c\u5e76\u901a\u8fc7\u4e0a\u9762\u63d0\u5230\u7684\u8f6c\u6362\u65b9\u5f0f\u5bf9\u8d1f\u6570\u8fdb\u884c\u987a\u5e8f\u6620\u5c04 \u8fdb\u884c\u8fd0\u7b97\u65f6\uff0c\u7b97\u4e0a\u7b26\u53f7\u4f4d\u53c2\u4e0e\u8fd0\u7b97\uff0c\u7b97\u51fa\u6765\u7684\u4e1c\u897f\u6574\u4e2a\u518d\u4f5c\u4e3a\u7b54\u6848\u7684\u8865\u7801 \u4e00\u8a00\u4ee5\u853d\u4e4b\uff0c\u5728\u5bf916\u53d6\u4f59\u2014\u2014\u4ea6\u5373\u8d85\u8fc74Bits\u90fd\u5c06\u6ea2\u51fa \u7684\u60c5\u51b5\u4e0b\uff0c\u201c+13\u201d\u4e0e\u201c-3\u201d\u662f\u7b49\u4ef7\u7684\uff0c\u8fd9\u5c31\u662f\u4ece\u53d6\u6a21\u89d2\u5ea6\u6765\u7406\u89e3\u201c\u8865\u7801\u201d\u3002 \u800c\u65e0\u7b26\u53f7\u6574\u6570\u5c31\u662f\u5c06\u539f\u6765\u5b58\u50a8\u8d1f\u6570\u7684\u8fd9\u90e8\u5206\u4f5c\u4e3a\u6574\u6570\u7684\u5ef6\u7eed\u90e8\u5206
\u5bf9\u4e8e\u5404\u7c7b\u578b\u6574\u578b\u6570\u636e\u7684\u957f\u5ea6\u4ec5\u6709\u5df2\u4e0b\u8981\u6c42\uff1a
\\(sizeof(\\text{short}) \\leq sizeof(\\text{int}) \\leq sizeof(\\text{long})\\) \u6574\u578b\u5e38\u91cf\u7684\u89c4\u5219\uff1a
\u524d\u7f00\uff1a -\u5341\u8fdb\u5236\u9996\u4f4d\u6570\u5b57\u5fc5\u987b\u975e0 \u300ceg\u300d\uff1a114514
-\u516b\u8fdb\u5236\u9996\u4f4d\u6570\u5b57\u5fc5\u987b\u662f0 \u300ceg\u300d\uff1a01616210
-\u5341\u516d\u8fdb\u5236\u5f00\u5934\u5fc5\u987b\u662f0x\u62160X \u300ceg\u300d\uff1a0xfff
\u540e\u7f00\uff1a\uff08\u5927\u5c0f\u5199\u4e0d\u654f\u611f\uff09 L \u8868\u793a\u957f\u6574\u578b \u300ceg\u300d\uff1a123456L
LL \u8868\u793a\u957f\u957f\u6574\u578b \u300ceg\u300d\uff1a123456LL
U \u8868\u793a\u65e0\u7b26\u53f7\u6574\u578b \u300ceg\u300d\uff1a123456U
U\u548cL\u53ef\u4ee5\u6df7\u5408\u4f7f\u7528\uff0c\u4e0d\u654f\u611f\u987a\u5e8f "},{"location":"cour_note/D1QD_CXiaoCheng/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":" \u7b97\u6570\u8fd0\u7b97\u7b26\u7684\u51e0\u4e2a\u89c4\u5219\uff1a \u6574\u6570\u9664\u6cd5\u5f97\u5230\u6574\u6570(\u5206\u5b50\u6216\u5206\u6bcd\u4efb\u610f\u4e00\u4e2a\u4e3a\u6d6e\u70b9\u6570\u5373\u53ef\u81ea\u52a8\u7c7b\u578b\u8f6c\u6362\u540e\u505a\u6d6e\u70b9\u8fd0\u7b97) -\u53d6\u4f59\u8fd0\u7b97\u4ec5\u5bf9\u6574\u578b\u6570\u636e\u4f7f\u7528 +
-
\u53ef\u505a\u5355\u76ee\u8fd0\u7b97\u7b26\u8868\u793a\u6b63\u8d1f \u53cc\u76ee\u8fd0\u7b97\u7b26\u4f1a\u4fdd\u8bc1\u4e24\u4fa7\u7684\u6570\u636e\u7c7b\u578b\u76f8\u540c(\u5bf9\u4e8e\u4e0d\u540c\u7684\u8f93\u5165\u6570\u636e\u4f1a\u8fdb\u884c\u81ea\u52a8\u7c7b\u578b\u8f6c\u6362) \u81ea\u52a8\u7c7b\u578b\u8f6c\u6362\uff1a \u975e\u8d4b\u503c\u8fd0\u7b97\uff1a\u603b\u662f\u7531\u4f4e\u5411\u9ad8\u8f6c\u6362 \u8d4b\u503c\u8fd0\u7b97\uff1a\u8f6c\u6362\u4e3a\u88ab\u8d4b\u503c\u7684\u53d8\u91cf\u7c7b\u578b "},{"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":" C\u8bed\u8a00\u89c4\u5b9a\uff0c\u6570\u7ec4\u540d\u8868\u793a\u8be5\u6570\u7ec4\u6240\u5206\u914d\u8fde\u7eed\u5185\u5b58\u7a7a\u95f4\u4e2d\u7b2c\u4e00\u4e2a\u5355\u5143\u7684\u5730\u5740\uff0c\u5373\u9996\u5730\u5740 \u4e8c\u7ef4\u6570\u7ec4\u7684\u5185\u5b58\u5b58\u653e\u4ecd\u7136\u91c7\u53d6\u987a\u5e8f\u5b58\u653e\uff0c\u5373\u6570\u7ec4 a[3][2]
\u4e2d a[1][1]
\u7684\u5730\u5740\u4e0e a[2][0]
\u76f8\u90bb \u4e8c\u7ef4\u6570\u7ec4\u7533\u8bf7\u65f6\u5982\u679c\u521d\u59cb\u5316\u53ef\u4ee5\u7701\u7565\u884c\u957f\u5ea6\uff0c\u5982 a[][3] = {1,2,3,4,5,6,7}
\u5bf9\u4e8e\u4e8c\u7ef4\u6570\u7ec4 a[x][y]
\uff1a\uff08x,y\u662f\u4e24\u4e2a\u5e38\u6570\uff09 &a
\u8868\u793a\u6570\u7ec4\u5730\u5740\uff0c&a+1
\u8868\u793a\u7684\u6570\u7ec4\u672b\u5c3e\u540e\u7684\u5730\u5740 \u5373\uff1a&a+1
= (&a
) + \\(1\\times x\\times y\\times sizeof(\\text{element})\\) a
\u6216\u8005&a[0]
\u8868\u793a\u6570\u7ec4\u9996\u884c\u5730\u5740\uff0ca+1
\u8868\u793a\u6570\u7ec4\u4e0b\u4e00\u884c\u5730\u5740 \u5373\uff1aa+1
= (a
) + \\(1\\times y\\times sizeof(\\text{element})\\) a
\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a x
\u7ef4\u6570\u7ec4\u7684\u6307\u9488\uff0c\u8be5\u6570\u7ec4\u7684\u5143\u7d20\u4e3a\u82e5\u5e72y
\u7ef4\u6570\u7ec4 &a[0][0]
\u6216\u8005a[0]
\u8868\u793a\u6570\u7ec4\u9996\u5143\u7d20\u5730\u5740\uff0c\u4e5f\u53eb\u5217\u5730\u5740\uff0c&a[0][0]+1
\u8868\u793a\u6570\u7ec4\u4e0b\u4e00\u5143\u7d20\u5730\u5740 \u5373\uff1a&a[0][0]+1
= (&a[0][0]
) + \\(sizeof(\\text{element})\\) \u4f46\u4e0a\u9762\u51e0\u4e2a\u6307\u9488\u7684\u503c\u90fd\u4e00\u6837 a[i][j]
\u7b49\u6548\u4e8e *( *(a+i) + j )
int *p[5]
\u5b9a\u4e49\u4e86\u4e00\u4e2asize\u4e3a5\u7684\u6574\u578b\u6307\u9488\u7684\u6570\u7ec4(\u8fd9\u91cc\u6709\u4e94\u4e2a\u6307\u9488) int (*p)[5]
\u5b9a\u4e49\u4e86\u4e00\u4e2asize\u4e3a5\u7684\u6570\u7ec4\u7684\u6307\u9488(\u8fd9\u91cc\u53ea\u6709\u4e00\u4e2a\u6307\u9488)
\u7ed9\u6307\u9488\u8d4b\u503c\u7684\u529e\u6cd5\uff1a
p = &x;
p = 0;
p = NULL;
p = (int *)1732;
\u6307\u9488\u8fd0\u7b97\uff1a
*p+1;
++*p;
\u7684\u64cd\u4f5c\u5bf9\u8c61\u90fd\u662fp
\u6307\u5411\u7684\u5143\u7d20\u503c *p++;
\u7684\u64cd\u4f5c\u5bf9\u8c61\u5219\u662f\u6307\u9488\u672c\u8eab\uff0c\u542b\u4e49\u662f\u6307\u5411\u4e0b\u4e00\u4e2a\u5730\u5740 -\u5f53\u51fa\u73b0\u4e0a\u8ff0\u8bed\u53e5\u53c2\u4e0e\u590d\u6742\u8868\u8fbe\u5f0f\u65f6\uff0c*p++
\u4f1a\u5728\u8f93\u51fa*p
\u540e\u518d\u6307\u5411\u4e0b\u4e00\u4e2a\u5730\u5740 \u53ef\u4ee5\u901a\u8fc7\u5c06\u4e00\u4e2a\u5b57\u7b26\u4e32\u5e38\u91cf\u8d4b\u503c\u7ed9\u4e00\u4e2a\u6307\u9488\u7684\u65b9\u5f0f\u6765\u7ed9\u8be5\u5b57\u7b26\u4e32\u5206\u914d\u5730\u5740
\u5373\u4f8b\u5982char *p; p = \"awa\";
\u662f\u5408\u7406\u7684 *strcpy(char *to,char *from)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u628a\u5b57\u7b26\u6570\u7ec4 from[]
\u590d\u5236\u5230 to[]
\u4e2d\u5e76\u8fd4\u56de to[]
*strcat(char *to,char *from)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u628a\u5b57\u7b26\u6570\u7ec4 from[]
\u6dfb\u52a0\u5230 to[]
\u672b\u5c3e\u5e76\u8fd4\u56de to[]
\u8865\u5145\uff1a\u6240\u8c13\u7684\u6dfb\u52a0\uff0c\u5c31\u662f\u7528 from[]
\u53bb\u66ff\u6362 to[]
\u7b2c\u4e00\u4e2a \\0
\u4e4b\u540e\u7684\u5143\u7d20 strcmp(char *a,char *b)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u6bd4\u8f83\u5b57\u7b26\u6570\u7ec4 a[]
\u548c b[]
\u5728 \\0
\u524d\u7684\u5185\u5bb9\u662f\u5426\u7b49\u4ef7 \u5982\u679c\u7b49\u4ef7 \u8fd4\u56de0 \u5982\u679ca<b \u8fd4\u56de-1 \u5982\u679ca>b \u8fd4\u56de1 strlen(char *s)
\u51fd\u6570\u7684\u4f5c\u7528\u662f\uff0c\u8fd4\u56de\u5b57\u7b26\u6570\u7ec4 s[]
\u5728 \\0
\u524d\u7684\u5143\u7d20\u4e2a\u6570
\u5173\u4e8e\u6307\u9488\u548c\u7ed3\u6784\u4f53\u7684\u5173\u7cfb\uff0c\u53ea\u9700\u8981\u8bb0\u4f4f \u53d6\u503c\u7b26 *
\u7684\u4f18\u5148\u7ea7\u4f4e\u4e8e\u6210\u5458\u8bbf\u95ee\u7b26 .
\u7684\u4f18\u5148\u7ea7
void *malloc(size_t size)
\u7533\u8bf7 size
\u5927\u5c0f\u7684\u5185\u5b58\uff0c\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d\uff0c\u8fd4\u56de\u4e00\u4e2a\u6307\u5411\u8fd9\u4e2a\u5185\u5b58\u7684\u6307\u9488
void free(void *ptr)
\u91ca\u653e\u6307\u9488 ptr
\u6240\u6307\u7684\u5185\u5b58
\u5bf9\u4e8e\u8fd4\u56de\u6307\u9488\u7684\u51fd\u6570\uff0c\u4e0d\u80fd\u8fd4\u56de\u5728\u51fd\u6570\u5185\u5b9a\u4e49\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u6307\u9488
\u51fd\u6570\u6307\u9488\u7684\u5b9a\u4e49\uff1a\u7c7b\u578b\u540d(*\u53d8\u91cf\u540d)(\u53c2\u6570\u7c7b\u578b\u8868)
\u300ceg\u300dint(*fun)(int,int)
\u4e22\u4e00\u4e2axxjj\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u00a0\u00a0\u70b9\u51fb\u8df3\u8f6c
FILE *fp;
\u7533\u8bf7\u4e86\u4e00\u4e2a\u6587\u4ef6\u6307\u9488 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u547d\u4ee4\u884c\u53c2\u6570","title":"\u547d\u4ee4\u884c\u53c2\u6570","text":" main()
\u53ef\u4ee5\u6709\u4e24\u4e2a\u53c2\u6570\uff1a main(int argc,char *argv[])
argc
\u8868\u793a\u547d\u4ee4\u884c\u53c2\u6570\u6570\u91cf argv[]
\u6307\u5411\u5404\u4e2a\u547d\u4ee4\u884c\u53c2\u6570 argv[0]
\u6307\u5411\u547d\u4ee4 argv[1,]
\u6307\u5411\u53c2\u6570 \u300ceg\u300d\u547d\u4ee4\u884c\u8f93\u5165 ./code.exe hello world
\u5728\u7a0b\u5e8f\u4e2d\uff1a argc = 3
*argv[] = {\"./code.exe\\0\",\"hello\\0\",\"world\\0\"}
"},{"location":"cour_note/D1QD_CXiaoCheng/#\u6587\u4ef6\u64cd\u4f5c","title":"\u6587\u4ef6\u64cd\u4f5c","text":" FILE *fp;
\u7533\u8bf7\u4e00\u4e2a\u6587\u4ef6\u6307\u9488 fp = fopen(\"\u6587\u4ef6\u540d\",\"\u4f7f\u7528\u65b9\u5f0f\");
\u94fe\u63a5\u6307\u9488 fp
\u5230\u6587\u4ef6\u5e76\u6307\u5b9a\u6a21\u5f0f \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 \u8f93\u5165\u6587\u4ef6\u540d\u65f6\u53ef\u4ee5\u5199\u8def\u5f84\uff0c\u8def\u5f84\u4e2d\u8981\u4f7f\u7528 \\\\
\u6765\u533a\u5206\u5c42\u7ea7 fprintf(fp,\"\u683c\u5f0f\u5b57\u7b26\u4e32\",\u53d8\u91cf\u8868);
\u5199\u5165\u6570\u636e\u5230 fp
\u6307\u5411\u7684\u6587\u4ef6\uff0c\u540e\u4e24\u4e2a\u53c2\u6570\u7684\u683c\u5f0f\u548c printf()
\u4e00\u6837 fclose()
\u5173\u95ed\u6587\u4ef6\u5e76\u5237\u65b0\u7f13\u5b58\u533a \u987a\u5229\u6267\u884c\u4e86\u6587\u4ef6\u5173\u95ed\u64cd\u4f5c\u65f6\uff0cfclose()
\u51fd\u6570\u7684\u8fd4\u56de\u503c\u662f 0
\uff0c\u5426\u5219\u8fd4\u56de EOF
rewind(fp)
\u8ba9 fp
\u8fd4\u56de fp
\u6240\u6307\u7684\u6587\u4ef6\u7684\u5f00\u5934\u5730\u5740 rtell(fp)
\u8ba9 fp
\u8fd4\u56de fp
\u7684\u5f53\u524d\u4f4d\u7f6e(long int
\u7c7b\u578b\uff0c\u4ece 0
~ len
)\uff0c\u6210\u529f\u8fd4\u56de\u5f53\u524d\u503c(\u4e00\u5f00\u59cb\u662f0\uff0c\u6bcf\u5411\u540e\u79fb\u52a8\u4e00\u6b21+1)\uff0c\u5426\u5219\u8fd4\u56de-1L
fseek(FILE *fp,\"\u504f\u79fb\u91cf\",\"\u8d77\u59cb\u4f4d\u7f6e\")
\u5c06 fp
\u4ece \"\u8d77\u59cb\u4f4d\u7f6e\"
\u5f00\u59cb\u5411\u540e\u79fb\u52a8 \"\u504f\u79fb\u91cf\"
\u53ef\u9009\u7684 \"\u8d77\u59cb\u4f4d\u7f6e\"
\uff1a SEEK_SET
\u6587\u4ef6\u5f00\u5934 SEEK_CUR
\u5f53\u524d\u4f4d\u7f6e SEEK_END
\u6587\u4ef6\u672b\u5c3e \u300ceg\u300d\u79fb\u52a8\u6307\u9488 fp
\u5230\u6587\u4ef6\u672b\u5c3e\uff1afseek(fp,0L,SEEK_END);
feof(fp)
\u5982\u679c fp
\u5230\u8fbe\u4e86 EOF
\uff0c\u8fd4\u56de\u975e\u96f6\u503c\uff0c\u5426\u5219\u8fd4\u56de 0
fflush(fp)
\u5237\u65b0 fp
\u7684\u7f13\u51b2\u533a\uff0c\u6210\u529f\u8fd4\u56de 0
\uff0c\u5426\u5219\u8fd4\u56de EOF
fgets((char*)str,limt,fp)
\u4ece fp
\u8bfb\u5165\u4e00\u884c\u7684 limit-1
\u4e2a\u5b57\u7b26\u5e76\u5b58\u5165 str
\u4e2d\uff0c\u5e76\u5728\u672b\u5c3e\u52a0 \\0
\uff0c\u7136\u540e\u8fd4\u56de\u8bfb\u5165\u7684\u5185\u5bb9(\u5982\u679c\u6ca1\u8bfb\u5b8c limit-1
\u4e2a\u5b57\u7b26\u5c31\u9047\u5230\u4e86\u884c\u672b\u5c31\u5230\u6b64\u4e3a\u6b62) fputc(ch,fp)
\u5728 fp
\u4e2d\u5199\u5165\u5355\u4e2a\u5b57\u7b26 ch
\uff0c\u6210\u529f\u8fd4\u56de ch
\uff0c\u5426\u5219\u8fd4\u56de EOF
fgetc(fp)
\u83b7\u53d6\u4e0b\u4e00\u4e2a\u5b57\u7b26(\u5982\u679c\u5230\u8fbe EOF
\u5c31\u8bfb\u5165\u4e86 -1
\uff0c\u53c2\u8003\u8fd9\u91cc)
C\u7a0b\u5e8f\u5bf9\u6587\u4ef6\u5f85\u5904\u7406\u91c7\u7528\u5185\u5b58\u7f13\u51b2\u6587\u4ef6\u7cfb\u7edf\u7684\u65b9\u5f0f\u8fdb\u884c
\u4f7f\u7528\u7f13\u51b2\u6587\u4ef6\u7cfb\u7edf\u53ef\u4ee5\u5927\u5927\u63d0\u9ad8\u6587\u4ef6\u64cd\u4f5c\u901f\u5ea6 \u6587\u4ef6\u4fdd\u5b58\u5728\u78c1\u76d8\u4e0a\uff0c\u78c1\u76d8\u6570\u636e\u7684\u7ec4\u7ec7\u65b9\u5f0f\u6309\u6247\u533a\u8fdb\u884c\uff0c\u89c4\u5b9a\u6bcf\u4e2a\u6247\u533a\u5927\u5c0f\u4e3a512B \u4e00\u822c\u5fae\u578b\u8ba1\u7b97\u673a\u4e2d\u7684C\u8bed\u8a00\u7cfb\u7edf\u4e5f\u5c06\u7f13\u51b2\u533a\u5927\u5c0f\u5b9a\u4e3a512B \u8fdb\u884c\u6570\u636e\u5199\u5165\u5de5\u4f5c\u65f6: \u628a\u6570\u636e\u5199\u5165\u6587\u4ef6\u7f13\u51b2\u533a \u5199\u6ee1512B\u4ee5\u540e\uff0cOS\u81ea\u52a8\u628a\u6570\u636e\u5199\u5165\u78c1\u76d8\u7684\u4e00\u4e2a\u6247\u533a\uff0c\u7136\u540e\u6e05\u7a7a\u6587\u4ef6\u7f13\u51b2\u533a \u91cd\u590d\u4e0a\u8ff0\u884c\u4e3a \u6587\u4ef6\u6253\u5f00\u7684\u5b9e\u8d28\u662f\u628a\u78c1\u76d8\u6587\u4ef6\u548c\u6587\u4ef6\u7f13\u51b2\u533a\u5bf9\u5e94\u8d77\u6765\uff0c\u5177\u4f53\u6d41\u7a0b\u5982\u4e0b; \u5728\u78c1\u76d8\u4e2d\u627e\u5230\u6307\u5b9a\u6587\u4ef6 \u5728\u5185\u5b58\u4e2d\u5206\u914d\u4fdd\u5b58\u4e00\u4e2aFILE\u7c7b\u578b\u7ed3\u6784\u7684\u5355\u5143\uff0816B\uff09 \u5728\u5185\u5b58\u4e2d\u5206\u914d\u6587\u4ef6\u7f13\u51b2\u533a\u5355\u5143\uff08512B\uff09 \u8fd4\u56deFILE\u7684\u7ed3\u6784\u5730\u5740
FILE
\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u7ed3\u6784\u4f53\u7c7b\u578b\uff0c\u5b9a\u4e49\u5982\u4e0b\uff1a
typedef struct{\nshort level; /*\u7f13\u51b2\u533a\u4f7f\u7528\u91cf*/\nunsigned flags; /*\u6587\u4ef6\u72b6\u6001\u6807\u5fd7*/\nchar fd; /*\u6587\u4ef6\u63cf\u8ff0\u7b26*/\nshort bsize; /*\u7f13\u51b2\u533a\u5927\u5c0f*/\nunsigned char *buffer; /*\u6587\u4ef6\u7f13\u51b2\u533a\u9996\u5730\u5740*/\nunsigned char *curp; /*\u6307\u5411\u6587\u4ef6\u7f13\u51b2\u533a\u7684\u5de5\u4f5c\u6307\u9488*/\nunsigned char hold; /*\u5176\u4ed6\u4fe1\u606f*/\nunsigned istemp;\nshort token;\n} FILE;\n
"},{"location":"cour_note/D1QD_CXiaoCheng/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"\u8d34\u4e00\u4e9b\u5176\u4ed6\u5b66\u957f\u7684\u6587\u7ae0\uff1a
https://blog.zhanghai.me/c-exam-notes/ https://blog.yzsun.me/c-traps-and-pitfalls/ "},{"location":"cour_note/D1SJ_Intro2CS/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7cfb\u7edf\u6982\u8bba | Introduction to Computing Systems","text":" \u7ea6 12 \u4e2a\u5b57
https://www.yuque.com/isshikixiu/codes/ics "},{"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 \u56e0\u4e3a\u6211\u53ea\u80fd\u627e\u5230 17 \u5e74\u7684\u89c6\u9891\uff0c\u6240\u4ee5\u662f\u8ddf\u7740 17 \u5e74\u7684\u7248\u672c\u5b66\u3002 Course Website: \ud83d\udd17
Course Video: \ud83d\udd17
Course Description
Computer Vision has become ubiquitous in our society, with applications in search, image understanding, apps, mapping, medicine, drones, and self-driving cars. Core to many of these applications are visual recognition tasks such as image classification, localization and detection. Recent developments in neural network (aka \u201cdeep learning\u201d) approaches have greatly advanced the performance of these state-of-the-art visual recognition systems. This course is a deep dive into the details of deep learning architectures with a focus on learning end-to-end models for these tasks, particularly image classification. During the 10-week course, students will learn to implement and train their own neural networks and gain a detailed understanding of cutting-edge research in computer vision. Additionally, the final assignment will give them the opportunity to train and apply multi-million parameter networks on real-world vision problems of their choice. Through multiple hands-on assignments and the final course project, students will acquire the toolset for setting up deep learning tasks and practical engineering tricks for training and fine-tuning deep neural networks. Assignments
Assignment 1: \ud83d\udd17 Assignment 2: \ud83d\udd17 Assignment 3: \ud83d\udd17 \u53c2\u8003\u8d44\u6599 \u5b66\u957f\u7b14\u8bb0\uff1a\ud83d\udd17 "},{"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":" Video: \ud83d\udd17 Slides: \ud83d\udd17 \u4e00\u4e9b\u65e9\u671f\u7684\u5173\u4e8e CV \u7684\u601d\u8003 \u65e9\u671f\u5bf9\u5982\u4f55\u8868\u793a\u7269\u4f53\uff0c\u8d85\u8d8a\u300cBlock World\u300d\u7684\u8868\u793a\u65b9\u6cd5 \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
\u542f\u53d1\uff1a\u89c6\u89c9\u8bc6\u522b\u7684\u91cd\u70b9\u53ef\u4ee5\u4ece\u8bc6\u522b\u5bf9\u8c61\u7684\u4e00\u4e9b\u5177\u6709\u8bc6\u522b\u529b\u548c\u4e0d\u6613\u53d8\u5316\u7684\u90e8\u5206\u5f00\u59cb
\u6709\u7aef\u8054\u60f3 FDS \u7684 Voting Tree
\u603b\u7684\u800c\u8a00 \u5bf9\u8c61\u8bc6\u522b \u662f CV \u9886\u57df\u7684\u4e00\u4e2a\u91cd\u8981\u8bdd\u9898 \u8be5\u8bfe\u7a0b\u91cd\u70b9\u4e3a \u5377\u79ef\u795e\u7ecf\u7f51\u7edc(Convolutional Neural Network / CNN) \u5177\u4f53\u7740\u773c\u70b9\u4e3a \u56fe\u50cf\u5206\u7c7b\u95ee\u9898(image classification) \u4e5f\u5c06\u6d89\u53ca \u5bf9\u8c61\u68c0\u6d4b(object detection)\u3001\u56fe\u50cf\u5b57\u5e55(image captioning) \u7b49\u95ee\u9898 "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-2-image-classification-pipeline","title":"Lecture 2: Image Classification Pipeline","text":" Video: \ud83d\udd17 Slides: \ud83d\udd17 CIFAR-10 & CIFAR-100: \ud83d\udd17 \u524d\u7f6e\uff1aPython Numpy Tutorial: \ud83d\udd17 \u8bed\u4e49\u9e3f\u6c9f(semantic gap) "},{"location":"cour_note/D1SJ_StanfordCS231n/#data-driven-approach","title":"Data-Driven Approach","text":" Collect a dataset of images and labels; Use Machine Learning to train a classifier; Evaluate the classifier on new images; \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 \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) \\(d_1(I_1,I_2)=\\sum_{p}|I_1^{p}-I_2^{p}|\\)
\u5982\u679c\u56fe\u50cf\u65cb\u8f6c\uff0c\u9884\u6d4b\u7ed3\u679c\u4f1a\u53d1\u751f\u6539\u53d8\u3002 \\(d_2(I_1,I_2)=\\sum_{p}\\sqrt{(I_1^p-I_2^p)^2}\\)
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
\u5f53\u7136\uff0c\u8fd9\u79cd\u901a\u8fc7\u6bd4\u8f83\u201c\u8ddd\u79bb\u201d\u7684\u5206\u7c7b\u65b9\u6848\u5e76\u4e0d\u4ec5\u9650\u4e8e\u56fe\u7247\u7b49\uff0c\u5bf9\u4e8e\u4efb\u4f55\u9700\u8981\u5206\u7c7b\u7684\u6570\u636e\uff0c\u4f8b\u5982\u6587\u672c\uff0c\u53ea\u8981\u80fd\u5b9a\u4e49\u80fd\u591f\u91cf\u5316\u7684\u201c\u8ddd\u79bb\u201d\u4ee5\u53ca\u4e00\u7cfb\u5217\u76f8\u5e94\u7684\u89c4\u5219\uff0c\u5c31\u80fd\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\u6765\u8fdb\u884c\u5206\u7c7b\u3002 \u7136\u800c\uff0cK-\u4e34\u8fd1\u7b97\u6cd5 \u5728\u56fe\u50cf\u5206\u7c7b\u4e0a\u51e0\u4e4e\u4e0d\u600e\u4e48\u4f7f\u7528\uff0c\u4e3b\u8981\u662f\u56e0\u4e3a\u5b83\u5b9e\u9645\u4f7f\u7528\u8d77\u6765\uff0c\u9884\u6d4b\u6548\u7387\u8f83\u4f4e\uff1b\u4e14\u201c\u8ddd\u79bb\u5ea6\u91cf\u201d\u5e76\u4e0d\u975e\u5e38\u9002\u5408\u56fe\u50cf\u5904\u7406\uff08\u5b83\u65e0\u6cd5\u5b8c\u6574\u63cf\u8ff0\u56fe\u50cf\u4e0a\u7684\u8ddd\u79bb\u4fe1\u606f\u6216\u56fe\u50cf\u4e4b\u95f4\u7684\u5dee\u5f02\uff09\uff1b\u6b64\u5916\u5b83\u8fd8\u6709\u4e00\u4e2a\u6bd4\u8f83\u4e25\u91cd\u7684\u95ee\u9898\uff1a\u7ef4\u6570\u707e\u96be(curse of dimensionality) \ud83d\udd17 \uff08\u56e0\u4e3a\u53ea\u6709\u8bad\u7ec3\u6837\u672c\u8db3\u591f\u5bc6\u96c6\uff0cK-\u4e34\u8fd1\u7b97\u6cd5\u624d\u80fd\u6b63\u5e38\u8fd0\u884c\uff09\u3002 "},{"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
\u5373\uff0c\u6211\u4eec\u6784\u9020\u4e00\u4e2a\u51fd\u6570\uff0c\u8f93\u5165\u5305\u542b\u56fe\u50cf\u6570\u636e \\(x\\) \u548c\u6743\u91cd\u53c2\u6570 \\(W\\)\uff0c\u6ee1\u8db3\u5176\u8ba1\u7b97\u7ed3\u679c\u4e3a\u5404\u4e2a\u7c7b\u522b\u7684\u9884\u6d4b\u5f97\u5206 \u6700\u7ec8\u5f97\u5230\u4e00\u4e2a\u6a21\u7248\uff0c\u5b83\u5c06\u5c1d\u8bd5\u6027\u5730\u9002\u5e94\u8be5\u7c7b\u91cc\u5c3d\u53ef\u80fd\u591a\u7684\u6837\u672c
\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
\u4ece\u8fd9\u79cd\u89d2\u5ea6\u6765\u7406\u89e3\u5c31\u5f88\u5bb9\u6613\u53d1\u73b0\uff0c\u5355\u4e00\u7684\u7ebf\u6027\u5206\u7c7b\u5177\u6709\u5c40\u9650\u6027\uff0c\u4f8b\u5982\u5bf9\u4e8e\u591a\u6a21\u6001\u7684\u6570\u636e\uff0c\u4f7f\u7528\u5355\u4e00\u7684\u7ebf\u6027\u5206\u7c7b\u53ef\u80fd\u4f1a\u6bd4\u8f83\u5403\u529b\u3002 "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-3-loss-functions-and-optimization","title":"Lecture 3: Loss Functions and Optimization","text":" Video: \ud83d\udd17 Slides: \ud83d\udd17 Linear classifier is an example of parametric classifier. \u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u7406\u89e3 Linear Classifation \u4e2d\u7684 \\(W\\)\uff1a\u77e9\u9635\u4e2d\u7684\u6bcf\u4e00\u4e2a\u53c2\u6570\u8868\u793a\u4e86\u6bcf\u4e00\u4e2a\u50cf\u7d20\u70b9(\u5355\u4e2a\u989c\u8272\u901a\u9053)\u5bf9\u4e8e\u8bc6\u522b\u67d0\u4e2a\u7c7b\u7684\u8d21\u732e\u6743\u91cd\u3002
A loss function that quantifies our unhappiness with the scores across the training data, tells how good our current classifier is.
Given a dataset of examples \\(\\{(x_1,y_i)\\}_{i=1}^N\\), where \\(x_i\\) is image and \\(y_i\\) is label. And loss over the dataset is a sum of loss over examples: \\(L = \\frac{1}{N}\\sum L_i(f(xi,W),y_i)\\). Loss function \u662f\u7528\u6765\u5ea6\u91cf \\(W\\) \u7684\u5408\u9002\u7a0b\u5ea6\u7684\uff0c\u6211\u4eec\u901a\u8fc7\u5bfb\u627e\u5728 \\(W\\) \u7a7a\u95f4\u4e2d\u635f\u5931\u51fd\u6570\u53d6\u6700\u503c\u65f6\u7684 \\(W\\) \u6765\u627e\u5230\u6211\u4eec\u8ba4\u4e3a\u6700\u5408\u9002\u7684 \\(W\\)\u3002 "},{"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) \\] \u4e5f\u5c31\u662f\u8bf4\uff0c\u5bf9\u4e8e\u67d0\u4e00\u4e2a\u6837\u672c\uff0c\u5b83\u5b9e\u9645\u7c7b\u522b\u5bf9\u5e94\u7684\u5f97\u5206\u5982\u679c\u8fdc\u5927\u4e8e\uff08\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u8fb9\u754c \uff0c\u5c31\u662f\u4e0a\u56fe\u4e2d\u7684\\(+1\\)\uff09\u67d0\u4e2a\u5176\u4ed6\u7c7b\u522b\u7684\u5f97\u5206\uff0c\u90a3\u4e48\u8be5\u201c\u5176\u4ed6\u7c7b\u522b\u201d\u5bf9\u635f\u5931\u51fd\u6570\u7684\u8d21\u732e\u5373\u4e3a\\(0\\)\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u5e76\u6ca1\u6709\u8fdc\u5927\u4e8e\u5176\u4ed6\u67d0\u4e2a\u7c7b\u522b\u7684\u5f97\u5206\uff0c\u5219\u9700\u8981\u5c06\u8fd9\u4e2a\u504f\u5dee\u4f5c\u4e3a\u5bf9\u635f\u5931\u51fd\u6570\u7684\u8d21\u732e\u3002
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) \\]
However, for that we only calculate a loss in terms of the data, some strange things like overfitting will happen.
\u84dd\u70b9\u4e3a\u6a21\u578b\u8bad\u7ec3\u6570\u636e\uff0c\u7eff\u8272\u7684\u4e3a\u9a8c\u8bc1\u6216\u8005\u5b9e\u9645\u6570\u636e\u7b49\u3002 \u84dd\u8272\u7684\u4e3a\u8fc7\u62df\u5408\u540e\u6a21\u578b\u8bad\u7ec3\u51fa\u6765\u7684\u9884\u6d4b\u8d8b\u52bf\uff0c\u4ed6\u4eec\u5b8c\u5168\u7b26\u5408\u8bad\u7ec3\u6a21\u578b\u7684\u6570\u636e\uff0c\u4f46\u662f\u53ef\u4ee5\u53d1\u73b0\uff0c\u7eff\u8272\u7684\u7ebf\u6761\u624d\u662f\u5b9e\u9645\u7684\u6211\u4eec\u5e0c\u671b\u5f97\u5230\u7684\u8d8b\u52bf\u3002 \u8fd9\u79cd\u9884\u6d4b\u7ed3\u679c\u8fc7\u5ea6\u62df\u5408\u4e86\u8bad\u7ec3\u6570\u636e\u7684\u884c\u4e3a\u53ca\u4e3a\u8fc7\u62df\u5408\u3002 To solve it, we use regularization.
The regularization term.
Occam's Razor
The regularization term encourages the model to somehow pick a simpler \\(W\\) depending on the dask and the model. 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:
L2 regularization: \\(R(W) = \\sum_{k}\\sum_lW_{k,l}^2\\); L1 regularization: \\(R(W) = \\sum_k\\sum_l |W_{k,l}|\\); Elastic net (L1+L2): \\(R(W) = \\sum_k\\sum_l (\\beta W_{k,l}^2+|W_{k,l}|)\\); Max norm regularization Dropout Fancier: Batch normalization, stochastic depth... 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":" It normalizes the scores to a probability distribution. Then we just want the probablity of the true class is high and as close to one. scores = unnormalized log probabilities of the classes \\(P(Y=k|X=x_i)=\\frac{e^{s_k}}{\\sum_j e^{s_j}}\\;,\\;\\;where\\;s=f(x_i;W)\\); That is \\(L_i=-\\log P(Y=y_i|X=x_i)=-\\log(\\frac{e^{s_k}}{\\sum_j e^{s_j}})\\); eg for Softmax Classifier.
Compare the two.
\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0cSVM \u5728\u4fdd\u8bc1\u771f\u5b9e\u6807\u7b7e\u5bf9\u5e94\u7684\u5f97\u5206\u9ad8\u4e8e\u5176\u4ed6\u5f97\u5206\u4e00\u5b9a\u91cf\u540e\u5c31\u63a5\u53d7\u4e86\uff0c\u5373\u5b58\u5728\u4e00\u4e2a\u660e\u786e\u7684\u7a81\u53d8\u6807\u51c6\uff1b\u800c\u5bf9\u4e8e Softmax \u6765\u8bf4\uff0c\u5b83\u4f1a\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u4e0d\u65ad\u5c06\u6b63\u786e\u6807\u7b7e\u5bf9\u5e94\u7684\u6982\u7387\u5411\\(1\\)\u903c\u8fd1\uff0c\u4e0d\u65ad\u4f18\u5316\u81ea\u5df1\u3002
"},{"location":"cour_note/D1SJ_StanfordCS231n/#optimization","title":"Optimization","text":" Strategy #1: A first _very bad _idea solution: Random search Strategy #2: Gradient Descent / Follow the slope(gradient\\(\\nabla\\)) Always use analytic gradient, but check implementation with numerical gradient. This is called a gradient check.
## 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
Online Demo: \ud83d\udd17 "},{"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":" Video: \ud83d\udd17 Slides: \ud83d\udd17 "},{"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
Always check: The gradient with respect to a variable should have the same shape as the variable. Because each element of your gradient is quantifying how much that element is contributing to your final output. \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
Neural nets will be very large: impractical to write down gradient formula by hand for all parameters. Backpropagation = recursive application of the chain rule along a computational graph to compute the gradients of all inputs/parameters/intermediates. Implementations maintain a graph structure, where the nodes implement the forward()
/ backward()
API. Forward: compute result of an operation and save any intermediates needed for gradient computation in memory. Backward: apply the chain rule to compute the *gradient *of the loss function with respect to the inputs. "},{"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
We arrange neurons into fully-connected layers. The abstraction of a layer has the nice property that it allows us to use efficient vectorized code (e.g. matrix multiplies). Neural networks are not really neural. "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-5-convolutional-neural-networks","title":"Lecture 5: Convolutional Neural Networks","text":" Video: \ud83d\udd17 Slides: \ud83d\udd17 "},{"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
Convolve the filter with the image. (i.e. \"slide over the image spatially, computing dot products\")
\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
The zero padding does add some sort of extraneous features at the corners, and we're doing our best to get some value and do, like process that region of the image. And so zero padding is kind of one way to do this. There's also other ways to do this that, you know, you can try and like, mirror the values here or extend them, and so it doesn't have to be zero padding, but in practice this is one thing that works reasonably.
\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
Each filter has \\(5\\times5\\times3_{\\text{(depth)}} + 1_{\\text{(for bias)}} = 76\\) params. So the total number is \\(76\\times 10 = 760\\). "},{"location":"cour_note/D1SJ_StanfordCS231n/#pooling-layer","title":"Pooling layer","text":" makes the representations smaller and more manageable operates over each activation map independently: 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":" Contains neurons that connect to the entire input volume, as in ordinary Neural Networks. "},{"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
5% = HW 5% = Quiz\uff08\u5212\u5206\u5230\u54ea\u91cc\u8fd8\u4e0d\u77e5\u9053\uff09 10% = Discussions 30% = Research Project & Peer Review 10% = max(\u671f\u4e2d\uff0c\u671f\u672b) 40% = \u671f\u672b \u7b14\u8bb0\u76f8\u5173
\u53c2\u8003\u7b14\u8bb0\uff1a
https://www.yuque.com/xianyuxuan/saltfish_shop/course_res_index#cIhfl 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
\u4e00\u4e2a\u7a7a\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a AVL \u6811\uff1b \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
\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 \\(BF(T_p) \\in \\{0, \\pm 1\\}\\)\uff1b \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
\\(BF(\\text{Trouble Finder}) = h(\\text{New Left Subtree}) - h(\\text{Right Subtree}) = 2\\)\uff1b \\(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
\u5f53\u6211\u4eec\u8bbf\u95ee\u5230\u67d0\u4e2a\u70b9 X \u65f6\uff1a \u5982\u679c P \u662f\u6839\u8282\u70b9\uff0c\u5219\u76f4\u63a5\u8fdb\u884c\u4e00\u6b21 Single Rotation\uff0c\u5c06 X \u8f6c\u5230\u6839\u8282\u70b9\uff1b \u5982\u679c P \u4e0d\u662f\u6839\u8282\u70b9\uff1a \u5f53\u60c5\u51b5\u4e3a LR / RL \u65f6\uff0c\u8fdb\u884c\u4e00\u6b21 LR Rotation \u6216 RL Rotation\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a zig-zag\uff1b \u5f53\u60c5\u51b5\u4e3a LL / RR \u65f6\uff0c\u8fdb\u884c\u4e24\u6b21 Single Rotation\uff0c\u4f7f\u5f97 X\u3001P\u3001G \u7684\u987a\u5e8f\u9006\u8f6c\uff0c\u50cf\u8df7\u8df7\u677f\u4e00\u6837\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a zig-zig\uff1b \u4e0d\u65ad\u5bf9 X \u8fdb\u884c Splay \u64cd\u4f5c\uff0c\u76f4\u5230 X \u6210\u4e3a\u6839\u8282\u70b9\uff1b
\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
\u5f00\u9500\u5927\u7684\u64cd\u4f5c\u5e94\u5f53\u503e\u5411\u8ba9\u52bf\u80fd\u964d\uff0c\u5f00\u9500\u5c0f\u7684\u64cd\u4f5c\u5e94\u5f53\u503e\u5411\u8ba9\u52bf\u80fd\u5347\uff1b \u52bf\u80fd\u9ad8\u503e\u5411\u4e8e\u8ba9\u67d0\u4e9b\u64cd\u4f5c\u5f00\u9500\u5927\uff0c\u52bf\u80fd\u4f4e\u503e\u5411\u4e8e\u8ba9\u67d0\u4e9b\u64cd\u4f5c\u5f00\u9500\u5c0f\uff1b \\(\\Phi(final) > \\Phi(initial)\\)\uff1b \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
Every node is either red or black. The root is black. Every leaf (NIL
) is black. if a node is red, then both its children are black. 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 Every node is either red or black. All NIL
nodes (figure above) are considered black. A red node does not have a red child. Every path from a given node to any of its descendant NIL
nodes goes through the same number of black nodes. @OI Wiki \u6bcf\u4e00\u4e2a\u8282\u70b9\u8981\u4e48\u662f\u7ea2\u8272\uff0c\u8981\u4e48\u662f\u9ed1\u8272\uff1b NIL
\u8282\u70b9\uff08\u7a7a\u53f6\u5b50\u8282\u70b9\uff09\u4e3a\u9ed1\u8272\uff1b \u7ea2\u8272\u8282\u70b9\u7684\u5b50\u8282\u70b9\u5fc5\u987b\u4e3a\u9ed1\u8272\uff1b \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
\u9996\u5148\u6211\u4eec\u6709 \\(N \\geq 2^{bh}-1\\)\uff0c\u4e5f\u5c31\u662f \\(bh \\leq \\log_2 (N+1)\\)\uff1b \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
\u5982\u679c x.p
\u662f\u9ed1\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4e0d\u9700\u8981\u505a\u4efb\u4f55\u8c03\u6574\uff1b \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
TODO: \u8fd9\u91cc\u9700\u8981\u914d\u56fe\u8bb2\u6e05\u695a\u8282\u70b9\u7684\u5177\u4f53\u53d8\u6362\u5230\u5e95\u662f\u600e\u4e48\u6837\u7684\uff0c\u5c24\u5176\u662f\u8282\u70b9\u989c\u8272\u53d8\u5316\u5230\u5e95\u662f\u600e\u4e48\u4e00\u56de\u4e8b\uff0c\u4e4b\u540e\u5927\u6982\u9700\u8981\u91cd\u5199 \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
\u5c06 w \u67d3\u4e3a a \u7684\u989c\u8272\uff0c\u518d\u5c06 a \u548c c \u67d3\u6210\u9ed1\u8272\uff1b \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 \u8c03\u6574\u7ed3\u675f\uff1b Deletion / case 3
\u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002
\u4ea4\u6362 b \u548c w \u7684\u989c\u8272\uff1b \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 \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
\u4ea4\u6362 a \u548c w \u7684\u989c\u8272\uff1b \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 \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
The root is either a leaf or has between \\(2\\) and \\(M\\) children. All nonleaf nodes (except the root) have between \\(\\lceil M/2 \\rceil\\) and M children. 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
\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 \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
\u7ed3\u70b9\u7684 dist \u7b49\u4e8e \\(dist_\\text{right child} + 1\\)\uff08\u5047\u8bbe \\(dist_\\text{NULL} = -1\\)\uff09\uff1b \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":" \u524d\u60c5\u63d0\u8981\uff1aTopic 1 | \u644a\u8fd8\u5206\u6790 \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
\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 \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 \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)\\)\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)\\)\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)\\) \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
\u6811/\u5806\u7684\u7eac\u5ea6\uff0c\u5177\u4f53\u89c2\u5bdf\u6570\u636e\u7684\u8f6c\u79fb\u4e0e\u53d8\u5316\u8fc7\u7a0b\uff1b \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
\u5b9e\u9645\u4e0a\u5c31\u7c7b\u4f3c\u4e8e\u6c42\u89e3\u4e0d\u80fd\u8fde\u7eed\u5411\u53f3\u7684\uff0c\u4ece\u6839\u5230\u53f6\u5b50\u7684\u8def\u5f84\u3002 "},{"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 \u5c06\u5e8f\u5217\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b \u6c42\u89e3\u8de8\u8d8a\u4e2d\u70b9\u7684\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b \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
\u5c06\u70b9\u5bf9\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u8fd1\u70b9\u5bf9\uff1b \u5bfb\u627e\u8de8\u8d8a\u5206\u754c\u7ebf\u7684\u70b9\u5bf9\uff0c\u4ece\u4e2d\u5bfb\u627e\u6700\u8fd1\u70b9\u5bf9\uff1b \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
\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684 \\(m < N\\)\uff0c\u6709\uff1a \\[ T(\\frac{m}{2}) = O(\\frac{m}{2}\\log \\frac{m}{2}) \\leq c \\frac{m}{2}\\log \\frac{m}{2} \\] \u5c06\u4e0a\u5f0f\u4ee3\u5165\uff1a \\[ 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
\u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b \u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b \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 \u3010eg1\u3011\\(a = b = 2,\\; f(N) = N\\)\uff1b \\(f(N) = N = \\Theta(N^{\\log_2{2}})\\)\uff0c\u9002\u7528\u4e8e\u60c5\u51b5 2\uff1b \u56e0\u6b64\u5f97\u5230\u7ed3\u679c \\(T(N) = \\Theta(N \\log N)\\)\uff1b \u3010eg2\u3011\\(a = b = 2,\\; f(N) = N \\log N\\)\uff1b \\(f(N) = N \\log N\\)\uff0c\u867d\u7136 \\(N \\log N = \\Omega(N^{\\log_2{2}})\\)\uff0c\u4f46\u662f \\(N \\log N \\neq \\Omega(N^{(\\log_2{2}) - \\varepsilon})\\)\uff0c\u6240\u4ee5\u4e0d\u9002\u7528\u4e8e\u60c5\u51b5 3\uff1b \u5177\u4f53\u6765\u8bf4\uff0c\\(\\lim \\limits_{N\\to \\infty} \\frac{N \\log N}{N^{1+\\varepsilon}}=\\lim \\limits_{N\\to \\infty} \\frac{\\log N}{N^{\\varepsilon}} = 0 \\text{ for fixed } \\varepsilon > 0\\)\uff1b \u8fd9\u4e2a\u4f8b\u5b50\u4f53\u73b0\u51fa\u4e86 \\(\\varepsilon\\) \u7684\u4e00\u5b9a\u4f5c\u7528\uff1b "},{"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
\u7b2c \\(0\\) \u5c42\uff08\u6839\uff09\u4e00\u5171 \\(1\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(f(N)\\)\uff1b \u7b2c \\(1\\) \u5c42\u4e00\u5171 \\(a\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a\\times f(\\frac{N}{b})\\)\uff1b \u7b2c \\(2\\) \u5c42\u4e00\u5171 \\(a^2\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a^2 \\times f(\\frac{N}{b^2})\\)\uff1b ...... \u7b2c \\(j\\) \u5c42\u4e00\u5171 \\(a^j\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a^j \\times f(\\frac{N}{b^j})\\)\uff1b ...... \u7b2c \\((\\log_b{N}) - 1\\) \u5c42\u4e00\u5171 \\(a^{(\\log_b{N}) - 1}\\) \u9879\uff0ccombine \u7684\u5f00\u9500\u4e3a \\(a^{(\\log_b{N}) - 1} \\times f(\\frac{N}{b^{(\\log_b{N}) - 1}})\\)\uff1b \u7b2c \\(\\log_b{N}\\) \u5c42\uff0c\u5373\u4e3a\u53f6\u5b50\u5c42\uff0c\u4e00\u5171 \\(a^{\\log_b{N}} = N^{\\log_b{a}}\\) \u9879\uff0cconquer \u7684\u5f00\u9500\u4e3a \\(N^{\\log_b{a}} \\times \\Theta(1) = \\Theta(N^{\\log_b{a}})\\)\uff1b \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
\u82e5 \\(af(\\frac{N}{b}) = \\kappa f(N) \\text{ for fixed } \\kappa < 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N))\\)\uff1b \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 \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.
Assume \\(f_1\\geq f_2 \\geq ... \\geq f_n\\). \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
\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b \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
\u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b \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
\u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b \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
TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b 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
\u8fd9\u6761\u8def\u5f84\u7ecf\u8fc7\u4e86\u6240\u6709\u8282\u70b9\u6070\u597d\u4e00\u6b21\uff1b \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
\u8fde\u63a5 \\(G\\) \u4e2d\u6240\u6709\u6ca1\u8fde\u4e0a\u7684\u8fb9\uff0c\u4f7f \\(G\\) \u6210\u4e3a\u4e00\u5f20\u65e0\u6743\u5b8c\u5168\u56fe\uff1b \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) \\] \u53d8\u91cf\u662f\u5426\u91cd\u590d\u3001\u662f\u5426\u53d6\u975e\u4e0d\u662f\u91cd\u70b9\uff0c\\(x_1\\) \u53ef\u4ee5\u548c \\(x_6\\) \u662f\u540c\u4e00\u4e2a\u53d8\u91cf\uff0c\u4e5f\u53ef\u4ee5\u662f\u67d0\u4e2a\u53d8\u91cf\u7684\u975e\uff0c\u91cd\u70b9\u662f\u8fd9\u91cc\u7684\u4e09\u4e2a\u4e00\u7ec4\u7684\u5f62\u5f0f\u3002 "},{"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
bin 1: \\(0.2 + 0.8\\); bin 2: \\(0.7 + 0.3\\); bin 3: \\(0.4 + 0.1 + 0.5\\); \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
bin 1: \\(0.8 + 0.2\\); bin 2: \\(0.7 + 0.3\\); bin 3: \\(0.5 + 0.4 + 0.1\\); 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
item 1: \\(w_1 = 18.0, p_1 = 25.0\\); item 2: \\(w_2 = 15.0, p_2 = 24.0\\); item 3: \\(w_3 = 10.0, p_3 = 15.0\\); \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
\u5982\u679c\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u6240\u6709\u70b9\u7684\u4e2d\u5fc3\uff1b \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
\u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff1b \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 \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 \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 \u5f53\u6240\u6709\u70b9\u90fd\u88ab\u8986\u76d6\u540e\uff1a \u5982\u679c \\(|C_x| \\leq k\\)\uff0c\u5219\u8fd4\u56de yes\uff1b \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
\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 \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
\u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff0c\\(S_x = S\\)\uff1b \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 \u5f53 \\(|C_x| \\leq k\\) \u4e14 \\(S_x \\not = \\emptyset\\) \u65f6\uff0c\u91cd\u590d\u4ee5\u4e0b\u6b65\u9aa4\uff1a \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 \u5c06 \\(s_i\\) \u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b \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
\u6700\u4f18\u6027(optimality)\uff1a\u5373\u80fd\u6c42\u51c6\u786e\u89e3\uff1b \u9ad8\u6548\u6027(efficiency)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u9ad8\u6548\uff1b \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
\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 \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 \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
local optimum is a best solution in a neighborhood start with a feasible solution and search a better one within the neighborhood a local optimum is achieved if no improvement is possible \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
3
5
7
9
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
\u56e0\u4e3a\u5185\u6392\u5e8f\u5f88\u5feb\uff0c\u6240\u4ee5\u8981\u5c3d\u53ef\u80fd\u5229\u7528\u5185\u6392\u5e8f\uff1b \u6240\u4ee5\u4e00\u5f00\u59cb\u5c31\u8981\u5c06\u80fd\u5185\u6392\u5e8f\u505a\u7684\u4e8b\u60c5\u90fd\u7528\u5185\u6392\u5e8f\u89e3\u51b3\uff1b \u6240\u4ee5\u6700\u521d\u7684 run \u7684\u5927\u5c0f\u662f \\(M\\)\u3002 \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
\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 \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
\u4e00\u4e2a pass \u610f\u5473\u7740\u82e5\u5e72\u6b21 seek\uff0c\u6240\u4ee5\u51cf\u5c11 pass \u53ef\u4ee5\u662f\u4e00\u4e2a\u65b9\u5411\uff1b #pass-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316 merge \u7684\u8fc7\u7a0b\u4e2d\u4f1a\u591a\u6b21\u8bfb\u53d6 tape \u4e2d\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8e\u8ba1\u7b97\u673a\u6765\u8bf4\u5355\u6b21\u5927\u91cf\u8bfb\u53d6\u6bd4\u591a\u6b21\u5c0f\u91cf\u8bfb\u53d6\u66f4\u9ad8\u6548\uff0c\u5982\u4f55\u4f18\u5316\u6570\u636e\u8bfb\u53d6\u4e5f\u662f\u4e00\u4e2a\u65b9\u5411\uff1b #tape-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316 \u5982\u4f55\u66f4\u9ad8\u6548\u7684\u5728 \\(k\\)-way merge \u8fc7\u7a0b\u4e2d\uff0c\u5f52\u5e76 M \u4e2a\u5206\u522b\u6765\u81ea k \u4e2a\u5e8f\u5217\u7684\u6570\u636e\uff0c\u5373\u5185\u6392\u5e8f\u7684\u7b56\u7565\uff0c\u4e5f\u4e0a\u4f18\u5316\u7684\u4e00\u4e2a\u65b9\u5411\uff1b #k-\u8def\u5185\u6392\u5e8f\u4f18\u5316 \u8bfb\u5165\u3001\u5185\u6392\u5e8f\u3001\u8f93\u51fa\uff0c\u8fd9\u4e09\u4e2a\u4e8b\u52a1\u76ee\u524d\u662f\u505c\u673a\u4e32\u884c\u7684\uff0c\u8003\u8651\u5c06\u5176\u5e76\u884c\u5316\u4e5f\u662f\u4e00\u4e2a\u65b9\u5411\uff1b "},{"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
\\(T_2\\) \u4e0a \\(\\#run = 3\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 2\\)\uff1b 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
\\(T_2\\) \u4e0a \\(\\#run = 3-1 = 2\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 2-1 = 1\\)\uff1b \\(T_1\\) \u4e0a \\(\\#run = 0+1 = 1\\)\uff1b \\(T_4\\) \u4e0a \\(\\#run = 0\\)\uff1b \u7ee7\u7eed\u53d6\uff0c\u5373\uff1a
\\(T_2\\) \u4e0a \\(\\#run = 2-1 = 1\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 1-1 = 0\\)\uff1b \\(T_1\\) \u4e0a \\(\\#run = 1\\)\uff1b \\(T_4\\) \u4e0a \\(\\#run = 0+1 = 1\\)\uff1b \\(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
\\(T_2\\) \u4e0a \\(\\#run = 1-1 = 0\\)\uff1b \\(T_3\\) \u4e0a \\(\\#run = 0\\)\uff1b \\(T_1\\) \u4e0a \\(\\#run = 1+1 = 2\\)\uff1b \\(T_4\\) \u4e0a \\(\\#run = 1\\)\uff1b \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
\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 \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
\\(\\max\\{r_i\\} = F^k_j\\); \\(\\min\\{r_i\\} = F^k_{j-1}\\); \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
\u5b98\u65b9\u7f51\u7ad9\uff1a\ud83d\udd17 \u89c6\u9891\u94fe\u63a5\uff1a\ud83d\udd17 \u53c2\u8003\u7b14\u8bb0\uff1a\ud83d\udd17 \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
\u65e5\u5e38\u591a\u8bfb\u591a\u5199\u591a\u6a21\u4eff\uff0c\u4e0d\u4e00\u5b9a\u8981\u548c\u79d1\u5b66\u6587\u7ae0\u6709\u5173\uff1b \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 \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 \u5c1d\u8bd5\u8ba9\u6587\u7ae0\u53d8\u5f97\u6709\u5438\u5f15\u529b\uff1b \u8ba4\u8bc6\u5230\u5199\u4f5c\u4e0d\u9700\u8981\u7075\u611f\uff0c\u4e0d\u8981\u628a\u7075\u611f\u5f53\u4f5c\u501f\u53e3\uff1b \u8ba4\u8bc6\u5230\u5199\u4f5c\u672c\u8eab\u662f\u56f0\u96be\u7684\uff0c\u800c\u5927\u5bb6\u90fd\u4e00\u6837\uff1b \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 \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 \u627e\u4e00\u4e2a\u597d\u7f16\u8f91\uff0cta \u4eec\u53ef\u80fd\u4f1a\u7ed9\u4f60\u597d\u7684\u610f\u89c1\u548c\u5efa\u8bae\uff1b \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
\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 \u66f4\u591a\u5730\u4f7f\u7528\u4e3b\u52a8\u8bed\u6001\uff08\u4e3b\u8c13\u5bbe\uff09\u800c\u975e\u88ab\u52a8\u8bed\u6001\uff1b \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 \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 414 \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
\u6388\u8bfe\uff1a\u8521\u94ed \u667a\u4e91\u8bfe\u5802\u94fe\u63a5\uff1a\ud83d\udd17 \u6559\u6750\uff1aLogic and Computer Design Fundamentals, Fifth Edition \u672c\u6587\u4e3b\u8981\u6765\u81ea\u4e8e\u6211\u5543\u6559\u6750\u65f6\u7684\u7b14\u8bb0\uff0c\u4f46\u5c0f\u7ed3\u5b89\u6392\u4e0d\u5b8c\u5168\u662f\u6309\u7167\u8bfe\u672c\u6765 \u56e0\u4e3a\u6211\u7684\u5f3a\u8feb\u75c7\uff0c\u6211\u5f88\u7ea0\u7ed3\u5982\u4f55\u628a\u8bdd\u8bf4\u901a\u987a\u548c\u628a\u4e0a\u4e0b\u903b\u8f91\u5199\u51fa\u6765\uff0c\u6240\u4ee5\u6709\u4e9b\u53ef\u80fd\u4e00\u773c\u5c31\u770b\u51fa\u6765\u7684\u4e1c\u897f\u6211\u8fd8\u662f\u8981\u89e3\u91ca\u4e00\u5927\u5806\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u6bd4\u8f83\u5570\u55e6\u545c\u545c\u545c\uff0c\u5e0c\u671b\u5927\u5bb6\u6709\u4efb\u4f55\u610f\u89c1\u6216\u8005\u5efa\u8bae\u90fd\u5199\u5728\u8bc4\u8bba\u533a\u91cc\u8ba9\u6211\u77e5\u9053\uff01\u5e0c\u671b\u8fd9\u4efd\u8d44\u6599\u53ef\u4ee5\u7ed9\u4f60\u5e26\u6765\u5e2e\u52a9\uff01 \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
\u672c\u7b14\u8bb0\u7ecf @MinJoker \u8865\u5145\u548c\u5b8c\u5584\u3002 \u66f4\u591a\u6570\u903b\u76f8\u5173\u7684\u77e5\u8bc6\u4e0e\u601d\u8003\u6b22\u8fce\u79fb\u6b65 MinJoker's Notebook\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
Chap 1 Digital Systems and Information Chap 2 Combinational Logic Circuits Chap 3 Combinational Logic Design Chap 4 Sequential Circuits Chap 5 Digital Hardware Implementation Chap 6 Registers & Register Transfers Chap 7 Memory Basics Glossary "},{"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
Numeric \u5fc5\u987b\u8868\u8fbe\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u6570\u5b57\uff1b \u80fd\u591f\u652f\u6301\u7b80\u5355\u4e14\u666e\u904d\u7684\u8ba1\u7b97\uff1b \u548c\u4e8c\u8fdb\u5236\u6570\u503c\u672c\u8eab\u6709\u8f83\u5927\u5173\u8054\uff1b Non-numeric \u76f8\u5bf9\u7075\u6d3b\uff0c\u56e0\u4e3a\u4e0d\u9700\u8981\u9002\u914d\u666e\u904d\u7684\u8fd0\u7b97\u6cd5\u5219\uff1b \u7075\u6d3b\u6027\u6307\uff0c\u4fdd\u8bc1\u7f16\u7801\u6620\u5c04\u5173\u7cfb\u662f\u552f\u4e00\u7684\u7684\u60c5\u51b5\u4e0b\u90fd\u53ef\u4ee5\u79f0\u4e3a\u5408\u6cd5\u7f16\u7801\uff1b \u548c\u4e8c\u8fdb\u5236\u6570\u503c\u672c\u8eab\u672a\u5fc5\u6709\u5173\u7cfb\uff1b "},{"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
\u6bd4\u5982\uff0c\u5982\u679c\u6211\u4eec\u91c7\u7528\u5076\u6821\u9a8c\uff0c\u539f\u59cb\u4fe1\u606f\u4e3a 1101
\uff0c\u5176\u4e2d\u6709 3 \u4e2a 1
\uff0c\u8fd9\u65f6\u6211\u4eec\u5728\u540e\u9762\u518d\u52a0\u4e0a\u4e00\u4e2a 1
\uff0c\u4fdd\u8bc1\u4e86\u6574\u4e2a\u4fe1\u606f\u4e32\u4e2d\u6709\u5076\u6570\u4e2a 1
\uff1b\u6216\u8005\u5982\u679c\u539f\u59cb\u4fe1\u606f\u4e3a 1001
\uff0c\u5176\u4e2d\u6709 2 \u4e2a 1
\uff0c\u8fd9\u65f6\u6211\u4eec\u5219\u5728\u540e\u9762\u52a0\u4e00\u4e2a 0
\u3002\u6b64\u65f6\uff0c\u5982\u679c\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u90a3\u4e48 1
\u7684\u6570\u91cf\u5f88\u53ef\u80fd\u53d8\u6210\u4e86\u4e00\u4e2a\u5947\u6570\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u77e5\u9053\uff0c\u8fd9\u4e2a\u4fe1\u606f\u662f\u4e0d\u5bf9\u7684\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
A
AND
B
\u53ef\u5199\u4f5c \\(A\\cdot B\\) \u6216\u8005 \\(AB\\)\uff1b A
OR
B
\u53ef\u5199\u4f5c \\(A+B\\)\uff1b NOT A
\u53ef\u5199\u4f5c \\(\\overline{A}\\)\uff1b \u7531\u6b64\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u7ec4\u5408\uff0c\u4f8b\u5982\uff1a
A
NOR
B
\u53ef\u5199\u4f5c \\(\\overline{A+B}\\)\uff1b A
NAND
B
\u53ef\u5199\u4f5c \\(\\overline{A\\cdot B}\\)\uff1b \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
\\(\\overline{A+B} = \\overline{A}\\cdot\\overline{B}\\)\uff1b \\(\\overline{A\\cdot B} = \\overline{A}+\\overline{B}\\)\uff1b "},{"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
Title: Universal Logic Gates URL: https://www.electronics-tutorials.ws/logic/universal-gates.html 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
\u62ec\u53f7 / ()\uff1b \u975e / NOT / \\(\\overline A\\)\uff1b \u4e0e / AND / \\(\\cdot\\)\uff1b \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
\\(X+XY\\) \u548c \\(X(X+Y)\\) \u5bf9\u5076\uff1b \\(X(Y+Z)\\) \u548c \\(X+YZ\\) \u5bf9\u5076\uff1b \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
\u5982\u679c F \u7684\u5bf9\u5076\u662f G\uff0c\u90a3\u4e48 F \u4e5f\u662f G \u7684\u5bf9\u5076\uff0c\u5373\u5bf9\u5076\u5173\u7cfb\u662f\u5bf9\u6210\u7684\uff1b \u5982\u679c\u8868\u8fbe\u5f0f F \u548c G \u7b49\u4ef7\uff0c\u90a3\u4e48\u4ed6\u4eec\u7684\u5bf9\u5076\u4e5f\u7b49\u4ef7\uff1b "},{"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
\u539f\u51fd\u6570\uff1a\\(F=\\overline{A}B+C\\overline{B}\\)\uff1b \u5176\u5bf9\u5076\u51fd\u6570\uff1a\\(F=(\\overline{A}+B)(C+\\overline{B})\\)\uff1b \u5176\u4e92\u8865\u51fd\u6570\uff1a\\(\\overline{F}=(A+\\overline{B})(\\overline{C}+D)\\)\uff1b "},{"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
\u539f\u7b49\u5f0f\uff1a\\(X(Y+Z)=XY+XZ\\)\uff1b \u5982\u679c\u4f7f\u7528 \\(X+YZ\\) \u66ff\u6362\u6240\u6709\u7684 \\(X\\)\uff0c\u5219\uff1a \u4fee\u6539\u540e\u7684\u7b49\u5f0f \\((X+YZ)(Y+Z)=(X+YZ)Y+(X+YZ)Z\\) \u4f9d\u7136\u6210\u7acb\uff1b "},{"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
\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1(literal cost)\uff1a\\(L\\) \u6309\u95e8\u8f93\u5165\u8ba1\uff0c\u4e0d\u8ba1\u975e\u95e8(gate-input cost)\uff1a\\(G\\) \u6309\u95e8\u8f93\u5165\u8ba1\uff0c\u8ba1\u975e\u95e8(gate-input cost with NOTs)\uff1a\\(GN\\) "},{"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
\\(F = BD + A\\overline{B}C + A\\overline{C}\\,\\overline{D}\\) \u4e2d \\(L = 8\\)\uff1b \\(F = ABC+\\overline{A}\\,\\overline{B}\\,\\overline{C}\\) \u4e2d \\(L = 6\\)\uff1b \\(F = (A+B+C)(\\overline{A}+\\overline{B} + \\overline{C})\\) \u4e2d \\(L = 6\\)\uff1b \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
\u7eff\u8272\u539f\u70b9\u8868\u793a\u4e00\u7ea7\u8f93\u5165\u5f15\u811a\uff1b \u84dd\u8272\u65b9\u70b9\u8868\u793a\u4e8c\u7ea7\u8f93\u5165\u5f15\u811a\uff1b \u9ed1\u8272\u4e09\u89d2\u8868\u793a\u975e\u95e8\u7684\u8f93\u5165\u5f15\u811a\uff1b \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
A \u548c B \u5404\u81ea\u7b97\u4e00\u4e2a\uff0cAB \u6574\u4f53\u7b97\u4e00\u4e2a\uff0c\u4e00\u5171 3 \u4e2a\uff1b \u4e00\u5171\u6709\u4e09\u7ec4\u7c7b\u4f3c AB \u7684\u7ed3\u6784\uff0c\u6240\u4ee5\u4e00\u5171\u662f 3 * 3 = 9 \u4e2a\uff1b \u5373 \\(G=9\\)\uff1b \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
\u53d1\u73b0\u6709\u4e24\u4e2a\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u6240\u4ee5\u8981\u989d\u5916\u8ba1 2 \u4e2a\uff0c\u4e00\u5171\u662f 11 \u4e2a\uff1b \u5373 \\(GN=11\\)\uff1b \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
\\(L = 6\\)\uff1b \\(G = 8\\)\uff1b \\(GN = 11\\)\uff1b \u9898\u9762\u7b54\u6848 \u8ba1\u7b97 \\(F=(A+\\overline{C})(\\overline{B}+C)(\\overline{A}+B)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002
\\(L = 6\\)\uff1b \\(G = 9\\)\uff1b \\(GN = 12\\)\uff1b \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
\\(L = 10\\)\uff1b \\(G = 14\\)\uff1b \\(GN = 17\\)\uff1b \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
\\(L = 11\\)\uff1b \\(G = 15\\)\uff1b \\(GN = 18\\)\uff1b \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
\\(L = 8\\)\uff1b \\(G = 12\\)\uff1b \\(GN = 15\\)\uff1b \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
\u7eff\uff1a\\(x=0,\\;y=0,\\;z=0/1\\) \u6240\u4ee5\u662f\uff1a\\(\\overline{X}\\,\\overline{Y}\\)\uff1b \u84dd\uff1a\\(x=0/1,\\;y=0/1,\\;z=0\\) \u6240\u4ee5\u662f\uff1a\\(\\overline{Z}\\)\uff1b \u7ea2\uff1a\\(x=1,\\;y=1,\\;z=0/1\\) \u6240\u4ee5\u662f\uff1a\\(XY\\) \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
\u8f93\u5165\u7ec4\u5408\u4e0d\u4f1a\u51fa\u73b0\uff1b \u8f93\u5165\u7ec4\u5408\u7684\u8f93\u51fa\u4e0d\u88ab\u4f7f\u7528\uff1b \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
\u5728\u5361\u8bfa\u56fe\u4e2d\uff0c\u4e00\u4e2a\u8574\u542b\u9879\u5c31\u662f\u4efb\u610f\u4e00\u4e2a\u5305\u542b \\(2^n\\) \u4e2a 1
\u7684\u5355\u5143\uff1b \u800c\u4e3b\u8574\u542b\u9879\u5219\u662f\u5728\u5361\u8bfa\u56fe\u4e2d\u7684 \u6781\u5927 \u8574\u542b\u9879\uff1b \u5bf9\u4e8e\u5b58\u5728 Dont'cares \u7684 K-map\uff0c\u5982\u679c\u6211\u4eec\u5173\u6ce8\u7684\u662f 1
\uff0c\u90a3\u6211\u4eec\u79ef\u6781\u5730\u5c06\u4ed6\u4eec\u5f53\u4f5c 1
\u6765\u5904\u7406\uff0c\u53cd\u4e4b\u4ea6\u7136\uff1b \u4f46\u662f\u5355\u72ec\u7684 X
\u4e0d\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e3b\u8574\u542b\u9879\uff1b \u57fa\u672c\u4e3b\u8574\u542b\u9879\u662f\u5305\u542b \u53ea\u88ab\u5b83(\u57fa\u672c\u4e3b\u8574\u542b\u9879)\u8986\u76d6\u7684 1
\u7684\u4e3b\u8574\u542b\u9879\uff1b
\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
\u5f53\u4f7f\u80fd\u7aef\u4e3a 1
\uff0c\u4e14\u8f93\u5165\u4e3a 1
\u65f6\uff0c\u8f93\u51fa\u4e3a 1
\uff1b \u5f53\u4f7f\u80fd\u7aef\u4e3a 1
\uff0c\u4e14\u8f93\u5165\u4e3a 0
\u65f6\uff0c\u8f93\u51fa\u4e3a 0
\uff1b \u5f53\u4f7f\u80fd\u7aef\u4e3a 0
\uff0c\u8f93\u51fa\u4e3a Hi-Z
/Z
/z
(\u6d6e\u52a8\uff0c\u9ad8\u963b\u6001)\uff1b
\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
\u7ec4\u5408\u7535\u8def(Combinational Circuit) \u62e5\u6709 m \u4e2a\u8f93\u5165\u548c n \u4e2a\u8f93\u51fa\uff0c\u5176\u4e2d\u5305\u542b\u4e86 \\(2^m\\) \u79cd\u8f93\u5165\u7ec4\u5408\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684 n \u4e2a\u4e0d\u540c\u7684\u51fd\u6570\uff1b \u6700\u5173\u952e\u7684\u662f\uff0c\u5b83\u7684 \u8f93\u51fa\u53ea\u4f9d\u8d56\u4e8e\u8fd9 m \u4e2a\u8f93\u5165\u7684\u7ec4\u5408\uff08\u4e0d\u5305\u542b\u56de\u8def\uff09\uff1b \u65f6\u5e8f\u7535\u8def(Sequential Logic Cirtuit) \u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0c\u65f6\u5e8f\u7535\u8def\u5177\u6709\u8bb0\u5fc6\u529f\u80fd\uff0c\u5373\u5b83\u7684\u8f93\u51fa\u53ef\u80fd\u4f1a\u4f9d\u8d56\u4e4b\u524d\u7684\u7ed3\u679c\uff1b \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
\u771f\u503c\u8868(Truth Table)\uff1b \u5e03\u5c14\u51fd\u6570(Boolean Function)\uff1b \u5361\u8bfa\u56fe(Karnaugh Maps)\uff1b \u65f6\u5e8f\u56fe(Timing Diagram)\uff1b \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
\u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b \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 \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u4ee5\u51cf\u5c11\u6210\u672c(\u6bd4\u5982\u4f7f\u7528\u5361\u8bfa\u56fe)\uff1b \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b \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
SSI(small-scale integrated) \u5185\u542b\u4e0d\u5230 10 \u4e2a gates\uff1b MSI(medium-scale integrated) \u5185\u542b 10 ~ 100 \u4e2a gates\uff1b LSI(large-scale integrated) \u5185\u542b \u6210\u767e\u4e0a\u5343 \u4e2a gates\uff1b VLSI(very large-scale integrated) \u5185\u542b \u6210\u5343\u4e0a\u4ebf \u4e2a gates\uff1b "},{"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
rise time \u7b49\u4e8e\u6805\u6781\u8f93\u51fa\u4ece \\(\\mathrm{V_{CC}}\\) \u7684 10% \u5347\u9ad8\u5230 90% \u6240\u9700\u8981\u7684\u65f6\u95f4\uff1b fall time \u7b49\u4e8e\u6805\u6781\u8f93\u51fa\u4ece \\(\\mathrm{V_{CC}}\\) \u7684 90% \u964d\u4f4e\u5230 10% \u6240\u9700\u8981\u7684\u65f6\u95f4\uff1b \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
\u4f20\u8f93\u5ef6\u8fdf(transport delay): \u8ba4\u4e3a\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u5ef6\u8fdf\u662f\u4e00\u4e2a\u5b9a\u503c\u7684\uff1b
\u60ef\u6027\u5ef6\u8fdf(inertial delay): \u5f15\u5165\u4e86 \u62d2\u7edd\u65f6\u95f4(rejection time)\uff0c\u53ea\u6709\u5f53\u8f93\u5165\u8fbe\u5230\u4e00\u5b9a\u80fd\u91cf\u540e\uff0c\u624d\u4f1a\u51fa\u53d1\u6805\u6781\u8f93\u51fa\uff08\u5728\u8fd9\u79cd\u6a21\u578b\u4e0b\uff0c\u566a\u97f3\u7b49\u4f1a\u88ab\u8fc7\u6ee4\uff09\uff1b
\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
\u4eba\u5de5\u903b\u8f91\u5206\u6790(Manual Logic Analysis)\uff1a \u627e\u5230\u6700\u7ec8\u7535\u8def\u7684\u771f\u503c\u8868\u6216\u5e03\u5c14\u4ee3\u6570\u5f0f\uff0c\u5224\u65ad\u5176\u662f\u5426\u548c\u9884\u671f\u884c\u4e3a\u4e00\u81f4\uff1b \u4eff\u771f(Simulation)\uff1a \u5728\u4eff\u771f\u73af\u5883\u4e2d\uff0c\u4f7f\u7528\u5408\u9002\u7684\u6d4b\u8bd5\u8f93\u5165\uff08\u6fc0\u52b1\u4fe1\u53f7\uff09\u6765\u6d4b\u8bd5\u6700\u7ec8\u7535\u8def\uff08\u6216\u5176\u7f51\u8868\uff0c\u53ef\u80fd\u7f16\u5199\u4e3a HDL\uff09\uff0c\u901a\u8fc7\u89c2\u5bdf\u5176\u54cd\u5e94\u7ed3\u679c\u6765\u5224\u65ad\u662f\u5426\u5b9e\u73b0\u9884\u671f\u884c\u4e3a\uff1b 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":" \u5e38\u91cf\u51fd\u6570(Value-Fixing)\uff1a\\(F=0\\;\\;or\\;\\;F=1\\) | \u8f93\u51fa\u5b9a\u503c\uff1b \u4f20\u8f93\u51fd\u6570(Transferring)\uff1a\\(F=X\\) | \u76f4\u63a5\u8f93\u51fa\u8f93\u5165\u503c\uff1b \u9006\u53d8\u51fd\u6570(Inverting)\uff1a\\(F=\\overline{X}\\) | \u8f93\u51fa\u8f93\u5165\u7684\u76f8\u53cd\uff1b \u4f7f\u80fd\u51fd\u6570(Enabling)\uff1a\\(F=X\\cdot En \\;\\; or \\;\\; F = X + \\overline{En}\\) | \u901a\u8fc7\u4f7f\u80fd\u63a7\u5236\u8f93\u51fa\u662f\u5426\u53ef\u53d8\uff0c\u5206\u4e3a\u4e24\u79cd\uff0c\u6bd4\u5982\u4e0e\u7684\u5f62\u5f0f\u4e2d\uff0c\u53ea\u6709 \\(En\\) \u4e3a 1
\u65f6\uff0c\\(F\\) \u8868\u73b0\u4e3a \\(X\\) \u7684\u503c\uff1b\u53cd\u4e4b\u8f93\u51fa\u5fc5\u5b9a\u4e3a 0
\uff08\u6ce8\u610f\u533a\u5206\u5b83\u4e0e\u4e09\u6001\u95e8\u7684\u533a\u522b\uff0c\u9ad8\u963b\u6001 or \u5b9a\u503c\uff09\uff1b "},{"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
\u5c06\u63a7\u5236\u7aef\u5f53\u4f5c\u8f93\u5165\uff0c\u539f\u6765\u7684\u8f93\u5165\u5f53\u4f5c\u7ed3\u679c\uff1b \u5373\u53ef\u4ee5\u5c06\u4e00\u4e2a\u56db\u8f93\u5165 MUX
\u5f53\u4f5c\u4e00\u4e2a\u4e8c\u8f93\u5165\u7684\u51fd\u6570\uff1b \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":" TODO: \u8865\u5145\u8fd9\u91cc\u3002 "},{"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
\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 \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
\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 \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":" \u7406\u8bba\u5206\u6790\u4e2d\uff1a \u72b6\u6001\u8868(Characteristic Table, or State Table)\u7528\u8f93\u5165\u548c\u5f53\u524d\u72b6\u6001\u6765\u63cf\u8ff0\u4e0b\u4e00\u72b6\u6001\uff1b \u5de5\u7a0b\u8bbe\u8ba1\u4e2d\uff1a \u6fc0\u52b1\u8868(Excitation Table)\u7528\u5f53\u524d\u72b6\u6001\u548c\u4e0b\u4e00\u72b6\u6001\u6765\u63cf\u8ff0\u8f93\u5165\uff08\u5c55\u793a\u4ece\u5f53\u524d\u72b6\u6001\u8f6c\u79fb\u5230\u4e0b\u4e00\u72b6\u6001\u6240\u9700\u8981\u7684\u8f93\u5165\uff09\uff1b "},{"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
\u89e6\u53d1\u5668\u7684\u6570\u91cf\u57fa\u672c\u53d6\u51b3\u4e8e\u6574\u4e2a\u9700\u6c42\u4e2d \u72b6\u6001 \u7684\u6570\u91cf\uff0c\\(n\\) \u4e2a\u89e6\u53d1\u5668\u80fd\u591f\u8868\u8fbe \\(2^n\\) \u4e2a\u4e8c\u8fdb\u5236\u72b6\u6001\uff1b \u7ec4\u5408\u7535\u8def\u7684\u4e3b\u8981\u8bbe\u8ba1\u56f4\u7ed5 \u89e6\u53d1\u5668 \u7684 \u8f93\u5165 \u548c \u8f93\u51fa \u5c55\u5f00\uff1b \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
\u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b \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 \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 \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 \u7ed9\u8bbe\u8ba1\u597d\u7684\u72b6\u6001\u7f16\u7801\u8d4b\u503c\uff0c\u5f97\u5230\u5177\u4f53\u7684\u72b6\u6001\u8868\uff1b \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 \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 \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u4f7f\u7528\u7684\u89e6\u53d1\u5668\u53ca\u5176\u8f93\u5165\u65b9\u7a0b\uff1b \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u8f93\u51fa\u65b9\u7a0b\uff1b \u4f18\u5316\u8f93\u5165\u65b9\u7a0b\u548c\u8f93\u51fa\u65b9\u7a0b\uff1b \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b \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
Moore \u53ea\u4e0e\u72b6\u6001\u6709\u5173\uff0c\u6240\u4ee5\u5728\u56fe\u4e2d\u4ece\u72b6\u6001\u8282\u70b9\u5f15\u51fa\uff1b TCI Mealy \u4e0e\u72b6\u6001\u548c\u8f93\u51fa\u6761\u4ef6\u6709\u5173\uff0c\u6240\u4ee5\u5728\u56fe\u4e2d\u4ece\u72b6\u6001\u8282\u70b9\u5f15\u51fa\u5199\u5728 OC \u540e\u9762\uff08OC
/TCI OA
\uff09\uff1b TCD Mealy \u4e0e\u8f6c\u79fb\u6761\u4ef6\u6709\u5173\uff0c\u5f53\u8f6c\u79fb\u6210\u7acb\u7684\u65f6\u5019\u53d1\u751f Output Action\uff0c\u6240\u4ee5\u76f4\u63a5\u5199\u5728 TC \u540e\u9762\uff08TC
/TCD OA
\uff09\uff1b TOCD Mealy \u5728\u8f6c\u79fb\u53d1\u751f\u65f6\u5019\u624d\u53ef\u80fd\u6761\u4ef6\u6210\u7acb\uff0c\u5373\u5f53 TC \u548c OC \u90fd\u6210\u7acb\u65f6\u624d\u53d1\u751f Output Action\uff0c\u6240\u4ee5\u9700\u8981\u4ece TC \u5f15\u51fa OC\uff0c\u5e76\u8ddf\u5728 OC \u540e\u9762\uff08TC
\u2014\u2014OC
/TOCD OA
\uff09\uff1b \u5982\u679c\u51fa\u73b0\u590d\u6570\u7684 TOCD OA\uff0c\u5219\u4f7f\u7528 ,
\u5206\u9694\uff1b 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
TC \u7684\u975e\u4ea4\u548c\u5145\u5206\u662f\u4ee5\u67d0\u4e2a\u72b6\u6001\u4e3a\u5bf9\u8c61\u7684\uff0c\u800c OC \u7684\u975e\u4ea4\u548c\u5145\u5206\u5219\u662f\u4ee5\u67d0\u4e2a\u8f93\u51fa\u53d8\u91cf\u4e3a\u5bf9\u8c61\u7684\uff1b \u4e0d\u540c\u4e8e TC \u7684\u663e\u5f0f\uff0cOC \u7684\u5199\u6cd5\u5728\u5f88\u591a\u65f6\u5019\u662f\u9690\u5f0f\u7684\uff1a \u5bf9\u4e8e TCD \u548c TCOD\uff0c\u5206\u6790\u67d0\u4e2a\u8f93\u51fa\u53d8\u91cf\u7684\u65f6\u5019\uff0c\u5e94\u8be5\u628a\u76f8\u5e94\u7684 TC \u4e5f\u7eb3\u5165 OC \u7684\u5206\u6790\u4e2d\uff1b \u5bf9\u4e8e Moore\uff0cOC \u76f8\u5f53\u4e8e 1
\uff1b \u5bf9\u4e8e TCI\uff0c\u9700\u8981\u6ce8\u610f\u628a default \u7684\u8f93\u51fa\u60c5\u51b5\u4e5f\u7eb3\u5165\u5206\u6790\u4e2d\uff08\u4e8b\u5b9e\u4e0a default \u7684\u5b58\u5728\u4f7f\u5f97\uff0c\u53ea\u8981\u56fe\u4e2d\u663e\u5f0f\u7684 OC \u975e\u4ea4\uff0c\u90a3\u4e48\u4e00\u5b9a\u53ef\u4ee5\u4fdd\u8bc1\u6240\u6709 OC \u662f\u975e\u4ea4\u4e14\u5145\u5206\u7684\uff09\uff1b \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
\u7ec4\u5408\u7535\u8def\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b \u89e6\u53d1\u5668\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b \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
Setup Time\uff1a\u91c7\u6837\u8fb9\u7f18\u524d\u8f93\u5165\u4fe1\u53f7\u9700\u8981\u4fdd\u6301\u7a33\u5b9a\u7684\u65f6\u95f4\uff1b Hold Time\uff1a\u91c7\u6837\u8fb9\u7f18\u540e\u8f93\u5165\u4fe1\u53f7\u9700\u8981\u4fdd\u6301\u7a33\u5b9a\u7684\u65f6\u95f4\uff1b Propagation Time\uff1a\u89e6\u53d1\u5668\u7684\u91c7\u6837\u8fb9\u7f18\u5230\u8f93\u51fa\u7a33\u5b9a\u7684\u65f6\u95f4\uff08\u4f20\u64ad\u65f6\u95f4\uff09\uff1b \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
\u8fd9\u51e0\u4e2a\u65f6\u95f4\u70b9\u8d77\u70b9/\u7ec8\u70b9\u90fd\u662f\u89e6\u53d1\u8fb9\u7f18\uff1b 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 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 3054 \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
\u5728\u6570\u5b57\u903b\u8f91\u7684\u8bbe\u8ba1\u7a7a\u95f4\u4e2d\uff0cCOMS \u51ed\u501f\u5176\u8f83\u9ad8\u7684\u6297\u566a\u6027\u80fd\u548c\u8f83\u4f4e\u7684\u80fd\u8017\uff0c\u6210\u4e3a\u76ee\u524d\u5e94\u7528\u6700\u5e7f\u6cdb\u7684\u786c\u4ef6\u6280\u672f\u4e4b\u4e00\uff1b \u53ef\u7f16\u7a0b\u6280\u672f\u4f7f\u5f97\u786c\u4ef6\u5728\u51fa\u5382\u540e\uff0c\u80fd\u591f\u6839\u636e\u7528\u6237\u7684\u9700\u6c42\u8fdb\u4e00\u6b65\u7f16\u8f91\u786c\u4ef6\uff0c\u4ece\u800c\u5b9e\u73b0\u7279\u5b9a\u7684\u903b\u8f91\u529f\u80fd\uff1b \u66f4\u8fdb\u4e00\u6b65\u5730\uff0c\u53ef\u7f16\u7a0b\u6280\u672f\u53c8\u53ef\u4ee5\u5206\u4e3a\u6c38\u4e45(permanent)\u7f16\u7a0b\u6280\u672f\u548c\u53ef\u91cd(reprogrammable)\u7f16\u7a0b\u6280\u672f\uff1b "},{"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\u7535\u6e90\u6307\u5411\u63a5\u5730\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
\u63a7\u5236\u8fde\u63a5\u6765\u5b9e\u73b0(Control Connections)\uff1a Mask programing Fuse\uff08\u7c7b\u4f3c\u4e8e\u4fdd\u9669\u4e1d\uff0c\u901a\u8fc7\u9ad8\u7535\u538b\u6765\u5207\u65ad\u90e8\u5206\u7535\u8def\u6765\u5b9e\u73b0\uff09 Anti-fuse\uff08Fuse \u7684\u53cd\u64cd\u4f5c\uff0c\u901a\u8fc7\u9ad8\u7535\u538b\u6765\u8054\u901a\u90e8\u5206\u7535\u8def\u6765\u5b9e\u73b0\uff09 Single-bit storage element \u4f7f\u7528\u67e5\u627e\u8868(Lookup Tables)\uff1a Storage elements for the function \u6bd4\u5982\u4f7f\u7528\u4e00\u4e2a MUX
\uff0c\u5e76\u5c06\u8f93\u5165\u7aef\u63a5\u5185\u5b58\uff0c\u901a\u8fc7\u4fee\u6539\u5185\u5b58\u7684\u503c\u6765\u4fee\u6539 MUX
\u7684\u884c\u4e3a\uff0c\u8fdb\u800c\u5b9e\u73b0\u51fd\u6570\u91cd\u7f16\u7a0b \u63a7\u5236\u6676\u4f53\u7ba1\u5f00\u5173\u5b9e\u73b0(Control Transistor Switching) \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
\u6c38\u4e45(permanent)\u7f16\u7a0b\u6280\u672f\uff1a\u51fa\u5382\u540e\u7ecf\u8fc7\u4e00\u6b21\u7f16\u7a0b\uff0c\u4fbf\u6c38\u4e45\u6210\u578b\uff1b Mask programming Fuse Anti-fuse \u53ef\u91cd(reprogrammable)\u7f16\u7a0b\u6280\u672f\uff1a\u5141\u8bb8\u91cd\u590d\u8fdb\u884c\u7f16\u7a0b\uff1b Volatile\uff1a\u65ad\u7535\u540e\u7f16\u7a0b\u4fe1\u606f\u4f1a\u4e22\u5931\uff1b Single-bit storage element Non-Volatile\uff1a\u7f16\u7a0b\u4fe1\u606f\u4ec5\u5728\u64e6\u9664\u64cd\u4f5c\u540e\u624d\u4f1a\u6d88\u5931\uff0c\u4e0d\u53d7\u65ad\u7535\u5f71\u54cd\uff1b Flash (as in Flash Memory) "},{"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
\u53ea\u8bfb\u5185\u5b58 Read Only Memory (ROM) \u53ef\u7f16\u7a0b\u9635\u5217\u903b\u8f91 Programmable Array Logic (PAL\u24c7) \u53ef\u7f16\u7a0b\u903b\u8f91\u9635\u5217 Programmable Logic Array (PLA) Complex Programmable Logic Device (CPLD) or Field-Programmable Gate Array(FPGA) \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
\u5982\u679c\u6ca1\u6709\u7279\u6b8a\u7b26\u53f7\uff0c\u5219\u8868\u793a\u8fd9\u4e2a\u4ea4\u53c9\u70b9 is not connected \uff1b
\u5982\u679c\u6709\u4e00\u4e2a \u274c\uff0c\u5219\u8868\u793a\u8fd9\u4e2a\u4ea4\u53c9\u70b9 is connected and programmable\uff1b
\u5982\u679c\u53ea\u6709\u4e00\u4e2a\u52a0\u7c97\u7684\u70b9\uff0c\u5219\u8868\u793a\u8fd9\u4e2a\u4ea4\u53c9\u70b9 is connected but not programmable\uff1b
\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
\u4e0b\u6587\u5bf9\u4e8e\u51e0\u79cd\u5e38\u89c1\u7684\u53ef\u7f16\u7a0b\u6280\u672f\u7684\u4ecb\u7ecd\u6bd4\u8f83\u6709\u9650\uff0c\u6570\u903b\u8bfe\u5802\u4e0a\u4e5f\u53ea\u662f\u4e00\u5e26\u800c\u8fc7\u3002\u5982\u679c\u6709\u673a\u4f1a\u7684\u8bdd\uff0c\u5176\u5b9e\u9700\u8981\u66f4\u8fdb\u4e00\u6b65\u659f\u914c\u8fd9\u4e9b\u5185\u5bb9\u3002 "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#rom","title":"ROM","text":"\\(2^N\\times M\\) 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
PAL \u4e0d\u9700\u8981\u50cf ROM \u90a3\u6837\u5217\u51fa\u6240\u6709\u6700\u5c0f\u9879\uff0c\u8fd9\u5c31\u610f\u5473\u7740 PAL \u662f\u53ef\u4f18\u5316\u7684\uff0c\u56e0\u6b64 PAL \u5728\u5f88\u591a\u65f6\u5019\u6bd4 ROM \u66f4\u9ad8\u6548\u66f4\u8282\u7ea6\uff1b \u4f46\u4e5f\u6b63\u662f\u56e0\u4e3a\u5b83\u4e0d\u50cf ROM \u90a3\u6837\u80fd\u591f\u679a\u4e3e\u6700\u5c0f\u9879\u6765\u5b9e\u73b0\u6240\u6709\u903b\u8f91\uff0cPAL \u4e0d\u4e00\u5b9a\u80fd\u8868\u8fbe\u6240\u6709\u903b\u8f91\uff1b \u4e00\u79cd\u6539\u8fdb\u65b9\u6cd5\u662f\uff0c\u901a\u8fc7\u5c06\u4e00\u4e2a\u65e2\u6709\u7684 PAL \u8f93\u51fa\u5f53\u4f5c\u8f93\u5165\uff0c\u8f93\u5165\u5230\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\u4e2d\uff0c\u6765\u5f25\u8865\u9879\u4e0d\u8db3\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u4e0b\u56fe\u7684 \\(W\\)\uff1b 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
PLA \u5177\u6709\u53ef\u7f16\u7a0b\u7684 AND \u548c OR\uff0c\u56e0\u6b64\u6bd4\u8d77 PAL \u548c ROM \u66f4\u5177\u7075\u6d3b\u6027\uff1b \u4f46\u662f\u7075\u6d3b\u6027\u5e26\u6765\u7684\u5f0a\u7aef\u662f\uff0cPLA \u7684\u4f18\u5316\u4f1a\u53d8\u5f97\u66f4\u52a0\u590d\u6742\uff0c\u8fd9\u5bf9\u4e8e\u4f18\u5316\u8f6f\u4ef6\u6709\u7740\u66f4\u9ad8\u7684\u8981\u6c42\uff1b \u6b64\u5916\uff0cPLA \u548c PAL \u5177\u6709\u4e00\u6837\u7684\u95ee\u9898\uff0c\u5c31\u662f\u65e0\u6cd5\u8868\u8fbe\u6240\u6709\u903b\u8f91\u51fd\u6570\uff1b \u4e00\u79cd\u6539\u8fdb\u65b9\u6cd5\u662f\uff0c\u5728\u8f93\u51fa\u7684\u65f6\u5019\u518d\u505a\u4e00\u6b21\u5f02\u6216\uff08\u4e0d\u7528\u975e\u95e8\u4f53\u73b0\u4e86\u53ef\u7f16\u7a0b\u7684\u601d\u60f3\uff09\uff0c\u4ee5\u4ea7\u751f\u65b0\u7684\u9879\uff0c\u6765\u5f25\u8865\u9879\u4e0d\u8db3\u7684\u95ee\u9898\uff1b eg PLA \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a
"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#lookup-tables","title":"Lookup Tables","text":"\u8003\u8bd5\u987b\u77e5
Lookup Tables \u8fd9\u90e8\u5206\u5185\u5bb9\u4e0d\u4f5c\u8003\u8bd5\u8981\u6c42\u3002
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
CLB(Configurable Logic Block) \u5927\u91cf\u5b58\u50a8 LUT
SM(Switch Matrix) \u53ef\u7f16\u7a0b\u7684\u4ea4\u6362\u77e9\u9635 IOB(Input & Output Block) \u53ef\u7f16\u7a0b\u7684\u8f93\u5165\u8f93\u51fa\u5355\u5143 "},{"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
Flexibility: \u8bc4\u4f30\u4e00\u6761\u7ebf\u53ef\u4ee5\u8fde\u63a5\u5230\u591a\u5c11\u7ebf\uff1b Topology: \u54ea\u4e9b\u7ebf\u53ef\u4ee5\u88ab\u8fde\u63a5\u5230\uff1b 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
Decoder
s & OR
gates \u5c06\u8bd1\u7801\u51fa\u6765\u7684\u9700\u8981\u7684\u76ee\u6807\u7ec4\u5408\u90fd OR
\u5728\u4e00\u8d77\uff1b MUX
s \u901a\u8fc7\u591a\u8def\u9009\u62e9\u5668\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\uff1b ROM
s PAL
s PLA
s LUT
s "},{"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
\u8bbe\u8ba1\u5177\u6709\u4ee3\u8868\u6027\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b \u590d\u5236\u5e76\u8fde\u63a5\u82e5\u5e72\u4e2a\u8fd9\u6837\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b \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
\u5bc4\u5b58\u5668\u7684\u529f\u80fd\u51fd\u6570\uff1b \u4e00\u822c\u6307\u5bc4\u5b58\u5668\u4f20\u8f93\uff1b \u63a7\u5236\u4fe1\u53f7\u6784\u6210\uff1b \u6709\u54ea\u4e9b\u63a7\u5236\u4fe1\u53f7\u3001\u662f\u5426\u7f16\u7801\u3001\u5982\u4f55\u51b3\u5b9a\u662f\u5426 Load \u7b49\uff1b \u5bc4\u5b58\u5668\u7684\u8f93\u5165\u6570\u636e\uff1b \u6709\u54ea\u4e9b\u8f93\u5165\u6570\u636e\u3001\u662f\u5426\u9700\u8981\u9884\u5148\u5904\u7406\u7b49\uff1b \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
\u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u96c6\u5408\uff1b \u5bf9\u4e8e\u6570\u636e\u7684\u64cd\u4f5c\uff1b \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
\u4f18\u52bf\uff1a \u7535\u8def\u66f4\u7cbe\u7b80\uff0c\u6210\u672c\u66f4\u4f4e\uff0c\u968f\u7740\u5bc4\u5b58\u5668\u589e\u52a0\u8fd9\u4e2a\u7279\u70b9\u66f4\u52a0\u660e\u663e\uff1b \u52a3\u52bf\uff1a \u540c\u4e00\u65f6\u523b\u5185\u603b\u7ebf\u53ea\u80fd\u4f20\u8f93\u4e00\u4e2a\u6570\u636e\uff0c\u5373\u53ea\u6709\u4e00\u4e2a\u6570\u636e\u6e90(source)\uff1b \u540c\u4e00\u65f6\u949f\u5468\u671f\u5185\u53ea\u6709\u4e00\u4e2a\u6570\u636e\u80fd\u4f20\u8f93\u5230\u522b\u7684\u5730\u65b9\uff0c\u4f8b\u5982\u4ea4\u6362\u64cd\u4f5c\u5c31\u9700\u8981\u81f3\u5c11\u4e24\u4e2a\u65f6\u949f\u624d\u80fd\u5b9e\u73b0\uff1b \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
\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 \u7b97\u672f\uff0carithmetic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u7b97\u672f\u8fd0\u7b97\u64cd\u4f5c\uff1b \u903b\u8f91\uff0clogic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u903b\u8f91\u8fd0\u7b97\u64cd\u4f5c\uff1b \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
\u7eb5\u5411\u89c2\u5bdf\u53f3\u4fa7\u7684\u56db\u4e2a FF
\uff0c\u53ef\u4ee5\u53d1\u73b0\u57fa\u672c\u4e0a\u5c31\u662f\u4e32\u884c\u79fb\u4f4d\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u5176\u8f93\u5165\u4e0d\u518d\u662f\u76f4\u63a5\u4ece\u4e0a\u4e00\u4e2a FF
\u90a3\u8fb9\u62ff\u6765\u7684\uff1b \u56db\u4e2a FF
\u7684\u8f93\u5165\u662f\u7c7b\u4f3c\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4ec5\u5173\u6ce8\u6700\u4e0a\u9762\u7684\u90a3\u4e09\u4e2a\u4e0e\u95e8\u548c\u4e00\u4e2a\u6216\u95e8\uff0c\u8868\u793a\u6570\u636e\u8f93\u5165\u6709\u4e09\u4e2a\u53ef\u80fd\u7684\u6765\u6e90\uff1b \u7b2c\u4e00\u4e2a\u4e0e\u95e8\uff0c\\(F_i=Shift \\cdot SI\\)\uff08\u5bf9\u4e8e\u540e\u9762\u51e0\u4e2a FF
\uff0c\u5219\u662f \\(F_i=Shift \\cdot FF_{i-1}\\)\uff09\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6b64\u65f6\u7535\u8def\u7684\u884c\u4e3a\u4e0e\u4e32\u884c\u79fb\u4f4d\u5b9e\u73b0\u4e00\u81f4\uff1b \u5373 \\(Shift\\) \u4e3a 1
\u65f6\uff0cSHR
\u8868\u73b0\u4e3a\u300c\u6bcf\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6b21\u79fb\u4f4d\u300d\uff1b \u7b2c\u4e8c\u4e2a\u4e0e\u95e8\uff0c\\(F_i=\\overline{Shift} \\cdot Load \\cdot D_i\\)\uff0c\u6b64\u65f6\u7535\u8def\u7684\u884c\u4e3a\u662f\u4f7f\u7528\u6bd4\u7279\u5411\u91cf\u5bf9\u6bcf\u4e00\u4e2a FF
\u8d4b\u503c\uff0c\u5373\u5e76\u884c\u8f7d\u5165\uff1b \u5373 \\(\\overline{Shift} \\cdot Load\\) \u4e3a 1
\u65f6\uff0cSHR
\u8868\u73b0\u4e3a\u300c\u5e76\u884c\u8f7d\u5165\u300d\uff1b \u7b2c\u4e09\u4e2a\u4e0e\u95e8\uff0c\\(F_i=\\overline{Shift} \\cdot \\overline{Load} \\cdot Q_i\\)\uff0c\u6b64\u65f6\u7535\u8def\u7684\u884c\u4e3a\u662f\u4fdd\u6301\u4e0a\u4e00\u5468\u671f\u7684\u7ed3\u679c\uff1b \u5373 \\(\\overline{Shift} \\cdot \\overline{Load}\\) \u4e3a 1
\u65f6\uff0cSHR
\u8868\u73b0\u4e3a\u300c\u4fdd\u6301\u300d\uff1b \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
\u4e0a\u56fe\u4e2d\uff0c\u4e0b\u4e00\u4e2a FF
\u7684\u65f6\u949f\u6765\u81ea\u4e8e\u4e0a\u4e00\u4e2a FF
\u7684\u8f93\u51fa\u53d6\u53cd\uff0c\u4e5f\u5c31\u662f\u5bf9\u4e8e\u4e0a\u5347\u6cbf\u89e6\u53d1\u7684 FF
\u6765\u8bf4\uff0c\u4e0b\u4e00\u4e2a FF
\u4f1a\u5728\u4e0a\u4e00\u4e2a FF
\u7684\u8f93\u51fa\u4ece 1
\u5230 0
\u65f6\u81ea\u53cd\uff0c\u6240\u4ee5\u662f\u6b63\u5411\u8ba1\u65f6(Upward Counting)\uff1b \u53cd\u4e4b\uff0c\u5982\u679c\u4e0b\u4e00\u4e2a FF
\u7684\u65f6\u949f\u6765\u81ea\u4e8e\u4e0a\u4e00\u4e2a FF
\u7684\u76f4\u63a5\u8f93\u51fa\uff0c\u4e5f\u5c31\u662f\u5bf9\u4e8e\u4e0a\u5347\u6cbf\u89e6\u53d1\u7684 FF
\u6765\u8bf4\uff0c\u4e0b\u4e00\u4e2a FF
\u4f1a\u5728\u4e0a\u4e00\u4e2a FF
\u7684\u8f93\u51fa\u4ece 0
\u5230 1
\u65f6\u81ea\u53cd\uff0c\u6240\u4ee5\u662f\u9006\u5411\u8f93\u51fa(Downward Counting)\uff1b
\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
\u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a(specification)\uff1b \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 \u8bbe\u8ba1\u72b6\u6001\u673a\uff1b \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 \u7ed8\u5236\u6846\u56fe(block diagram)\uff1b \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u548c\u6570\u636e\u901a\u8def\u7684\u5bc4\u5b58\u5668\u4f20\u8f93\u903b\u8f91(register transfer logic)\uff1b \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u903b\u8f91(control unit logic)\uff1b \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 4504 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \u5206\u949f
\u5f15\u5165
\u672c\u7ae0\u5185\u5bb9\u4e3b\u8981\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u91cd\u70b9\uff1a
\u5185\u5b58\u4e0e RAM \u7684\u57fa\u672c\u6982\u5ff5\uff0c\u7406\u89e3\u5982\u4f55\u901a\u8fc7\u5730\u5740\u6765\u8bbf\u95ee\u5185\u5b58\uff0c\u5e76\u5206\u6790\u8bfb\u5199\u64cd\u4f5c\u7684\u65f6\u5e8f\uff1b \u4ee5 SRAM \u4e3a\u4f8b\uff0c\u4ece cell -> bit slice -> 2-dimensional cell arrays -> chip \u9010\u6b65\u642d\u5efa\u8d77\u4e00\u4e2a\u5927\u578b\u5185\u5b58\uff1b DRAM \u7684\u539f\u7406\uff0c\u7406\u89e3\u5982\u4f55\u901a\u8fc7\u65f6\u949f\u540c\u6b65\u548c burst read \u6765\u63d0\u9ad8 DRAM \u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff1b "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u5185\u5b58","title":"\u5185\u5b58","text":"\u5185\u5b58(Memory)\u7531\u4e00\u7cfb\u5217\u5b58\u50a8\u5355\u5143\u4e0e\u76f8\u5e94\u7684\u903b\u8f91\u7535\u8def\u7ec4\u6210\uff0c\u8ba1\u7b97\u673a\u4e2d\u7684\u5185\u5b58\u5305\u62ec\u4e24\u7c7b\uff1a\u968f\u673a\u8bbf\u95ee\u5185\u5b58(Random-Access Memory)\u4e0e\u53ea\u8bfb\u5185\u5b58(Read-Only Memory)\u3002\u8fd9\u4e24\u7c7b\u5185\u5b58\u90fd\u9700\u8981\u501f\u52a9\u5730\u5740(address)\u6765\u5b9e\u73b0\u5bf9\u6570\u636e\u7684\u8bfb\u4e0e\u5199\u3002\u5176\u4e2d\uff0c\u53ea\u8bfb\u5185\u5b58\uff08\u5373 ROM\uff09\u7684\u76f8\u5173\u77e5\u8bc6\u5df2\u7ecf\u5728 \u7b2c\u4e94\u7ae0#ROM \u4e2d\u63d0\u53ca\uff0c\u672c\u7ae0\u4e3b\u8981\u8ba8\u8bba\u968f\u673a\u8bbf\u95ee\u5185\u5b58\uff08\u5373 RAM\uff09\u3002
\u4e3a\u4ec0\u4e48 RAM \u662f\u968f\u673a\u8bbf\u95ee\uff1f
\u5f53\u8bfb\u8005\u770b\u5230\u201c\u968f\u673a\u8bbf\u95ee\u201d\u8fd9\u4e2a\u8bcd\uff0c\u6216\u8bb8\u4f1a\u611f\u5230\u7591\u60d1\uff1a\u96be\u9053\u8fd8\u6709\u4ec0\u4e48\u5185\u5b58\u662f\u4e0d\u53ef\u4ee5\u968f\u673a\u8bbf\u95ee\u7684\u5417\uff1f
\u4e8b\u5b9e\u4e0a\uff0c\u968f\u673a\u8bbf\u95ee\u7684\u542b\u4e49\u662f\uff0c\u5185\u5b58\u4e2d\u6570\u636e\u7684\u8bfb\u53d6\u548c\u5199\u5165\u64cd\u4f5c\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0e\u8fd9\u4e9b\u6570\u636e\u6240\u5728\u7684\u4f4d\u7f6e\u65e0\u5173\u3002\u76f8\u5bf9\u5730\uff0c\u4e32\u884c\u8bbf\u95ee\u5185\u5b58(Serial Memory)\u4e2d\uff0c\u5bf9\u4e0d\u540c\u4f4d\u7f6e\u7684\u6570\u636e\u8fdb\u884c\u8bfb\u548c\u5199\u64cd\u4f5c\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0d\u4e00\u5b9a\u662f\u76f8\u540c\u7684\uff0c\u786c\u76d8\u5c31\u662f\u4e00\u79cd\u5178\u578b\u7684\u4e32\u884c\u8bbf\u95ee\u5185\u5b58\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u7ec4\u7ec7\u67b6\u6784","title":"\u7ec4\u7ec7\u67b6\u6784","text":"\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784(Memory Organization)\u53cd\u6620\u4e86\u5185\u5b58\u4e2d\u7684\u6570\u636e\u662f\u5982\u4f55\u901a\u8fc7\u5730\u5740\u88ab\u8bbf\u95ee\u7684\u3002
\u6570\u636e\u7c7b\u578b
\u8ba1\u7b97\u673a\u4e2d\u5e38\u7528\u7684\u6570\u636e\u7c7b\u578b\u4e3b\u8981\u6709\u4e09\u79cd\uff1a
\u4f4d(bit)\uff1a\u6700\u5c0f\u5355\u5143 \u5b57\u8282(byte)\uff1a8 \u4e2a\u8fde\u7eed\u7684 bit \u5b57(word)\uff1a\u7279\u5b9a\u6570\u91cf\u7684\u8fde\u7eed\u7684 bit\uff0c\u7531\u5185\u5b58\u7c7b\u578b\u51b3\u5b9a\uff0c\u4f20\u7edf\u610f\u4e49\u4e0a 1 word = 4 bytes \u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u6570\u7ec4\uff0c\u6570\u7ec4\u4e2d\u4ee5 word \u4e3a\u5355\u4f4d\u5b58\u50a8\u5185\u5b58\u6570\u636e\uff0c\u5730\u5740\u5219\u4f5c\u4e3a\u6570\u7ec4\u7684\u7d22\u5f15\uff0c\u7528\u4e8e\u8bbf\u95ee\u5185\u5b58\u4e2d\u7684\u6570\u636e\u3002\u6362\u8a00\u4e4b\uff0c\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u53ef\u4ee5\u63cf\u8ff0\u4e3a\u7528\u591a\u5c11\u6570\u91cf\u7684\u5730\u5740\u6765\u8bbf\u95ee\u591a\u5c11\u6570\u91cf\u7684\u6570\u636e\u3002\u4e0b\u9762\u7ed9\u51fa\u51e0\u4e2a\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u7684\u5177\u4f53\u4f8b\u5b50\uff1a
\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\u793a\u4f8b
Digital Equipment Corporation PDP-8\uff1a \u7528 12-bit \u7684\u5730\u5740\u6765\u8bbf\u95ee \\(2^{12}\\) \u4e2a 12-bit words\uff1b IBM 360\uff1a \u7528 24-bit \u7684\u5730\u5740\u6765\u8bbf\u95ee \\(2^{24}\\) \u4e2a 8-bit bytes\uff0c\u6216\u8005\u8bf4 \\(2^{22}\\) \u4e2a 32-bit words\uff1b Intel 8080\uff1a \u7528 16-bit \u7684\u5730\u5740\u6765\u8bbf\u95ee \\(2^{16}\\) \u4e2a 8-bit bytes\uff1b \u8fd8\u6709\u4e00\u4e2a\u66f4\u52a0\u5177\u4f53\u7684\u7ec4\u7ec7\u67b6\u6784\u5206\u6790\uff0c\u8be6\u89c1 #SDRAM\u3002
\u8003\u8651\u4e00\u4e2a \\(2^k\\times n\\) \u7684\u5185\u5b58\u5355\u5143\uff0c\\(k\\) \u8868\u793a\u5730\u5740\u7684\u4f4d\u5bbd\uff0c\\(n\\) \u8868\u793a word \u7684\u4f4d\u5bbd\u3002\u8fd9\u4e2a\u5185\u5b58\u5355\u5143\u7684\u793a\u610f\u56fe\u5982\u4e0b\uff0c\u5176\u4e2d\uff0c\\(k\\)-bit \u7684\u5730\u5740\u7ecf\u8fc7 decoder \u8bd1\u7801\uff0c\u5f97\u5230\u7684 \\(2^k\\) \u4e2a\u8f93\u51fa\u5206\u522b\u4e0e \\(2^k\\) \u4e2a word \u5f62\u6210\u552f\u4e00\u786e\u5b9a\u7684\u8fde\u63a5\uff0c\u4ece\u800c\u8fbe\u5230\u5bfb\u5740\u7684\u76ee\u7684\uff1b\u6bcf\u4e2a word \u7531 \\(n\\)-bit \u7ec4\u6210\uff0c\u6240\u4ee5\u8f93\u5165\u548c\u8f93\u51fa\u4e5f\u90fd\u662f \\(n\\)-bit \u7684\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"\u5185\u5b58\u4e2d\u6700\u57fa\u672c\u7684\u64cd\u4f5c\u5c31\u662f\u8bfb(read)\u64cd\u4f5c\u548c\u5199(write)\u64cd\u4f5c\uff0c\u4e00\u4e9b\u7279\u6b8a\u7684\u5185\u5b58\uff08\u6bd4\u5982 Flash\uff09\u8fd8\u6709\u64e6(erase)\u64cd\u4f5c\u3002
\u4e0a\u56fe\u5c55\u793a\u4e86\u4e00\u4e2a\u89c4\u8303\u7684\u8bfb\u64cd\u4f5c\uff0c\u5176\u4e2d\uff1a
Memory enable \u662f\u4f7f\u80fd\u4fe1\u53f7\uff0c\u9ad8\u7535\u5e73\u4ee3\u8868\u5185\u5b58\u4f7f\u80fd\uff0c\u53ef\u4ee5\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff1b R/W \u662f\u8bfb\u5199\u4fe1\u53f7\uff0c\u9ad8\u7535\u5e73\u8868\u793a\u8bfb\u64cd\u4f5c\uff0c\u4f4e\u7535\u5e73\u8868\u793a\u5199\u64cd\u4f5c\uff1b
\u4e0a\u56fe\u5c55\u793a\u4e86\u4e00\u4e2a\u89c4\u8303\u7684\u5199\u64cd\u4f5c\uff0c\u6ce8\u610f\u5230\uff1a
\u5730\u5740\u5fc5\u987b\u5728 R/W \u4fe1\u53f7\u4e0b\u964d\u6cbf\u4e4b\u524d\u786e\u5b9a\u4e0b\u6765\uff08\u79f0\u4e3a valid\uff09\uff0c\u5e76\u5728 R/W \u4fe1\u53f7\u4e0a\u5347\u6cbf\u4e4b\u540e\u518d\u6d88\u5931\uff0c\u8fd9\u662f\u4e3a\u4e86\u786e\u4fdd\u5199\u64cd\u4f5c\u53d1\u751f\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5730\u5740\u59cb\u7ec8\u662f\u786e\u5b9a\u4e14\u4e0d\u53d8\u7684\uff0c\u4ee5\u514d\u5199\u64cd\u4f5c\u7834\u574f\u5230\u5176\u4ed6\u5730\u5740\u7684\u6570\u636e\uff1b \u5f85\u5199\u5165\u7684\u65b0\u6570\u636e\u5fc5\u987b\u5728 R/W \u4fe1\u53f7\u4e0a\u5347\u6cbf\u4e4b\u540e\u518d\u6d88\u5931\uff0c\u4ee5\u514d\u5199\u5165\u5931\u8d25\uff1b "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u9759\u6001\u5185\u5b58","title":"\u9759\u6001\u5185\u5b58","text":"RAM \u53ef\u4ee5\u5206\u4e3a\u9759\u6001\u5185\u5b58(Static RAM, or SRAM)\u548c\u52a8\u6001\u5185\u5b58(Dynamic RAM, or DRAM)\u4e24\u79cd\uff1a
SRAM\uff1a\u6570\u636e\u5b58\u50a8\u5728\u9501\u5b58\u5668(latch)\u4e2d\uff1b DRAM\uff1a\u6570\u636e\u5b58\u50a8\u5728\u7535\u5bb9\u4e2d\uff0c\u4ee5\u7535\u8377\u91cf\u7684\u5f62\u5f0f\u5b58\u50a8\uff1b "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#sram-cell","title":"SRAM Cell","text":"\u9996\u5148\u8003\u8651\u4e00\u4e2a SRAM \u7684\u6700\u5c0f\u5355\u5143\uff0c\u5373 SRAM Cell\uff08\u4e0b\u9762\u7b80\u79f0\u4e3a RAM Cell\uff09\uff0c\u7528\u4e8e\u5b58\u50a8 1-bit \u7684\u4fe1\u606f\u3002
\u8fd9\u4e2a RAM Cell \u662f\u901a\u8fc7\u4e00\u4e2a SR Latch \u5b9e\u73b0\u7684\uff0c\u5f53 select \u7f6e 0
\u65f6\uff0c\u8868\u793a RAM Cell \u672a\u88ab\u4f7f\u80fd\uff0c\u9501\u5b58\u5668\u4e2d\u7684\u6570\u636e\u5904\u4e8e\u4fdd\u6301\u72b6\u6001\uff0c\u8f93\u51fa\u6052\u4e3a 1
\uff1b\u5f53 select \u7f6e 1
\u65f6\uff0c\u9501\u5b58\u5668\u4e2d\u7684\u6570\u636e\u7531 B \u7aef\u7684\u8f93\u5165\u4fe1\u53f7\u51b3\u5b9a\uff0cC \u7aef\u8f93\u51fa\u9501\u5b58\u5668\u4e2d\u5b58\u50a8\u7684\u6570\u636e\u3002\u4f46\u662f\uff0c\u73b0\u5728\u8fd9\u6837\u4e00\u4e2a\u7b80\u5355\u7684 RAM Cell \u8fd8\u65e0\u6cd5\u5b9e\u73b0\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u8bfb\u548c\u5199\u64cd\u4f5c\uff0c\u8fd8\u9700\u8981\u4e00\u4e9b\u5916\u90e8\u903b\u8f91\u7535\u8def\uff0c\u8be6\u89c1 #SRAM Bit Slice\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#sram-bit-slice","title":"SRAM Bit Slice","text":"\u5229\u7528\u82e5\u5e72\u4e2a RAM Cell\uff0c\u4ee5\u53ca\u4e00\u4e9b\u903b\u8f91\u7535\u8def\uff0c\u53ef\u4ee5\u8bbe\u8ba1\u51fa SRAM Bit Slice\u3002
\u4e0b\u56fe\u4e2d\uff1a
\u5f53 bit select \u7f6e 1
\u65f6\uff0c\u8868\u793a\u8fd9\u4e2a SRAM Bit Slice \u88ab\u4f7f\u80fd\uff0c\u53ef\u4ee5\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff1b word select \u7528\u4e8e\u9009\u62e9\u5bf9\u54ea\u4e00\u4e2a cell \u8fdb\u884c\u64cd\u4f5c\uff0c\u5728\u540c\u4e00\u4e2a slice \u4e2d\uff0c\u6bcf\u6b21\u53ea\u6709\u4e00\u4e2a cell \u80fd\u88ab word select \u4f7f\u80fd\uff0c\u5373\u6bcf\u6b21\u53ea\u80fd\u5bf9\u4e00\u4e2a cell \u8fdb\u884c\u64cd\u4f5c\uff1b \u6362\u8a00\u4e4b\uff0c\\(2^n\\) \u6761 word select \u4e2d\uff0c\u53ea\u80fd\u5b58\u5728\u81f3\u591a\u4e00\u4e2a\u7f6e 1
\uff0c\u5176\u4f59\u5747\u7f6e 0
\uff1b \u8bfb\u548c\u5199\u64cd\u4f5c\u7684\u903b\u8f91\u7535\u8def\u5982\u56fe\u6240\u793a\uff0c\u5f53 R/W \u7f6e 0
\u65f6\uff0c\u8868\u793a\u6b63\u5728\u8fdb\u884c\u5199\u64cd\u4f5c\uff1b \u5f53\u5199\u64cd\u4f5c\u6b63\u5e38\u8fdb\u884c\u65f6\uff0c\u8f93\u5165\u8fdb\u6765\u7684\u65b0\u6570\u636e\u5176\u5b9e\u88ab\u603b\u7ebf\u8f93\u9001\u7ed9\u4e86\u6240\u6709\u7684 cell\uff0c\u4f46\u53ea\u6709\u88ab word select \u4f7f\u80fd\u7684\u90a3\u4e2a cell \u624d\u53ef\u4ee5\u5199\u5165\u8fd9\u4e2a\u65b0\u6570\u636e\uff1b \u6ce8\u610f\uff0c\u5bf9\u4e8e\u8fd9\u5e45\u56fe\u800c\u8a00\uff0c\u4e0d\u8bba R/W \u7f6e\u4efb\u4f55\u503c\uff0c\u8bfb\u64cd\u4f5c\u90fd\u5728\u6b63\u5e38\u8fdb\u884c\uff1b\u5982\u679c\u4e0d\u60f3\u8fdb\u884c\u8bfb\u64cd\u4f5c\uff0c\u53ef\u4ee5\u5c06 word select \u5168\u90e8\u7f6e 0
\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u91cd\u5408\u9009\u62e9","title":"\u91cd\u5408\u9009\u62e9","text":"\u968f\u7740\u5185\u5b58\u7684\u6269\u5927\uff0c\u4e00\u4e2a slice \u4e2d\u7684 cell \u6570\u91cf\u4e0d\u65ad\u6269\u5927\uff0c\u5bfb\u5740\u6240\u9700\u8981\u7684 decoder \u7684\u4f4d\u5bbd\u4e0d\u65ad\u6269\u5927\uff0c\u8f93\u5165\u603b\u7ebf\u7684\u6247\u51fa\u4e5f\u5728\u4e0d\u65ad\u6269\u5927\u3002\u4f46\u662f\uff0cdecoder \u7684\u4f4d\u5bbd\u548c\u8f93\u5165\u603b\u7ebf\u7684\u6247\u51fa\u90fd\u662f\u6709\u9650\u7684\uff0c\u5f88\u5bb9\u6613\u5236\u7ea6\u5185\u5b58\u7684\u6269\u5927\u3002\u4e0b\u56fe\u4e3a\u4e00\u4e2a \\(16\\times 1\\) RAM\uff1a
\u4e00\u79cd\u6709\u6548\u7684\u89e3\u51b3\u65b9\u6cd5\u662f\u91cd\u5408\u9009\u62e9(coincident selection)\uff0c\u5373\u4f7f\u7528\u4e24\u4e2a decoder\uff0c\u5206\u522b\u8d1f\u8d23\u6a2a\u5411\u548c\u7eb5\u5411\u7684\u5bfb\u5740\u3002\u4e0b\u9762\u4f7f\u7528 \\(4\\times 4\\) \u91cd\u5408\u9009\u62e9\u7684 RAM \u9635\u5217(\\(4\\times 4\\) RAM Cell Array)\u6765\u5b9e\u73b0 \\(16\\times 1\\) RAM\uff1a
\\(16\\times 1\\) RAM using \\(4\\times 4\\) RAM Cell Array
\u4e0b\u56fe\u4f7f\u7528\u4e24\u4e2a 2-to-4 decoder \u66ff\u4ee3\u4e86 \\(16\\times 1\\) RAM \u4e2d\u7684 4-to-16 decoder\uff1b \u5730\u5740\u4f7f\u7528 4-bit \u8868\u793a\uff0c\u5176\u4e2d 2-bit \u88ab\u5206\u7ed9\u4e86 column decoder\uff0c\u7528\u4e8e\u9009\u62e9\u8bbf\u95ee\u54ea\u4e2a slice\uff1b\u53e6\u5916 2-bit \u88ab\u5206\u7ed9\u4e86 row decoder\uff0c\u7528\u4e8e\u9009\u62e9\u8bbf\u95ee slice \u4e2d\u7684\u54ea\u4e00\u884c cell\uff1b
\\(16\\times 1\\) RAM \u4e2d\u7684 word \u662f 1-bit \u7684\uff0c\u6240\u4ee5\u56fe\u4e2d\u6bcf\u4e2a cell \u90fd\u8868\u793a\u4e00\u4e2a word\u3002\u800c\u5728\u8bbe\u8ba1\u5177\u6709\u66f4\u5927\u4f4d\u5bbd\u7684 RAM \u65f6\uff0c\u91cd\u5408\u9009\u62e9\u4f1a\u7a0d\u6709\u4e0d\u540c\uff0c\u6ce8\u610f\u89c2\u5bdf\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\u548c\u4e0a\u9762\u4f8b\u5b50\u7684\u533a\u522b\uff1a
\\(8\\times 2\\) RAM using \\(4\\times 4\\) RAM Cell Array
\u5730\u5740\u4f7f\u7528 3-bit \u8868\u793a\uff0c\u5176\u4e2d 1-bit \u88ab\u5206\u7ed9\u4e86 column decoder\uff0c\u53e6\u5916 2-bit \u5206\u88ab\u5206\u7ed9\u4e86 row decoder\uff1b \u8f93\u5165\u548c\u8f93\u51fa\u90fd\u662f 2-bit \u7684\uff0cinput 0 \u88ab\u4f20\u8f93\u7ed9\u4e86\u7b2c\u4e00\u3001\u4e09\u4e2a slice\uff0cinput 1 \u88ab\u4f20\u8f93\u7ed9\u4e86\u7b2c\u4e8c\u3001\u56db\u4e2a slice\uff1b word \u662f 2-bit \u7684\uff0c\u7531\u4e24\u4e2a cell \u6765\u8868\u793a\u3002\u56fe\u4e2d\uff0ccell 0 \u548c cell 1 \u8868\u793a\u4e00\u4e2a word\uff0ccell 2 \u548c cell 3 \u8868\u793a\u4e00\u4e2a word\uff0ccell 4 \u548c cell 5 \u8868\u793a\u4e00\u4e2a word\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u5b57\u6269\u5c55\u4e0e\u4f4d\u6269\u5c55","title":"\u5b57\u6269\u5c55\u4e0e\u4f4d\u6269\u5c55","text":"\u5185\u5b58\u7684\u5bb9\u91cf\u7531 word \u7684\u6570\u91cf\u548c\u4f4d\u5bbd\uff08\u5373\u6bcf\u4e2a word \u7531\u591a\u5c11\u4e2a bit \u7ec4\u6210\uff09\u51b3\u5b9a\u3002\u8981\u60f3\u6269\u5c55\u5185\u5b58\uff0c\u53ef\u4ee5\u4ece word \u7684\u6570\u91cf\u548c\u4f4d\u5bbd\u8fd9\u4e24\u4e2a\u89d2\u5ea6\u8fdb\u884c\uff1a
\u5b57\u6269\u5c55\uff08\u6269\u5c55 word \u7684\u6570\u91cf\uff09\uff1a\u5c06\u591a\u4e2a RAM \u201c\u5e76\u8054\u201d\uff0c\u5e76\u76f8\u5e94\u5730\u6269\u5c55\u5730\u5740\u7684\u4f4d\u5bbd\uff1b \u4f4d\u6269\u5c55\uff08\u6269\u5c55 word \u7684\u4f4d\u5bbd\uff09\uff1a\u5c06\u591a\u4e2a RAM \u201c\u4e32\u8054\u201d\uff0c\u5e76\u76f8\u5e94\u5730\u6269\u5c55\u8f93\u5165\u8f93\u51fa\u7684\u4f4d\u5bbd\uff1b \u4e0b\u9762\u8003\u8651\u7528 \\(64\\text{K}\\times 8\\) RAM \u6269\u5c55\u5f97\u5230 \\(256\\text{K}\\times 8\\) RAM \u548c \\(64\\text{K}\\times 16\\) RAM\uff1a
\u5b57\u6269\u5c55\uff1a\\(256\\text{K}\\times 8\\) RAM
\u8f93\u5165\u4fe1\u53f7\u548c 0-15 \u4f4d\u5730\u5740\u901a\u8fc7\u603b\u7ebf\u4f20\u9012\u7ed9\u6bcf\u4e2a \\(64\\text{K}\\times 8\\) RAM\uff0c\u8f93\u51fa\u4fe1\u53f7\u901a\u8fc7\u603b\u7ebf\u4ece\u6bcf\u4e2a \\(64\\text{K}\\times 8\\) RAM \u4e2d\u901a\u8fc7\u4e09\u6001\u95e8\u63a5\u51fa\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a RAM \u7684\u201c\u5e76\u8054\u201d\uff1b \u901a\u8fc7 16-17 \u4f4d\u5730\u5740\u6765\u9009\u62e9\u8bbf\u95ee\u54ea\u4e2a \\(64\\text{K}\\times 8\\) RAM\uff0c\u518d\u6839\u636e 0-15 \u4f4d\u5730\u5740\u6765\u9009\u62e9\u8bbf\u95ee\u8be5 RAM \u4e2d\u7684\u5177\u4f53\u54ea\u4e2a word\uff1b \u56fe\u4e2d\u7684\u5012\u4e09\u89d2\u8868\u793a\u8f93\u51fa\u662f\u7531\u4e00\u4e2a\u4e09\u6001\u95e8\u63a5\u51fa\u7684\uff08\u53c2\u89c1 #\u91cd\u5408\u9009\u62e9\uff09\uff1b
\u4f4d\u6269\u5c55\uff1a\\(64\\text{K}\\times 16\\) RAM
16-bit \u8f93\u5165\u4fe1\u53f7\u5206\u6210\u4e24\u8def 8-bit\uff0c\u5206\u522b\u4f20\u8f93\u7ed9\u4e24\u4e2a \\(64\\text{K}\\times 8\\) RAM\uff0c16-bit \u8f93\u51fa\u4fe1\u53f7\u7531\u4e24\u4e2a \\(64\\text{K}\\times 8\\) RAM \u5206\u522b\u4ea7\u751f\u7684 8-bit \u7ec4\u6210\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a RAM \u7684\u201c\u4e32\u8054\u201d\uff1b \u5730\u5740\u4e0d\u53d8\uff0c\u76f8\u5f53\u4e8e\u540c\u65f6\u9009\u4e2d\u8fd9\u4e24\u4e2a \\(64\\text{K}\\times 8\\) RAM \u4e2d\u7684\u67d0\u4e24\u4e2a word\uff0c\u800c\u8fd9\u4e24\u4e2a 8-bit word \u7b49\u4ef7\u5730\u8868\u793a\u4e86\u4e00\u4e2a 16-bit word\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#\u52a8\u6001\u5185\u5b58","title":"\u52a8\u6001\u5185\u5b58","text":"\u524d\u9762\u63d0\u5230\uff0c\u52a8\u6001\u5185\u5b58\u662f\u5229\u7528\u7535\u5bb9\u4e2d\u7684\u7535\u8377\u6765\u5b58\u50a8\u6570\u636e\u7684\u3002\u7531\u4e8e\u7535\u5bb9\u4f1a\u6162\u6162\u6f0f\u7535(leak)\uff0c\u6240\u4ee5\u9700\u8981\u5b9a\u671f\u5237\u65b0(refresh)\u7535\u5bb9\uff08\u9488\u5bf9\u5b58\u50a8\u7740\u9ad8\u7535\u5e73\u6570\u636e\u7684\u7535\u5bb9\u800c\u8a00\uff0c\u5b58\u50a8\u7740\u4f4e\u7535\u5e73\u6570\u636e\u7684\u7535\u5bb9\u672c\u8eab\u5c31\u662f\u4f4e\u7535\u8377\u91cf\u7684\uff0c\u4e0d\u9700\u8981\u5237\u65b0\uff09\uff0c\u624d\u80fd\u786e\u4fdd\u5b58\u50a8\u7740\u7684\u6570\u636e\u4e0d\u4f1a\u5931\u6548\uff0c\u56e0\u6b64\u8fd9\u79cd\u5185\u5b58\u662f\u52a8\u6001\u7684\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#dram-cell","title":"DRAM Cell","text":"DRAM Cell \u548c SRAM Cell \u57fa\u672c\u7c7b\u4f3c\uff0c\u4e5f\u62e5\u6709\u4e00\u4e2a select \u4f7f\u80fd\u7aef\u548c\u4e00\u7ec4\u8f93\u5165\u8f93\u51fa\u7aef\uff0c\u552f\u4e00\u7684\u533a\u522b\u5728\u4e8e\u5b58\u50a8\u5668\u7684\u4e0d\u540c\u3002SRAM Cell \u4f7f\u7528\u4e00\u4e2a\u9501\u5b58\u5668\u6765\u5b58\u50a8\u6570\u636e\uff0c\u800c DRAM Cell \u4f7f\u7528\u4e00\u4e2a\u7535\u5bb9\u548c\u4e00\u4e2a\u6676\u4f53\u7ba1\u6765\u5b58\u50a8\u6570\u636e\u3002
\u6676\u4f53\u7ba1 T \u53ef\u4ee5\u89c6\u4f5c\u4e00\u4e2a\u5f00\u5173\uff0c\u7528\u6765\u8fde\u63a5\u5916\u90e8\u8f93\u5165\u4fe1\u53f7 B \u548c\u7535\u5bb9 C\uff1b \u7535\u5bb9 C \u7528\u4e8e\u5b58\u50a8\u6570\u636e\uff0c\u5f53\u7535\u5bb9\u4e3a\u6ee1\uff08\u7535\u8377\u91cf\u9ad8\u4e8e\u67d0\u4e00\u9608\u503c\uff09\u65f6\u8868\u793a\u9ad8\u7535\u5e73\uff08\u5982\u56fe (b)\uff09\uff0c\u5f53\u7535\u5bb9\u4e3a\u7a7a\uff08\u7535\u8377\u91cf\u4f4e\u4e8e\u67d0\u4e00\u9608\u503c\uff09\u65f6\u8868\u793a\u4f4e\u7535\u5e73\uff08\u5982\u56fe \u00a9\uff09\uff1b \u4e0b\u9762\u8003\u8651 DRAM Cell \u7684\u8bfb\u64cd\u4f5c\u548c\u5199\u64cd\u4f5c\uff1a
\u5199\u64cd\u4f5c\uff1a\u5982\u56fe (d) \u5199\u5165\u9ad8\u7535\u5e73\uff0c\u5982\u56fe (e) \u5199\u5165\u4f4e\u7535\u5e73\uff1b \u8bfb\u64cd\u4f5c\uff1a\u5982\u56fe (f) \u8bfb\u53d6\u9ad8\u7535\u5e73\uff0c\u5f53 T \u6253\u5f00\u65f6\uff0c\u5de6\u4fa7\u8f93\u5165\u7aef\u53ef\u4ee5\u76d1\u6d4b\u5230\u4e00\u4e2a\u7535\u8377\u91cf\u7684\u5347\u9ad8\uff0c\u8fd9\u5c31\u4ee3\u8868\u8bfb\u53d6\u5230\u7684\u6570\u636e\u662f\u9ad8\u7535\u5e73\uff1b\u800c\u76f8\u5e94\u5730\uff0c\u53f3\u4fa7\u7535\u5bb9\u4e2d\u7684\u7535\u8377\u91cf\u4e5f\u6709\u6240\u964d\u4f4e\uff1b\u5982\u56fe (g) \u8bfb\u53d6\u4f4e\u7535\u5e73\u540c\u7406\uff1b \u4e0d\u96be\u53d1\u73b0\uff0c\u6bcf\u6b21\u8bfb\u64cd\u4f5c\u90fd\u4f1a\u7a0d\u5fae\u6539\u53d8\u7535\u5bb9\u4e2d\u5b58\u50a8\u7684\u7535\u8377\u91cf\uff0c\u56e0\u6b64\u5bf9\u4e8e\u6bcf\u4e00\u6b21\u8bfb\u64cd\u4f5c\uff0c\u90fd\u8981\u8fdb\u884c\u590d\u4f4d(restore)\uff0c\u4e5f\u5c31\u662f\u5c06\u7535\u5bb9\u4e2d\u7684\u7535\u8377\u91cf\u6062\u590d\u5230\u8bfb\u64cd\u4f5c\u4e4b\u524d\u7684\u6c34\u5e73\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#dram-bit-slice","title":"DRAM Bit Slice","text":"DRAM Bit Slice \u548c SRAM Bit Slice \u57fa\u672c\u7c7b\u4f3c\uff0c\u524d\u8005\u7684\u8f93\u51fa\u7aef\u4f1a\u989d\u5916\u52a0\u4e00\u4e2a\u653e\u5927\u5668\uff0c\u4ece\u800c\u5c06\u7535\u8377\u91cf\u5fae\u5c0f\u7684\u53d8\u5316\u8f6c\u5316\u6210\u6570\u5b57\u4fe1\u53f7\u3002\u867d\u7136\u7535\u8def\u7ed3\u6784\u5e76\u6ca1\u6709\u672c\u8d28\u5dee\u522b\uff0c\u4f46\u4e24\u8005\u5b9e\u9645\u7684\u7535\u8def\u5f00\u9500\u5374\u533a\u522b\u5f88\u5927\u3002DRAM cell \u542b\u6709\u4e00\u4e2a\u7535\u5bb9\u548c\u4e00\u4e2a\u6676\u4f53\u7ba1\uff0c\u800c SRAM cell \u542b\u6709\u516d\u4e2a\u6676\u4f53\u7ba1\uff0c\u6240\u4ee5 DRAM \u7684\u6bcf bit \u7684\u5f00\u9500\u663e\u8457\u4f4e\u4e8e SRAM\uff0c\u8fd9\u4e5f\u662f DRAM \u5728\u5927\u578b\u5185\u5b58\u4e2d\u88ab\u66f4\u52a0\u5e7f\u6cdb\u7684\u5e94\u7528\u7684\u539f\u56e0\u3002
DRAM \u5e38\u7528\u4e8e\u5927\u578b\u5185\u5b58\uff0c\u800c\u5728\u8fd9\u4e9b\u5185\u5b58\u4e2d\uff0c\u5730\u5740\u4f1a\u53d8\u5f97\u5f88\u957f\uff08\u8d85\u8fc7 20-bit\uff09\uff0c\u4ee5\u81f3\u4e8e DRAM \u7684\u5f15\u811a\u6570\u91cf\u4e0d\u8db3\u4ee5\u4e00\u6b21\u6027\u63a5\u6536\u8fd9\u4e48\u957f\u7684\u5730\u5740\u3002\u89e3\u51b3\u65b9\u6cd5\u662f\u5c06\u5730\u5740\u5206\u6210\u4e24\u90e8\u5206\u4e32\u884c\u7684\u8f93\u5165\u5230 DRAM \u91cc\u6765\uff0c\u9996\u5148\u662f row address\uff0c\u7136\u540e\u7d27\u63a5\u7740\u662f column address\uff08\u6ce8\u610f\u5230\u8fd9\u91cc\u4e5f\u6709\u91cd\u5408\u9009\u62e9\u7684\u601d\u60f3\uff09\u3002
\u4e0b\u56fe\u4e2d\uff1a
\u7531\u4e8e\u5730\u5740\u88ab\u5206\u6210\u4e24\u90e8\u5206\u4e32\u884c\u8f93\u5165\u5230 DRAM \u91cc\u6765\uff0c\u56e0\u6b64\u9700\u8981\u7528 register \u5206\u522b\u5b58\u50a8 row address \u548c column address\uff1b RAS(Row Address Strobe) \u548c CAS(Column Address Strobe) \u7528\u4f5c register \u7684\u8f7d\u5165\u4fe1\u53f7\uff0c\u7f6e 0
\u8868\u793a\u8f7d\u5165\uff1b \u5bf9\u4e8e\u5199\u64cd\u4f5c\uff0c\u5f53 row address \u9009\u4e2d\u67d0\u4e00\u884c\u7684\u65f6\u5019\uff0c\u9664\u4e86\u88ab\u5199\u5165\u7684 cell \u4e4b\u5916\uff0c\u8fd9\u4e00\u884c\u4e2d\u7684\u5176\u4ed6 cell \u4e5f\u88ab\u4f7f\u80fd\u5e76\u8fdb\u884c\u4e86 restore \u64cd\u4f5c\uff1b \u5bf9\u4e8e\u8bfb\u64cd\u4f5c\uff0c\u5f53 row address \u9009\u4e2d\u67d0\u4e00\u884c\u7684\u65f6\u5019\uff0c\u5305\u62ec\u8981\u8bfb\u53d6\u7684 cell \u5728\u5185\uff0c\u8fd9\u4e00\u884c\u4e2d\u7684\u6240\u6709 cell \u90fd\u88ab\u4f7f\u80fd\u5e76\u8fdb\u884c\u4e86 restore \u64cd\u4f5c\uff1b refresh controller \u548c refresh counter \u6a21\u5757\u8d1f\u8d23\u5b9e\u73b0 refresh \u529f\u80fd\uff1b DRAM \u6846\u56fe\u8bfb\u5199\u65f6\u5e8f\u56fe
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#dram-\u7c7b\u578b","title":"DRAM \u7c7b\u578b","text":"\u4e3a\u4e86\u8ffd\u6c42\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff0c\u4e00\u4e9b\u7279\u6b8a\u7c7b\u578b\u7684 DRAM \u4e5f\u88ab\u8bbe\u8ba1\u51fa\u6765\u3002\u8fd9\u91cc\u4e3b\u8981\u4ecb\u7ecd\u4ee5\u4e0b\u4e09\u79cd DRAM\uff1a
Synchronous DRAM\uff08\u5373 SDRAM\uff09\uff1a\u4e0d\u540c\u4e8e DRAM \u7684\u5f02\u6b65\uff0cSDRAM \u589e\u52a0\u4e86\u4e00\u4e2a\u65f6\u949f\u6765\u5b9e\u73b0\u540c\u6b65\uff1b Double-data-rate synchronous DRAM\uff08\u5373 DDR SDRAM\uff09\uff1a\u4e0e SDRAM \u57fa\u672c\u4e00\u81f4\uff0c\u4f46\u540c\u65f6\u5229\u7528\u4e86\u65f6\u949f\u7684\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\u6765\u8f93\u51fa\u6570\u636e\uff1b Rambus\u24c7 DRAM\uff08\u5373 RDRAM\uff09\uff1a\u4e13\u5229\u6280\u672f\uff0c\u7528\u76f8\u5bf9\u66f4\u7a84\u7684\u603b\u7ebf\u6765\u5b9e\u73b0\u6781\u9ad8\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff1b \u5f15\u5165
\u4e3a\u4e86\u89e3\u91ca\u8fd9\u4e9b DRAM \u662f\u5982\u4f55\u8fbe\u5230\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\u7684\uff0c\u8fd9\u91cc\u6709\u5fc5\u8981\u5148\u4ecb\u7ecd\u4e24\u4e2a\u4e8b\u5b9e\uff1a
\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0c\u7edd\u5927\u591a\u6570\u65f6\u5019\u4ece DRAM \u4e2d\u8bfb\u53d6\u7684\u6570\u636e\u5e76\u6ca1\u6709\u76f4\u63a5\u4f20\u8f93\u7ed9 CPU\uff0c\u800c\u662f\u88ab\u5b58\u653e\u5728\u4e86\u9ad8\u901f\u7f13\u5b58(cache)\u4e2d\u3002\u9ad8\u901f\u7f13\u5b58\u4ece DRAM \u4e2d\u8bfb\u53d6\u6570\u636e\u7684\u65f6\u5019\uff0c\u603b\u662f\u4e00\u6b21\u6027\u8bfb\u53d6\u4e00\u4e32\u76f8\u90bb\u7684\u5b57\u8282\uff0c\u8fd9\u88ab\u79f0\u4e3a\u7206\u53d1\u6a21\u5f0f\u8bfb\u53d6\u6570\u636e(burst read)\u3002\u5bf9\u4e8e burst read \u800c\u8a00\uff0c\u5f71\u54cd\u901f\u5ea6\u7684\u6700\u91cd\u8981\u56e0\u7d20\u4e0d\u518d\u662f\u5bfb\u5740\u7684\u65f6\u95f4\uff0c\u800c\u662f\u8fde\u7eed\u8bfb\u53d6\u76f8\u90bb\u5b57\u8282\u7684\u65f6\u95f4\uff1b DRAM \u7684\u7279\u6027\u662f\uff0c\u6bcf\u5f53 row address \u9009\u4e2d\u67d0\u4e00\u884c\u65f6\uff0c\u8fd9\u4e00\u884c\u5185\u7684\u6240\u6709 cell \u90fd\u88ab\u4f7f\u80fd\uff0c\u5373\u90fd\u662f\u53ef\u8bbf\u95ee\u7684\uff1b \u6240\u4ee5\uff0cDRAM \u7684\u8fd9\u79cd\u7279\u6027\uff0c\u4f7f\u5f97\u5b83\u975e\u5e38\u9002\u5408 burst read\uff0c\u5373\u8fde\u7eed\u8bfb\u53d6\u540c\u4e00\u884c\u4e2d\u7684\u76f8\u90bb\u5b57\u8282\u3002\u5229\u7528 burst read\uff0cDRAM \u53ef\u4ee5\u8fbe\u5230\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#sdram","title":"SDRAM","text":"\u4e0b\u56fe\u662f\u4e00\u4e2a \\(16\\text{MB}\\) SDRAM\uff1a
\u4e3a\u4e86\u9002\u914d SDRAM \u7684\u540c\u6b65\u7279\u6027\uff0c\u5730\u5740\u3001\u8f93\u5165\u3001\u8f93\u51fa\u90fd\u9700\u8981\u4f7f\u7528\u5bc4\u5b58\u5668\uff1b column address counter \u662f SDRAM \u7684\u6838\u5fc3\u6a21\u5757\uff0c\u540e\u9762\u6211\u4eec\u5c06\u4ecb\u7ecd\u5b83\u662f\u5982\u4f55\u5de5\u4f5c\u7684\uff1b
\u5206\u6790\u4e00\u4e0b\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\uff01
\u4e3a\u4e86\u540e\u7eed\u5185\u5bb9\u7684\u4ecb\u7ecd\uff0c\u8fd9\u91cc\u6709\u5fc5\u8981\u5148\u5206\u6790\u4e00\u4e0b\u8fd9\u4e2a \\(16\\text{MB}\\) SDRAM \u7684\u5185\u5b58\u7ec4\u7ec7\u67b6\u6784\uff1a
\\(16\\text{MB}\\) \u5185\u5b58\u610f\u5473\u7740\u4e00\u5171\u6709 \\(2^{27}\\) bits\uff0c\u8003\u8651\u91cd\u5408\u9009\u62e9\uff08\u4f7f\u884c\u5217\u6570\u5c3d\u53ef\u80fd\u63a5\u8fd1\uff09\uff0c\u4e0d\u59a8\u4ee4\u884c\u6570\u4e3a \\(2^{13}\\)\uff0c\u5217\u6570\u4e3a \\(2^{14}\\)\uff0c\u663e\u7136 row address \u662f 13-bit \u7684\uff08column address \u5e76\u4e0d\u662f 14-bit\uff0c\u89c1\u4e0b\u6587\uff09\uff1b \u6ce8\u610f\u5230\u8f93\u5165\u8f93\u51fa\u7684\u4f4d\u5bbd\u662f 8-bit\uff0c\u6240\u4ee5\u8fd9\u4e2a\u5185\u5b58\u7684\u5b57\u957f\u662f 8-bit\uff1b\u6240\u4ee5 column \u7684\u5bfb\u5740\u662f\u4ee5 8-bit\uff08\u5373 1-word\uff09\u4e3a\u5355\u4f4d\u7684\uff0c\u5171\u6709 \\(2^{14}/8=2^{11}\\) \u4e2a word\uff0ccolumn address \u662f 11-bit \u7684\uff1b \u6240\u4ee5\u5730\u5740\u7684\u603b\u957f\u662f 13+11=24 bits\uff0c\u8fd9\u4e5f\u6070\u6070\u5bf9\u5e94\u4e86\u8fd9\u4e2a \\(16\\text{MB}\\) \u5185\u5b58\u4e2d\u7684 \\(2^{24}\\) \u4e2a 8-bit \u7684 word\uff1b \u4e0b\u9762\u4ecb\u7ecd SDRAM \u662f\u5982\u4f55\u5b9e\u73b0\u8bfb\u64cd\u4f5c\u7684\u3002
\u9996\u5148\u8fd9\u4e2a SDRAM \u63a5\u6536\u5230 row address\uff0c\u5e76\u5c06 row address \u6307\u5411\u7684\u90a3\u4e00\u884c\u7684\u5168\u90e8 \\(2^{11}\\) \u4e2a word \u5168\u90e8\u8bfb\u53d6\u51fa\u6765\uff0c\u5b58\u653e\u5230 I/O logic \u91cc\uff0c\u8fd9\u4e00\u64cd\u4f5c\u9700\u8981\u5386\u65f6\u82e5\u5e72\u4e2a\u65f6\u949f\u5468\u671f\uff08\u4e0b\u56fe\u4e2d\u4e3a 4 \u4e2a\u65f6\u949f\u5468\u671f\uff09\uff1b \u7136\u540e\u8fd9\u4e2a SDRAM \u63a5\u6536\u5230 column address\uff0c\u5e76\u6309\u7167 column address \u7684\u6307\u793a\u4ece I/O logic \u4e2d\u8bfb\u53d6\u6570\u636e\u5e76\u8f93\u51fa\uff0c\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u8f93\u51fa\u4e00\u4e2a word\uff1b \u6ce8\u610f\uff0cSDRAM \u901a\u5e38\u4e0d\u4f1a\u53ea\u8bfb\u53d6\u5e76\u8f93\u51fa\u4e00\u4e2a word\uff0c\u800c\u662f\u4f1a\u8bfb\u53d6\u5e76\u8f93\u51fa\u4e00\u4e32\u8fde\u7eed\u7684 word\uff08\u5373 burst read\uff09\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u7531 column address counter \u6765\u5b9e\u73b0\uff1bcolumn address counter \u4e2d\u6709\u4e00\u4e2a\u5173\u952e\u53c2\u6570\uff0c\u7528\u4e8e\u8868\u793a\u4e00\u6b21 burst read \u9700\u8981\u8bfb\u51fa\u591a\u5c11\u4e2a word\uff0c\u79f0\u4e3a busrt length\uff08\u4e0b\u56fe\u4e2d\u7684 burst length \u662f 4\uff09\uff1b \u5047\u8bbe \\(t_{CLK}\\) \u4e3a 7.5 ns\uff0c\u5219 \\(t_{RC}\\) \u4e3a 60ns\uff088 \u4e2a\u65f6\u949f\u5468\u671f\uff09\uff0c\u90a3\u4e48\u8fd9\u4e2a SDRAM \u7684\u5185\u5b58\u5e26\u5bbd(memory bandwidth) \u4e3a 4 words / 60 ns = 66.67 MB/s\uff1b
\u4e3a\u4ec0\u4e48\u56fe\u4e2d\u7684\u8f93\u51fa\u987a\u5e8f\u662f B1,B2,B3,B0\uff1f \u5728\u8fd9\u4e2a\u60c5\u5f62\u4e2d\uff0cCPU \u8bf7\u6c42\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6 B1 \u8fd9\u4e2a\u6570\u636e\uff0c\u6240\u4ee5 row address \u548c column address \u5206\u522b\u8868\u793a B1 \u6240\u5904\u7684\u884c\u548c\u5217\u3002\u7136\u800c\u4e8b\u5b9e\u4e0a cache \u4e0d\u4ec5\u4ec5\u4f1a\u8bfb\u53d6\u51fa B1\uff0c\u8fd8\u4f1a\u628a\u4e0e B1 \u76f8\u90bb\u7684\u82e5\u5e72\u4e2a\u6570\u636e\u4e00\u8d77\u8bfb\u53d6\u51fa\u6765\uff08\u5373 burst read\uff09\u3002
\u5728 SDRAM \u4e2d\uff0ccolumn address counter \u8d1f\u8d23\u5b9e\u73b0\u8fd9\u4e2a burst read\uff0c\u5b83\u6839\u636e\u7ed9\u5b9a\u7684 column addre \u548c burst length\uff0c\u5728 I/O logic \u4e2d\u5148\u627e\u5230 B1\uff0c\u5e76\u7ee7\u7eed\u8bfb\u53d6 B1 \u540e\u9762\u7684\u6570\u636e\uff0c\u76f4\u5230\u8bfb\u53d6\u51fa burst length \u4e2a\u6570\u636e\uff08\u8fd9\u4e2a\u60c5\u5f62\u4e2d\uff0c\u5373 4 \u4e2a\u6570\u636e\uff09\u3002
\u5728\u8fd9\u91cc\uff0cB1 \u8868\u793a\u8fd9\u4e2a word \u4ee5 01
\u7ed3\u5c3e\uff0c\u6240\u4ee5\u63a5\u4e0b\u53bb\u7684 3 \u4e2a\u8f93\u51fa\u662f B2\uff08\u4ee5 10
\u7ed3\u5c3e\uff09\u3001B3\uff08\u4ee5 11
\u7ed3\u5c3e\uff09\u3001B0\uff08\u4ee5 00
\u7ed3\u5c3e\uff09\uff0c\u6ce8\u610f\u5230\u8fd9\u5176\u5b9e\u662f\u4e00\u4e2a\u6a21 4 \u7684\u5faa\u73af\u5e8f\u5217\uff0c\u9664\u4e86\u6700\u540e\u4e24\u4f4d\u4e0d\u540c\uff0c\u5176\u4f59\u4f4d\u90fd\u662f\u76f8\u540c\u7684\u3002
\u6362\u8a00\u4e4b\uff0cB1 \u624d\u662f CPU \u8bf7\u6c42\u8bbf\u95ee\u7684\u6570\u636e\uff0c\u800c B2\u3001B3\u3001B0 \u90fd\u662f cache \u81ea\u4f5c\u4e3b\u5f20\u4ece SDRAM \u4e2d burst read \u51fa\u6765\u7684\u3002\u4f46\u8fd9\u6837\u7684\u81ea\u4f5c\u4e3b\u5f20\u662f\u6709\u610f\u4e49\u7684\uff0c\u56e0\u4e3a\u5927\u591a\u6570\u65f6\u5019\uff0cCPU \u8bbf\u95ee\u4e86 B1 \u540e\uff0c\u4f1a\u7ee7\u7eed\u8bbf\u95ee\u7d27\u968f\u5176\u540e\u7684\u6570\u636e\uff0c\u6240\u4ee5\u4ece\u7ed3\u679c\u4e0a\u770b\uff0cSDRAM \u5b9e\u73b0\u4e86\u66f4\u5feb\u7684\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#ddr-sdram","title":"DDR SDRAM","text":"DDR SDRAM \u548c SDRAM \u57fa\u672c\u4e00\u81f4\uff0c\u4f46\u5b83\u4ece I/O logic \u4e2d\u8bfb\u53d6\u6570\u636e\u5e76\u8f93\u51fa\u7684\u901f\u5ea6\u662f SDRAM \u7684\u4e24\u500d\uff08\u5185\u5b58\u5e26\u5bbd\u4e3a 133.33 MB/s\uff09\uff0c\u56e0\u4e3a\u5b83\u5728\u65f6\u949f\u7684\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\u90fd\u4f1a\u8f93\u51fa\u3002\u4ee5\u4e0a\u9762\u5206\u6790 SDRAM \u7684\u90a3\u5e45\u56fe\u4e3a\u4f8b\uff0c\u540c\u6837\u7684\u65f6\u95f4 \\(t_{RC}\\)\uff0cSDRAM \u53ef\u4ee5\u8f93\u51fa 4 \u4e2a word\uff0c\u800c DDR SDRAM \u53ef\u4ee5\u8f93\u51fa 8 \u4e2a word\u3002
"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#rdram","title":"RDRAM","text":"\u63d0\u9192
RDRAM \u76f8\u5173\u5185\u5bb9\u8bfe\u5802\u4e0a\u53ea\u662f\u4e00\u5e26\u800c\u8fc7\uff0c\u8fd9\u91cc\u4e5f\u4ec5\u5217\u51fa\u4e00\u4e9b\u6982\u5ff5\uff0c\u6709\u4e2a\u5370\u8c61\u5373\u53ef\u3002
RDRAM \u4f7f\u7528 packet-based bus \u6765\u4f20\u8f93\u6570\u636e\uff0c\u4e5f\u5c31\u662f\u8bf4\u6570\u636e\u4ee5 packet \u7684\u5f62\u5f0f\u88ab\u5c01\u88c5\u8d77\u6765\u5e76\u8fdb\u884c\u4f20\u8f93\u3002
\u603b\u7ebf bus \u4e2d\u5305\u542b\uff1a 3-bit row address bus 5-bit column address bus 16-bit \u6216 18-bit data bus \u603b\u7ebf bus \u662f\u540c\u6b65\u7684\uff0c\u4e14\u5728\u65f6\u949f\u4e0a\u5347\u6cbf\u548c\u4e0b\u964d\u6cbf\u90fd\u80fd\u54cd\u5e94\uff1b \u6570\u636e\u5305 packet \u5386\u65f6 4 \u4e2a\u65f6\u949f\u5468\u671f\u6765\u5b9e\u73b0 8 \u6b21\u4f20\u8f93\uff0c\u6240\u4ee5\u6bcf\u4e2a packet \u4e2d\u5305\u542b\uff1a 24-bit row address packet 40-bit column address packet 128-bit \u6216 144-bit data packet RDRAM \u5229\u7528 multiple memory bank \u6280\u672f\uff0c\u4f7f\u5f97\u4e0d\u540c row address \u7684\u6570\u636e\u53ef\u4ee5\u88ab\u5e76\u884c\u5730\u8bbf\u95ee\u5230(concurrent memory accesses)\uff1b RDRAM \u901a\u8fc7\u590d\u6742\u7684\u7535\u8def\u8bbe\u8ba1\uff0c\u53ef\u4ee5\u5c06\u65f6\u949f\u9891\u7387\u53d8\u5f97\u5f88\u9ad8\uff0c\u4ece\u800c\u5927\u5927\u63d0\u9ad8\u5185\u5b58\u8bbf\u95ee\u901f\u5ea6\uff1b "},{"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
Lecture 1 | Introduction Lecture 2 | Image Formation Lecture 3 | Image Processing Lecture 4 | Model Fitting and Optimization Lecture 5 | Feature Matching and Motion Estimation Lecture 6 | Image Alignment and Stitching Lecture 7 | Structure From Motion Lecture 8 | Depth Estimation & 3D Reconstruction Lecture 9 | Deep Learning Lecture 10 | Recognition Lecture 11 | 3D Deep Learning Lecture 12 | Computational Photography 1 Lecture 13 | Computational Photography 2 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":" \u4e09\u7ef4\u91cd\u5efa / Reconstruction \u56fe\u50cf\u7406\u89e3 / Understanding \u56fe\u50cf\u5408\u6210 / Synthesis "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u5e94\u7528","title":"CV \u7684\u5e94\u7528","text":"Application Examples Face Reconstruction and Recognition Face ID Vending Machine with Face Detection DeepFake Augmented reality Factory Automation Vision Inspection Optical Character Recognition(OCR) Video Surveillance Human Computer Interaction: Optical Mouse Human Computer Interaction: Motion Sensing Games Visual Effects (VFX) Digital Human VR Tour Visual Localization and Navigation Autonomous Navigation: Space Exploration Robot Perception Autonomous Driving Augmented Reality Free Viewpoint Video Medical Image Analysis ...... "},{"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
CVPR (Computer Vision and Pattern Recognition) ICCV (International Conference on Computer Vision) ECCV (European Conference on Computer Vision) \u56fe\u5f62\u5b66\u76f8\u5173\u7684\u9876\u4f1a
"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u8bfe\u7a0b\u6982\u8ff0","title":"\u8bfe\u7a0b\u6982\u8ff0","text":" \u8bfe\u7a0b\u76ee\u6807 \u5b66\u4e60\u8ba1\u7b97\u673a\u89c6\u89c9\u76f8\u5173\u7684\u77e5\u8bc6 \u5b66\u4f1a\u300c\u7528\u6570\u5b66\u63cf\u8ff0\u4e0e\u89e3\u51b3\u95ee\u9898\u300d Linear Algebra
/ Optimization
/ Geometry
\u8bfe\u7a0b\u8d44\u6e90
\u6559\u6750\uff1ahttps://szeliski.org/Book/ \u8bfe\u7a0b\u8ba1\u5212
Basics. (Lec.02 \u2013 Lec.04) Reconstruction. (Lec.05 \u2013 Lec.09) Understanding. (Lec.10 \u2013 Lec.12) Synthesis. (Lec. 13 \u2013 Lec.14) Note
\u4f5c\u4e3a\u540e\u7eed\u8bfe\u7a0b\u7684\u57fa\u7840\uff0c\u9700\u8981\u590d\u4e60\u7ebf\u6027\u4ee3\u6570\u7684\u76f8\u5173\u77e5\u8bc6\uff0c\u5b83\u5c06\u8d2f\u7a7f\u6574\u4e2a\u8bfe\u7a0b\uff1b \u9700\u8981\u719f\u6089\u6d89\u53ca\u7684\u8bcd\u6c47\uff0c\u4e4b\u540e\u4f1a\u82e5\u5e72\u6b21\u63d0\u5230\uff1b "},{"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
\u4ee3\u6570\u4e0a\uff0c\u7ed3\u679c\u5411\u91cf\u7684\u6bcf\u4e00\u9879\u76f8\u5f53\u4e8e\u539f\u5411\u91cf\u7684\u4e00\u4e2a\u52a0\u6743\u6c42\u548c\uff1b \u51e0\u4f55\u4e0a\uff0c\u7ed3\u679c\u5411\u91cf\u76f8\u5f53\u4e8e\u539f\u5411\u91cf\u505a\u51e0\u4f55\u53d8\u6362\u5f97\u5230\u7684\u65b0\u5411\u91cf\uff1b \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
\u90a3\u4e48\u53cd\u8fc7\u6765\u7684\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7\u89c2\u5bdf\u67d0\u4e9b\u70b9\u5728\u53d8\u6362\u540e\u7684\u4f4d\u7f6e\u6765\u611f\u53d7\u8fd9\u4e2a\u201c\u53d8\u6362\u201d\u7684\u5177\u4f53\u5185\u5bb9\uff1b \u66f4\u7279\u522b\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u53d8\u6362\u77e9\u9635\uff08\u5de6\u4fa7\u77e9\u9635\uff09\u7684\u6bcf\u4e00\u5217\uff0c\u5c31\u76f8\u5f53\u4e8e\u5bf9\u5e94\u7684\u5355\u4f4d\u57fa\uff08\u4f8b\u5982\u7b2c \\(2\\) \u5217\u5bf9\u5e94 \\(\\vec{a}(0,1)\\) \u5411\u91cf\uff09\u7ecf\u8fc7\u8fd9\u4e2a\u53d8\u6362\uff08\u53f3\u4e58\u8fd9\u4e2a\u53d8\u6362\u77e9\u9635\uff09\u5f97\u5230\u7684\u7ed3\u679c\uff1b 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
\u5bf9\u4e8e\u53c2\u8003\u70b9 \\((1,0)\\)\uff0c\u7ecf\u8fc7\u65cb\u8f6c\u540e\u4f4d\u7f6e\u53d8\u5316\u4e3a \\((\\cos\\theta,-\\sin\\theta)\\)\uff1b \u5bf9\u4e8e\u53c2\u8003\u70b9 \\((0,1)\\)\uff0c\u7ecf\u8fc7\u65cb\u8f6c\u540e\u4f4d\u7f6e\u53d8\u5316\u4e3a \\((\\sin\\theta,\\cos\\theta)\\)\uff1b \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
\\(\\begin{bmatrix}x\\\\y\\\\k\\end{bmatrix}\\) \u7b49\u4ef7\u4e8e \\(\\begin{bmatrix}x/k\\\\y/k\\\\1\\end{bmatrix}\\)\uff0c\u5f53\u7136\uff0c\\(k\\not=0\\)\uff1b \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
\u5982\u56fe\uff0c\u6211\u4eec\u8981\u4ece\u56fe\u4e2d\u627e\u5230\u4e00\u4e2a\u65b9\u5411\uff0c\u4f7f\u5f97\u6240\u6709\u6570\u636e\u70b9\u5728\u8fd9\u4e2a\u65b9\u5411\u4e0a\u7684\u6295\u5f71\uff0c\u65b9\u5dee\u6700\u5927\uff08\u6362\u8a00\u4e4b\uff0c\u627e\u5230\u8fd9\u4e9b\u6570\u636e\u7684\u4e00\u4e2a\u201c\u65b9\u5411\u201d\uff09\uff1b \u8bb0\u6240\u6709\u6570\u636e\u70b9\u4e3a \\(A\\)\uff0c\u5219 \\(A^{T}A\\) \u4e3a\u534f\u65b9\u5dee\u77e9\u9635(covariance matrix)\uff0c\u5176\u7279\u5f81\u5411\u91cf\u4e2d\uff0c\u7279\u5f81\u503c\u6700\u5927\u7684\u90a3\u4e2a\uff0c\u5c31\u662f\u8fd9\u7ec4\u6570\u636e\u7684\u4e3b\u6210\u5206\uff1b "},{"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":" \u66dd\u5149\u65f6\u95f4(shutter speed) \u957f\u66dd\u5149\u65f6\u95f4\u62cd\u6444\u95ea\u7535\u7b49\uff1b \u6eda\u52a8\u5feb\u95e8\u6548\u5e94(rolling shutter effect) \u7528\u6eda\u52a8\u5feb\u95e8\u62cd\u6444\u4f8b\u5982\u98ce\u6247\u65f6\uff0c\u4f1a\u51fa\u73b0\u4e00\u4e9b\u56fe\u50cf\u53d8\u5f62\uff1b "},{"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
\u4e3b\u8981\u5206\u4e3a CMOS(Complimentary Metal-Oxide Semiconductor) \u548c CCD(Charge Coupled Device) \u4e24\u79cd\uff0c\u533a\u522b\u5728\u4e8e Electron to Voltage Conversion \u662f\u5426\u516c\u7528\uff1b \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
\u89c2\u6d4b\u89d2\u5ea6(viewer direction)\uff1a\\(\\vec v\\) \u8868\u9762\u6cd5\u5411\u91cf(surface normal)\uff1a\\(\\vec n\\) \u5165\u5c04\u5149\u65b9\u5411(light direction)\uff1a \\(\\vec l\\) \u663e\u7136\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u6761\u5149\u7ebf\u90fd\u9700\u8981\u7ed9\u51fa\uff1b \u8868\u9762\u6750\u8d28(surface parameters) \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
\\(L_d\\) \u4e3a\u6f2b\u53cd\u5c04\u5149\u5f3a(diffusely reflected light)\uff1b \\(k_d\\) \u4e3a\u6f2b\u53d1\u5c04\u7cfb\u6570(diffuse coefficient)\uff0c\u5982\u989c\u8272\uff1b \\(\\frac{I}{r^2}\\) \u4e3a \u5230\u8fbe\u7740\u8272\u70b9\u7684\u5149\u5f3a\uff1b \\(\\max(0,n \\cdot l)\\) \u4e3a \u7740\u8272\u70b9\u5438\u6536\u7684\u5149\u5f3a\uff1b \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
\\(L_s\\) \u4e3a\u9ad8\u5149\u53cd\u5c04\u5149\u5f3a(specularly reflected light)\uff1b \\(k_s\\) \u4e3a\u9ad8\u5149\u53d1\u5c04\u7cfb\u6570(specular coefficient)\uff1b \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
\u6211\u4eec\u4e00\u822c\u79f0 \\(f(y)\\) \u4e3a\u6ee4\u6ce2\u5668(filter)\uff0c\u8fd9\u662f\u56e0\u4e3a\u6211\u4eec\u672c\u8d28\u4e0a\u662f\u5728\u6c42 \\(g(x)\\) \u5728\u8fd9\u4e2a\u6ee4\u6ce2\u89c4\u5219\u4e0b\u52a0\u6743\u6c42\u5747\u503c\u751f\u6210\u7684\u65b0\u51fd\u6570\u3002 \u6240\u4ee5\uff0c\\(f(y)\\) \u4e00\u822c\u662f\u6839\u636e\u9700\u6c42\u800c\u51b3\u5b9a\u7684\u4e00\u4e9b\u7279\u6b8a\u51fd\u6570\uff0c\u6bd4\u5982\u9ad8\u65af\u51fd\u6570\u3001\u7279\u5b9a\u533a\u95f4\u5185\u7684\u5e38\u51fd\u6570\u7b49\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
Wiki \u4e2d\u6709\u66f4\u9177\u7684\u52a8\u56fe\uff1a\ud83d\udd17 \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
\u9ad8\u65af\u6ee4\u6ce2\u5668(\u4e2d\u5fc3\u6743\u91cd\u5927) \u9510\u5316\u6ee4\u6ce2\u5668 \u8fb9\u7f18\u68c0\u6d4b\u6ee4\u6ce2\u5668 \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 \u53cc\u8fb9\u6ee4\u6ce2\u5668 \u2026\u2026 "},{"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
\u4ece\u5e94\u7528\u6765\u8bb2\uff0c\u6a21\u7cca\u53ef\u4ee5\u7528\u6765\u505a\u4e00\u4e9b\u964d\u566a\u7684\u5de5\u4f5c\uff0c\u4e5f\u53ef\u4ee5\u7ed9\u56fe\u7247\u8425\u9020\u51fa\u4e00\u79cd\u5149\u6ed1\u7684\u8d28\u611f\uff1b \u800c\u9510\u5316\u53ef\u4ee5\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u589e\u52a0\u56fe\u7247\u7684\u6e05\u6670\u5ea6\u3002 "},{"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
\u5982\u679c\u5b9a\u4e49\u539f\u672c\u7684\u56fe\u50cf\u4e3a \\(I\\)\uff0c\u6a21\u7cca\u540e\u7684\u56fe\u50cf\u4e3a \\(I_b\\) \u5b9a\u4e49\u56fe\u50cf\u4e2d\u7684\u9ad8\u9891(high frequencies)\u4e3a I_h = I - I_b\uff1b \u5219\u9510\u5316\u7684\u56fe\u50cf \\(I_s = I + I_h\\)\uff1b \u5373\u6709 \\(2I = I_s + I_h\\)\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u53c8\u4e00\u4e2a\u7c7b\u4f3c\u4e8e\u4e92\u8865\u7684\u5173\u7cfb\uff1b \u800c\u8fd9\u91cc\u7684\u9ad8\u9891\u53ef\u4ee5\u7406\u89e3\u4e3a\u56fe\u50cf\u4e2d\u53d8\u5316\u6bd4\u8f83\u660e\u663e\u7684\u5730\u65b9\uff1b
"},{"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
Extracts horizontal gradients \\[ \\begin{bmatrix} -1 & 0 & 1 \\\\ -2 & 0 & 2 \\\\ -1 & 0 & 1 \\end{bmatrix} \\] Extracts vertical gradients \\[ \\begin{bmatrix} -1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ 1 & 2 & 1 \\end{bmatrix} \\] \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 Separable filter\uff0c\u53ef\u4ee5\u7528\u8fd9\u79cd\u65b9\u5f0f\u6765\u964d\u4f4e\u8ba1\u7b97\u91cf\uff1b \u53ea\u8981\u8868\u8fbe\u5f0f\u53ef\u4ee5\u5199\u6210\u4e24\u4e2a\u51fd\u6570\u76f8\u4e58\uff0c\u90a3\u57fa\u672c\u662f separable \u7684; \u6bd4\u5982\u9ad8\u65af\u77e9\u9635\u5c31\u53ef\u4ee5\u62c6\u6210\u8fd9\u6837\uff1a \\(f(i,j)=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2+j^2}{2\\sigma^2}}=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2}{2\\sigma^2}}\\cdot e^{-\\frac{j^2}{2\\sigma^2}}\\) \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
TODO: \u5177\u4f53\u89e3\u91ca\u6682\u65f6\u5495\u5495\u5495\u3002 \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
TODO: \u9700\u8981\u66f4\u8be6\u7ec6\u7684\u89e3\u91ca \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
\u8109\u51b2\u51fd\u6570\u7ecf\u8fc7 Fourier \u53d8\u6362\u540e\u4ecd\u7136\u662f\u68b3\u5f62\u7684\u3002
\u901a\u8fc7\u8109\u51b2\u51fd\u6570\uff0c\u6211\u4eec\u5c06\u7279\u5b9a\u9891\u7387\u7684\u5185\u5bb9\u7ed9\u8fc7\u6ee4\u4e0b\u6765\uff0c\u5c06\u4e00\u4e2a\u201c\u8fde\u7eed\u201d\u7684\u5185\u5bb9\u91c7\u6837\u4e3a\u4e86\u4e00\u4e2a\u201c\u79bb\u6563\u201d\u7684\u5185\u5bb9\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
TODO: \u7406\u89e3\u5e76\u89e3\u91ca\u8fd9\u4e00\u70b9\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
\u63d0\u9ad8\u91c7\u6837\u9891\u7387\uff1b \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
\u4e0d\u8fde\u7eed\uff08\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u5728\u6bcf\u4e24\u4e2a\u91c7\u6837\u70b9\u7684\u4e2d\u95f4\uff0c\u4f1a\u51fa\u73b0\u65ad\u70b9\uff09\uff1b \u4e0d\u5149\u6ed1\uff08\u65ad\u70b9\u5904\u65e0\u6cd5\u6c42\u5bfc\uff09\uff1b \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
\u8fde\u7eed\uff1b \u4e0d\u5149\u6ed1\uff08\u5728\u91c7\u6837\u70b9\u51fd\u6570\u4f1a\u51fa\u73b0\u7a81\u53d8\uff0c\u65e0\u6cd5\u6c42\u5bfc\uff09\uff1b \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
\u8fde\u7eed\uff1b \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
\u6211\u4eec\u5b9a\u4e49edge energy\\(E(I) = \\big|\\frac{\\partial I}{\\partial x}\\big| + \\big| \\frac{\\partial I}{\\partial y} \\big|\\)\uff1b \u627e\u5230\u4ece\u9876\u5230\u5e95\u7684\u4e00\u6761\u8054\u901a\uff08\u5c31\u662f\u4e0b\u4e00\u4e2a\u70b9\u80af\u5b9a\u4e0e\u4e0a\u4e00\u4e2a\u70b9\u76f8\u90bb\u6216\u8005\u5171\u540c\u9876\u70b9\uff09\u8def\u5f84\uff0c\u4f7f\u5f97 edge energy \u6700\u5c0f\uff1b \u7136\u540e\u5c06\u8fd9\u6761\u8def\u5f84\u4ece\u56fe\u7247\u4e2d\u5220\u9664\uff0c\u5c31\u597d\u50cf\u5c06\u8fd9\u4e2a\u88c2\u7f1d\u4e24\u8fb9\u62fc\u8d77\u6765\uff1b \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
\u76ee\u6807\u51fd\u6570\u4e3a \\(\\min\\limits_{X} || Y - F * X ||^2_2\\) \u7684\u4f18\u5316\u95ee\u9898\u3002 "},{"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
\u521d\u59cb\u5316\u8d77\u70b9\u5750\u6807 x\uff1b \u76f4\u5230 x \u6536\u655b\u5230\u6211\u4eec\u6ee1\u610f\u7684\u7a0b\u5ea6\u4e4b\u524d\uff1a \u8ba1\u7b97\u4e0b\u964d\u65b9\u5411 p\uff1b \u51b3\u5b9a\u4e0b\u964d\u6b65\u957f \u237a\uff1b \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
\u5982\u4f55\u786e\u5b9a\u4e0b\u964d\u65b9\u5411 \\(\\vec p\\) \u5982\u4f55\u786e\u5b9a\u4e0b\u964d\u6b65\u957f \u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18 "},{"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
first-order approximation: \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F \\Delta x\\) second-order approximation: \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F\\Delta x + \\frac{1}{2}\\Delta x^T H_F \\Delta x\\) \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
\u521d\u59cb\u5316 \\(\\alpha\\) \u4e3a\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u503c\uff1b \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
\u4f18\u70b9 \u5bb9\u6613\u5b9e\u73b0\uff1b \u5728\u8ddd\u79bb\u76ee\u6807\u70b9\u8f83\u8fdc\u65f6\u8868\u73b0\u826f\u597d\uff1b \u7f3a\u70b9 \u5728\u76ee\u6807\u70b9\u9644\u8fd1\u6536\u655b\u6bd4\u8f83\u6162\uff1b \u6d6a\u8d39\u4e86\u5927\u91cf\u7b97\u529b\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\\)
\u4f18\u70b9 \u5728\u76ee\u6807\u70b9\u9644\u8fd1\u4e0b\u964d\u901f\u5ea6\u76f8\u5bf9\u66f4\u5feb\uff1b \u7f3a\u70b9 Hessian matrix \u7684\u8ba1\u7b97\u9700\u8981\u76f8\u5f53\u7b97\u529b\uff0c\u751a\u81f3\u6709\u65f6\u5019\u65e0\u6cd5\u8ba1\u7b97\uff1b \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
\u4f18\u70b9 \u4e0d\u9700\u8981\u8ba1\u7b97 Hessian matrix\uff0c\u53ea\u9700\u8981\u8ba1\u7b97 Jacobian matrix\uff1b \u7f3a\u70b9 \u7531\u4e8e \\(J_R^TJ_R\\) \u4e0d\u6b63\u5b9a\uff0c\u6240\u4ee5\u672a\u5fc5\u53ef\u9006\uff0c\u9ad8\u65af\u725b\u987f\u6cd5\u6210\u7acb\u7684\u524d\u63d0\u662f\u5176\u53ef\u9006\uff1b \u5f53\u7136\uff0c\u53ef\u4ee5\u4f7f\u7528 Levenberg-Marquardt \u7b97\u6cd5\uff08LM \u7b97\u6cd5\uff09\uff0c\u5373\u5c06 \\(J_R^TJ_R\\) \u4fee\u6b63\u4e3a \\(J_R^TJ_R + \\lambda I\\) \u4ee5\u4fdd\u8bc1\u6b63\u5b9a\uff1b Levenberg-Marquardt Wiki: \ud83d\udd17
\\[ \\Delta x = -(J_R^TJ_R+\\lambda I)^{-1}J_R^TR(x_k) \\] The effect of \\(\\lambda\\): \\(\\lambda \\to \\infty\\): Gradient descent, and stepsize is small; \\(\\lambda \\to 0\\): Gauss-Newton step; How to determine \\(\\lambda\\): Update in every iteration; When decreases obviously, \\(\\lambda\\uparrow\\); When doesn't decrease obviously, \\(\\lambda\\downarrow\\); \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
\u6211\u4eec\u53ef\u80fd\u53ef\u4ee5\u8f6c\u5316\u95ee\u9898\uff0c\u4f7f\u7528\u66f4\u7b80\u5355\u7684\u8868\u8fbe\u5f0f\u53bb\u62df\u5408\u539f\u6765\u7684\u8868\u8fbe\u5f0f\uff0c\u6765\u6c42\u89e3\uff1b \u5176\u4e2d\uff0c\uff08\u51f9\uff09\u51f8\u51fd\u6570\u662f\u4e00\u5b9a\u80fd\u627e\u5230\u6700\u4f18\u89e3\u7684\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u95ee\u9898\u4e3a\u51f8\u4f18\u5316\u95ee\u9898(Convex optimization) \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
\u5185\u70b9(inlier)\uff1a\u7b26\u5408\u6211\u4eec\u9884\u671f\u7684\u6a21\u578b\u62df\u5408\u7684\u70b9\uff1b \u5916\u70b9(outlier)\uff1a\u5b8c\u5168\u4e0d\u7b26\u5408\u6211\u4eec\u9884\u671f\u6a21\u578b\u7684\u70b9\uff0c\u53c8\u53eb\u79bb\u7fa4\uff1b
\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 L1 loss \u5373\u76f4\u63a5\u5bf9\u504f\u5dee\u53d6\u7edd\u5bf9\u503c\uff0c\u5176\u516c\u5f0f\u4e3a \\(L_1 = |f(x)-Y|\\)\uff0c\u5176\u6700\u5927\u7684\u95ee\u9898\u5c31\u662f\u5728\u62d0\u70b9\u5904\u4e0d\u5149\u6ed1\uff0c\u5373\u4e0d\u53ef\u5bfc\uff0c\u800c\u4e14\u5176\u6536\u655b\u53ef\u80fd\u8fc7\u5feb\uff1b L2 loss \u5373\u5c06\u504f\u5dee\u53d6\u5e73\u65b9\uff0c\u5373 \\(L_2 = |f(x)-Y|^2\\)\uff0cL2 loss \u5728\u62d0\u70b9\u5904\u5219\u662f\u5149\u6ed1\u53ef\u5bfc\u7684\uff0c\u4e14\u6536\u655b\u76f8\u5bf9\u7a33\u5b9a\u5149\u6ed1\uff0c\u4f46\u662f\u4e14\u5728\u67d0\u4e9b\u65f6\u5019\u5177\u6709\u6bd4\u8f83\u597d\u7684\u51e0\u4f55\u610f\u4e49\uff0c\u4f46\u662f\u5bf9\u4e8e\u504f\u5dee\u8f83\u5927\u7684\u70b9\u66f4\u654f\u611f\uff1b Huber loss \u53c8\u53eb smooth L1 loss\uff0c\u5373\u4f7f\u7528\u5206\u6bb5\u51fd\u6570\uff0c\u5728\u62d0\u70b9\u9644\u8fd1\u4f7f\u7528 L2 loss\uff0c\u5728\u8fdc\u7aef\u4f7f\u7528 L1 loss\uff1b
\u76f8\u5173\u6587\u7ae0\uff1ahttps://zhuanlan.zhihu.com/p/48426076 "},{"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
\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 \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
TODO: \u518d\u7ec6\u8bf4\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
\u8bbe \\(f\\) \u8868\u793a\u989c\u8272\uff1b \u50cf\u7d20\u5dee\u5f02(dissimilarity)\u4e3a \\(s(f_i,f_j)=\\sqrt{\\sum_k(f_{ik},f_{jk})^2}\\)\uff1b \u5219\u76f8\u4f3c\u6027(affinity)\u6743\u91cd\u4e3a\uff1a\\(w(i,j) = A(f_i,f_j) = e^{\\frac{-1}{2\\sigma^2}s(f_i,f_j)}\\)\uff1b \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)} \\] NP-Complete Approximate solution by eigenvalue decomposition "},{"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 Image alignment / Panoramas 3D reconstruction Motion tracking Object recognition Indexing & database retrieval Robot navigation ... \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
\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 \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 \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
\u72ec\u7279\u6027(uniqueness)\uff0c\u5373\u8fd9\u4e2a\u70b9\u9700\u8981\u80fd\u591f\u8868\u5f81\u4e00\u5b9a\u7279\u6027\uff1b \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
\u7740\u773c\u4e8e\u56fe\u50cf\u7684\u89d2\u70b9 - Harris corner detector\uff1b \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
\u6c42\u5bfc | Compute derivatives at each pixel. \u534f\u65b9\u5dee\u77e9\u9635 | Compute covariance matrix \\(H\\) in a Gaussian window around each pixel. \u54cd\u5e94\u51fd\u6570 | Compute corner response function \\(f\\). \u9608\u503c\u8fc7\u6ee4 | Threshold \\(f\\). \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
C.Harris and M.Stephens. \u201cA Combined Corner and Edge Detector.\u201d Proceedings of the 4th Alvey Vision Conference: pages 147\u2014151, 1988. \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
Partially invariant to affine intensity change. Corner response is invariant w.r.t. translation. Corner response is invariant w.r.t. image rotation. 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:
HOG: Histogram of oriented gradients SURF: Speeded Up Robust Features Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, \"SURF: Speeded Up Robust Features\", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346--359, 2008 FAST (corner detector) Rosten. Machine Learning for High-speed Corner Detection, 2006. ORB: an efficient alternative to SIFT or SURF Ethan Rublee, Vincent Rabaud, Kurt Konolige, Gary R. Bradski: ORB: An efficient alternative to SIFT or SURF. ICCV 2011 Fast Retina Key- point (FREAK) A. Alahi, R. Ortiz, and P. Vandergheynst. FREAK: Fast Retina Keypoint. In IEEE Conference on Computer Vision and Pattern Recognition, 2012. CVPR 2012 Open Source Award Winner. "},{"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
\u7279\u5f81\u8ddf\u8e2a\uff0c\u5728\u6bcf\u4e00\u5e27\u4e2d\u8fdb\u884c\u5173\u952e\u70b9\u5339\u914d\uff0c\u4ee5\u8ddf\u8e2a\u7279\u5b9a\u5173\u952e\u70b9\u7684\u53d8\u5316\u2014\u2014\u8fd9\u4e00\u7c7b\u65b9\u6cd5\u5f97\u5230\u7684\u7ed3\u679c\u76f8\u5bf9\u7a00\u758f\uff0c\u6bd5\u7adf\u5173\u952e\u70b9\u603b\u662f\u5c11\u7684\uff1b \u5149\u6d41(optical flow)\u6280\u672f\uff0c\u901a\u8fc7\u5bf9\u76f8\u90bb\u5e27\u7684\u50cf\u7d20\u8fdb\u884c\u5339\u914d\uff0c\u4ee5\u8ddf\u8e2a\u50cf\u7d20\u7684\u53d8\u5316\u2014\u2014\u8fd9\u4e00\u7c7b\u65b9\u6cd5\u5f97\u5230\u7684\u7ed3\u679c\u76f8\u5bf9\u5bc6\u96c6\uff1b \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
[Small motion] \u76f8\u90bb\u5e27\uff0c\u5339\u914d\u70b9\u7684\u8fd0\u52a8\u8ddd\u79bb\u5c0f\uff1b [Brightness constancy] \u76f8\u90bb\u5e27\uff0c\u70b9\u7684\u4eae\u5ea6\u503e\u5411\u4e8e\u4e0d\u53d8\uff0c\u5373\u53d8\u5316\u5fae\u5c0f\uff1b [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
\u56fe\u50cf\u62fc\u63a5\u7684\u4e24\u4e2a\u65b9\u9762\uff1a \u5c06\u4e24\u5f20\u56fe\u7247\u5bf9\u9f50\uff0c\u627e\u5230\u91cd\u5408\u7684\u90e8\u5206 image warping (change shape of image) \u4e00\u822c\u6765\u8bf4\u662f \u53c2\u6570\u5316parametric \u6216\u8005\u8bf4 \u5168\u5c40global \u7684 warping\uff0c\u7531\u4e00\u4e2a\u542b\u6709\u53c2\u6570\u7684\u65b9\u7a0b\u51b3\u5b9a\uff1a\\(p' = T(p)\\)\uff1b translation / affine / projective \u9664\u4e86\u80fd\u591f\u7528\u4eff\u5c04\u53d8\u6362\u63cf\u8ff0\u7684\u53d8\u6362\uff0c\u8fd8\u6709\u6295\u5f71\u53d8\u6362(Projective Transformation)\uff0c\u6216\u8005\u8bf4\u5355\u5e94\u53d8\u6362(Homography)\uff0c\u5b83\u65e0\u6cd5\u7528\u4eff\u5c04\u53d8\u6362\u63cf\u8ff0\u3002 \u5355\u5e94\u77e9\u9635\u5728\u5e73\u9762\u56fe\u5f62\u4e2d\u4e5f\u662f\u4e00\u4e2a 3*3 \u7684\u77e9\u9635\uff0c\u4f46\u662f\u6ca1\u6709\u5fc5\u987b\u4e3a 0 \u7684\u5143\u7d20\u7ea6\u675f\uff08\u533a\u522b\u4e8e\u9f50\u6b21\u5750\u6807\uff09\uff1a \\(\\begin{bmatrix}x'_i \\\\ y'_i \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} h_{00} & h_{01} & h_{02} \\\\ h_{10} & h_{11} & h_{12} \\\\ h_{20} & h_{21} & h_{22} \\end{bmatrix}\\begin{bmatrix}x_i \\\\ y_i \\\\ 1\\end{bmatrix}\\)\uff0c\u7531\u4e8e \\(h_{22}\\) \u5b9e\u9645\u4e0a\u53ef\u4ee5\u662f\u4efb\u610f\u5b9e\u6570\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u7684\u81ea\u7531\u5ea6\u4e3a 8\uff0c\u6240\u4ee5\u4e3a\u4e86\u8ba9\u89e3\u5177\u6709\u552f\u4e00\u6027\uff0c\u6211\u4eec\u7ea6\u675f \\(||\\begin{bmatrix}h_{00} & h_{01} & ... & h_{21} & h_{22}\\end{bmatrix}||_2 = 1\\)\uff0c\u8fd9\u6837\u5c31\u80fd\u4fdd\u8bc1\u81ea\u7531\u5ea6\u4e3a 8 \u4e14\u5bf9\u5e94\u7684\u89e3\u552f\u4e00\uff1b \u5b9e\u9645\u4e0a\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u5b83\u662f\u5728\u4e09\u7ef4\u7a7a\u95f4\u4e0b\uff0c\u76f8\u673a\u4e0d\u5e73\u79fb\u53ea\u65cb\u8f6c\u7684\u4e00\u4e2a\u89c6\u89d2\u53d8\u5316\uff0c\u5373 change projection plane\uff1b \u5982\u679c\u76f8\u673a\u5e73\u79fb\u4e14\u65cb\u8f6c\uff0c\u90a3\u60c5\u51b5\u975e\u5e38\u590d\u6742\uff0c\u751a\u81f3\u4e0d\u4e00\u5b9a\u5177\u6709\u70b9\u70b9\u5bf9\u5e94\u5173\u7cfb\uff1b \u4f46\u662f\u6709\u4e00\u4e2a\u7279\u6b8a\u60c5\u51b5\uff0c\u5c31\u662f\u6211\u89c2\u6d4b\u5230\u573a\u666f\u672c\u8eab\u5c31\u662f\u5e73\u9762\uff08\u6216\u8005\u7279\u522b\u8fdc\u7684\u666f\u89c2\uff09\uff0c\u573a\u666f\u4e0d\u5b58\u5728\u906e\u6321\uff0c\u8fd9\u4e2a\u65f6\u5019\u4e5f\u53ef\u4ee5\u4f7f\u7528 homography\uff1b \u5982\u4e0a\u5c31\u662f\u4e3a\u4ec0\u4e48\u624b\u673a\u62cd\u6444\u5168\u666f\u7167\u7247\u65f6\u8981\u6c42\u4e0d\u8981\u79fb\u52a8\u53ea\u8f6c\u52a8\u76f8\u673a \u5982\u4e0a\u53d8\u6362\u90fd\u6709\u9006\u53d8\u6362\uff1b \u5b9e\u9645\u64cd\u4f5c\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u9006\u53d8\u6362\uff08\u6b63\u5411\u53d8\u6362\u7684\u8bdd\u50cf\u7d20\u4f4d\u7f6e\u53ef\u80fd\u4e0d\u5bf9\uff09\uff0c\u5373\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u9700\u8981\u627e\u7684\u50cf\u7d20\u70b9\uff0c\u6211\u4eec\u53bb\u627e\u53d8\u6362\u524d\u7684\u5750\u6807\uff0c\u5e76\u6839\u636e\u8fd9\u4e2a\u5750\u6807\u6765\u8fdb\u884c\u63d2\u503c\uff0c\u4e00\u822c\u4f7f\u7528\u53cc\u7ebf\u6027\u63d2\u503c\uff1b \u8ba1\u7b97\u5982\u4f55\u5bf9\u9f50\u5408\u5e76\u8fd9\u4e24\u4e2a\u56fe\u7247 image stitching \u5373\u7ed9\u5b9a\u4e24\u5f20\u56fe\u50cf\uff0c\u5982\u4f55\u8ba1\u7b97\u4e0a\u4e00\u6b65\u63d0\u5230\u7684 T\uff1b \u6b65\u9aa4\uff1a image matching(each match gives an equation); solve T from the obtained matches; \u4f8b\u5982\uff0c\u5bf9\u4e8e afine transformations\uff0c\u6709\u516d\u4e2a\u81ea\u7531\u5ea6\uff0c\u9700\u8981\u516d\u4e2a\u65b9\u7a0b\u4e09\u5bf9\u5339\u914d\u5173\u7cfb\uff08\u6bcf\u4e00\u5bf9\u5339\u914d\u5173\u7cfb\u63d0\u4f9b\u4e24\u4e2a\u65b9\u7a0b\uff0c\u5206\u522b\u662f\u5173\u4e8e x \u548c\u5173\u4e8e y \u7684\uff09\uff1b \u5b83\u4eec\u5177\u6709\u77e9\u9635\u5f62\u5f0f\uff1a \uff08\u6284\u9ea6\u54e5\u7b14\u8bb0\uff09 \u5b9e\u9645\u8fc7\u7a0b\u4e2d\u6211\u4eec\u5e76\u4e0d\u4f1a\u76f4\u63a5\u53bb\u201c\u89e3\u65b9\u7a0b\u201d\uff0c\u800c\u662f\u53bb\u505a\u4e00\u4e2a\u201c\u5c3d\u91cf\u76f8\u7b49\u201d\u7684\u4e00\u4e2a\u6700\u5c0f\u4e8c\u4e58\u95ee\u9898\uff0c\u8fd9\u4e2a\u95ee\u9898\u7684\u89e3\u6709\u4e00\u4e2a\u89e3\u6790\u89e3\uff1a\\(t = (A^TA)^{-1}A^Tb\\)\uff1b \u518d\u4f8b\u5982\u5bf9\u4e8e homography\uff0c\u6709\u516b\u4e2a\u81ea\u7531\u5ea6\u5c31\u9700\u8981\u516b\u4e2a\u65b9\u7a0b\u56db\u5bf9\u5339\u914d\u5173\u7cfb\uff1b \u5bf9\u4e8e\u4f18\u5316\u95ee\u9898\uff1a\\(\\mathop{min}_h ||Ah||^2 \\;\\;\\; s.t. ||h|| = 1\\)\uff0c\u5176\u89e3 \\(\\hat{h}\\) \u4e3a \\(A_TA\\) \u7279\u5f81\u503c\u6700\u5c0f\u7684\u7279\u5f81\u5411\u91cf\uff1b \u6b64\u5916\uff0c\u8fd8\u8981\u5173\u6ce8\u5982\u4f55\u5904\u7406 outliers\uff1a\u4f7f\u7528 RANSAC\uff1b \u5373\uff0c\u5229\u7528\u5c0f\u90e8\u5206\u5339\u914d\u5173\u7cfb\u8ba1\u7b97\u51fa T\uff0c\u7136\u540e\u62ff\u53bb\u68c0\u9a8c\u5176\u4ed6\u7684\u5339\u914d\u5173\u7cfb\uff1b \u7136\u800c\u4e0a\u9762\u8fd9\u4e9b\u505a\u6cd5\u90fd\u662f\u5c06\u56fe\u7247\u6295\u5f71\u5230\u4e00\u4e2a\u5e73\u9762\u4e0a\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c06\u56fe\u50cf\u62fc\u63a5\u4e3a\u4e00\u4e2a\u66f4\u5927\u90fd\u5e73\u9762\u56fe\u50cf\uff1b\u4f46\u662f\u5728\u5168\u666f\u8fd9\u79cd\u6848\u4f8b\u4e2d\uff0c\u8fd9\u4e48\u505a\u4f1a\u8ba9\u8fb9\u7f18\u62c9\u4f38\u8d8a\u6765\u6108\u660e\u663e\uff08\u8fd1\u5927\u8fdc\u5c0f\uff09\uff0c\u6240\u4ee5\u5bf9\u4e8e\u8fd9\u79cd\u6848\u4f8b\uff0c\u6211\u4eec\u8981\u5148\u5c06\u5b83\u6295\u5c04\u5230\u67f1\u9762\u4e0a\uff0c\u7136\u540e\u5728\u67f1\u9762\u4e0a\u8fdb\u884c\u62fc\u63a5\uff0cTODO:\u516c\u5f0f\u8bb0\u5f97\u6284\u4e0a\u6765\uff1b \u8fd8\u6709\u4e00\u4e2a\u95ee\u9898\u662f\u8bef\u5dee\u7d2f\u79ef\uff0c\u5bfc\u81f4\u6f02\u79fb(drift)\uff0c\u89e3\u51b3\u529e\u6cd5\u5c31\u662f\u6700\u540e\u4e00\u5f20\u548c\u7b2c\u4e00\u5f20\u4e4b\u95f4\u4e5f\u8ba1\u7b97\u4e00\u6b21 T \u6765\u8fdb\u884c\u7ea6\u675f\uff0c\u8fd9\u79cd\u60f3\u6cd5\u53eb\u56de\u8def\u95ed\u5408\uff1b \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
\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 \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 \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} \\] \u8bf4\u660e\uff1a \\((\\mathbf{x}_w - \\mathbf{c}_w)\\) \u53ef\u4ee5\u7406\u89e3\u4e3a\u4ece\u76f8\u673a\u4e2d\u5fc3\u6307\u5411\u76ee\u6807\u70b9\u7684\u4e00\u4e2a\u5411\u91cf\uff1b \u65cb\u8f6c\u77e9\u9635 \\(R\\) \u5355\u4f4d\u6b63\u4ea4\uff1b \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
\u4ee4 \\(p_{34} = 1\\)\uff1b \u4ee4 \\(||p|| = 1\\)\uff1b \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
\u4ece\u5176\u4e2d\u4e24\u5f20\u5f00\u59cb\uff0c\u5bf9\u573a\u666f\u8fdb\u884c\u91cd\u5efa \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 \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
GitHub Repo: https://github.com/colmap/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
LiDAR Structured light Active stereo \u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u89c6\u89c9\u65b9\u6cd5
Stereo Multi-view stereo Monocular \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
\u5982\u4f55\u9ad8\u6548\u5730\u5f97\u5230\u5339\u914d\u5173\u7cfb\uff1b \u5982\u4f55\u6839\u636e\u5339\u914d\u70b9\u8ba1\u7b97\u70b9\u6df1\u5ea6\uff1b \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
\u5982\u4f55\u9ad8\u6548\u5730\u5f97\u5230\u5339\u914d\u5173\u7cfb\uff1b \u5982\u4f55\u6839\u636e\u5339\u914d\u70b9\u8ba1\u7b97\u70b9\u6df1\u5ea6\uff1b "},{"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
\u4e24\u4e2a\u76f8\u673a\u7684\u7126\u8ddd\u76f8\u540c\uff1b \u76f8\u673a\u4f4d\u7f6e\u5728\u540c\u4e00\u6c34\u5e73\u9762\u4e0a\uff0c\u5373\u9ad8\u5ea6\u76f8\u540c\uff1b \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
\u5982\u4f55\u9ad8\u6548\u5730\u5f97\u5230\u5339\u914d\u5173\u7cfb\uff1b \u5982\u4f55\u6839\u636e\u5339\u914d\u70b9\u8ba1\u7b97\u70b9\u6df1\u5ea6\uff1b \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
Camera calibration errors Poor image resolution Occlusions Violations of brightness constancy (specular reflections) Large motions Textureless regions \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
\u5982\u679c\u57fa\u7ebf\u9009\u62e9\u8fc7\u5927\uff0c\u90a3\u4e48\u4e24\u5f20\u56fe\u7247\u4e4b\u95f4\u7684\u5185\u5bb9\u5dee\u522b\u5c31\u4f1a\u8f83\u5927\uff0c\u5728\u641c\u7d22\u8fc7\u7a0b\u4e2d\u5c31\u66f4\u96be\u627e\u5230\u80fd\u591f\u5339\u914d\u7684\u70b9\uff0c\u6b64\u5916\uff0c\u6a2a\u5411\u7684\u8bef\u5dee\u4e5f\u4f1a\u589e\u5927\uff0c\u7406\u7531\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u8fd9\u5f20\u56fe\u7684\u539f\u7406\uff1b \u800c\u5982\u679c\u57fa\u7ebf\u9009\u62e9\u8fc7\u5c0f\uff0c\u5219\u70b9\u7684\u6df1\u5ea6\u8bef\u5dee\u5c31\u4f1a\u5f88\u5927\uff0c\u5177\u4f53\u539f\u56e0\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u8fd9\u5f20\u56fe\u2014\u2014\u5355\u4e00\u50cf\u7d20\u5bf9\u5e94\u7684\u5019\u9009\u70b9\u533a\u57df\u66f4\u6df1\uff0c\u610f\u5473\u7740\u5f53\u524d\u70b9\u53ef\u80fd\u662f\u8fd9\u4e00\u83f1\u5f62\u91cc\u7684\u4efb\u4f55\u70b9\uff1b
\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
multi-view stereo MVS \u5177\u4f53\u505a\u6cd5\u662f \u53ef\u4ee5\u4f7f\u7528 Plane-Sweep \u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5176\u4ed6\u89c6\u89d2\uff0c\u6784\u9020\u4e00\u4e2a\u5173\u4e8e x-y-z \u7684\u4e09\u7ef4\u8868\uff0c\u80fd\u591f\u67e5\u8be2\u5bf9\u4e8e\u53c2\u8003\u56fe\u7247[x][y]
\u5904\u7684\u50cf\u7d20\uff0c\u5982\u679c\u5904\u4e8e\u6df1\u5ea6[z]
\u65f6\u7684\u60c5\u51b5 \u5229\u7528\u4e24\u6b21\u6295\u5f71\uff0c\u5148\u5728\u201cA\u201d\u5b57\u91cc\u76f8\u4f3c\u5230\u8fdc\u5904\uff0c\u7136\u540e\u518d\u659c\u7740\u6295\u5f71\u5230\u6bcf\u4e2a\u89c6\u89d2\u91cc \u6bcf\u4e00\u5c42\u5c42\u626b\u8fc7\u53bb \u5728\u4e0a\u56fe\u6570\u7ec4\u91cc\u627e\u6bcf\u4e00\u4e2a[x][y]
\u91cc\u8868\u73b0\u6700\u597d\u7684[z]
\u4f5c\u4e3a\u90a3\u4e2a\u50cf\u7d20\u7684\u6df1\u5ea6\u3002 \u7136\u800c\u8fd9\u4e2a\u505a\u6cd5\u8fd8\u662f\u4e0d\u592a\u9ad8\u6548\uff0c\u4e00\u4e2a\u66f4\u9ad8\u6548\u7684\u505a\u6cd5\uff0c\u662f PatchMatch\u3002 \u968f\u5373\u521d\u59cb\u5316\uff0c\u603b\u6709\u51e0\u4e2a\u662f\u63a5\u8fd1\u6700\u4f18\u89e3\u7684 \u5bf9\u4e8e\u8fd9\u4e9b\u6bd4\u8f83\u4f18\u7684\u89e3\uff0c\u5b83\u9644\u8fd1\u7684\u50cf\u7d20\u7b54\u6848\u5728\u8fd9\u4e2a\u7b54\u6848\u7684\u9644\u8fd1\u5bfb\u627e\uff08\u4f20\u64ad\uff09\uff0c\u7136\u540e\u518d\u5728\u5c0f\u8303\u56f4\u5185\u8fdb\u4e00\u6b65\u4f18\u5316\uff08\u641c\u7d22\uff09 "},{"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
\u6df1\u5ea6\u8ba1\u7b97 \u6df1\u5ea6 -> 3D\u7f51\u683c\u8868\u9762 \u7eb9\u7406\u586b\u5145 "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-representations","title":"3D representations","text":"\u8865\u5145\u56fe\u7247
\u70b9\u4e91 point cloud \u4f53\u7d20\uff083d\u50cf\u7d20\uff09occupancy signed distance function (SDF) \u5927\u5c0f\u8ddd\u79bb\u8868\u9762\u7684\u8ddd\u79bb\uff0c\u5185\u90e8\u4e3a\u8d1f\uff0c\u5916\u90e8\u4e3a\u6b63 Truncated Signed Distance Function \u622a\u65adSDF\uff0c\u5373\u4ecd\u548c\u5927\u4e8e 1 \u90fd\u8bb0\u4e3a 1\uff0c\u5c0f\u4e8e -1 \u7684\u8bb0\u4e3a -1 \u7f51\u683c mesh\uff08\u6bd4\u8f83\u5e38\u7528\uff09 "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-surface-reconstruction","title":"3D surface reconstruction","text":" \u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a \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
\u53ef\u4ee5\u8ba1\u7b97\u6bcf\u4e00\u4e2a\u4f53\u7d20\u5230\u76f8\u673a\u4e2d\u5fc3\u7684\u8ddd\u79bb \\(d_p\\) \u6839\u636e\u5c0f\u5b54\u6210\u50cf\u89c4\u5219\uff0c\u53ef\u4ee5\u5f97\u5230\u4e0e\u5f53\u524d\u4f53\u7d20\u6240\u5bf9\u5e94\u7684\u50cf\u7d20\uff0c\u8bb0\u5bf9\u5e94\u7684\u50cf\u7d20\u7684\u6df1\u5ea6\u4e3a \\(D_k(u)\\) \u5219\u8be5\u4f53\u7d20\u7684 TSDF \u503c\u622a\u65ad\u524d\u4e3a \\(D_k(u) - d_p\\) \u5728\u591a\u56fe\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e00\u5f20\u56fe\u7684\u7ed3\u679c\u505a\u52a0\u6743\u8ba1\u7b97 \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
\u6df1\u5ea6\u56fe -> \u5e26\u6cd5\u5411\u91cf\u7684\u70b9\u4e91 Oriented points \u90a3\u91cc\u7684\u7bad\u5934\u662f\u8868\u9762\u6cd5\u5411\u91cf\uff08\u6df1\u5ea6\u7684\u68af\u5ea6\uff09 \u7528\u4f18\u5316\u7684\u65b9\u5f0f\u6c42\u89e3 indicator function \uff08\u5927\u6982\u5c31\u662f\u6700\u7ec8\u7ed3\u679c\u7684\u90a3\u4e2a\u7269\u4f53\u7684\u8868\u9762\u53d1\u5411\u91cf\u51fd\u6570\uff09 \u8fd9\u91cc\u6709\u4e00\u4e2a\u70b9\u5c31\u662f\uff0c\u4f53\u7d20\u7684\u66f2\u9762\u662f\u95ed\u5408\u7684\uff0c\u6240\u4ee5\u4f1a\u6709\u5185\u5916\u4e4b\u5206\uff0c\u5185\u90e8\u5b9e\u5fc3\u5916\u90e8\u7a7a\u5fc3\uff0c\u6240\u4ee5 indicator function \u5c31\u662f\u60f3\u540c\u65f6\u8868\u8fbe \u8868\u9762 \u548c \u5185\u5916 \u4e24\u4ef6\u4e8b\u3002 "},{"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
\u4ee5 2D \u4e3a\u4f8b\uff0c\u5982\u679c\u4e00\u4e2a\u300c\u8fb9\u300d\u7684\u4e24\u8fb9\uff0c\u9ed1\u767d\u4e0d\u4e00\u81f4\uff08\u9ed1\u8868\u793a\u5916\u90e8\uff0c\u767d\u8868\u793a\u5185\u90e8\uff09\uff0c\u5219\u8bf4\u660e\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u8fb9\u754c\uff0c\u4e8e\u662f\u6807\u4e00\u4e2a\u70b9\uff0c\u7136\u540e\u5c06\u6240\u6709\u7684\u8fd9\u6837\u7684\u70b9\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u8fde\u63a5\u8d77\u6765\uff0c\u5c31\u5f97\u5230\u7684\u4e86\u8fb9\u754c\u3002 \u5177\u4f53\u6807\u5728\u8fb9\u754c\u7684\u54ea\u4e2a\u4f4d\u7f6e\uff0c\u5982\u679c\u662f SDF \u7684\u8bdd\u53ef\u4ee5\u8ba1\u7b97\u77e5\u9053\uff0c\u5426\u5219\u53ef\u80fd\u53ea\u80fd\u5728\u4e2d\u95f4\u4e86 \u4f46\u662f\u9700\u8981\u6ce8\u610f\u4e00\u4e2a\u683c\u5b50\u5982\u679c\u6709\u591a\u4e2a\u70b9\u7684\u65f6\u5019\u600e\u4e48\u8fde\u7684\u95ee\u9898\uff0c\u6709\u4e00\u4e2a\u8868\u53ef\u4ee5\u67e5\uff0c\u6491\u6b7b\u4e5f\u5c31 2^4=16 \u79cd\u60c5\u51b5
\u5728 3D \u60c5\u51b5\u4e0b\uff0c\u5c31\u662f\u5728\u7acb\u65b9\u4f53\u91cc\u8fde\u63a5\u4e09\u4e2a\u70b9\u5f62\u6210\u4e09\u89d2\u9762\uff0c\u7136\u540e\u4e5f\u6709\u4e00\u4e2a\u8868\u53ef\u4ee5\u67e5\uff0c\u6491\u6b7b\u4e5f\u5c31 2^8=256 \u79cd\u60c5\u51b5\u3002
"},{"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
\u5bf9\u95ee\u9898\u8fdb\u884c\u5b9a\u4e49\uff1b \u6536\u96c6\uff08\u548c\u5904\u7406\uff09\u7528\u6765\u5b66\u4e60\u7684\u6570\u636e\u96c6\uff1b \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 \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 \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
\\(w^Tx+b = 0\\) It's a line in 2D, a plane in 3D or hyperplane ...
"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training","title":"Training","text":"\u5982\u4f55\u627e\u5230\u6700\u4f73\u7684\u53c2\u6570\uff1f
loss function optimization problem \u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u7f3a\u70b9
\u5bb9\u6613\u6536\u5230\u566a\u58f0\u5f71\u54cd \u5bf9\u4e8e classifier \u7684\u95ee\u9898\uff0c\u5f88\u96be\u7528\u201c\u505a\u5dee\u201d\u6765\u63cf\u8ff0\u5f97\u5206\u4e0e\u7c7b\u522b\u7684\u5173\u7cfb\u2014\u2014\u8ba9\u4ed6\u4ece\u4efb\u610f\u6570\u6620\u5c04\u5230\u4e00\u4e2a [0,1]
\uff0csigmoid\uff0c\u53ef\u4ee5\u7406\u89e3\u6210\u201c\u6982\u7387\u201d\u3002i.e. softmax operator: \\(.....\\) \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 =>
\u8868\u8fbe\u80fd\u529b \u2b06\ufe0f \u53c2\u6570 \u2b06\ufe0f \u8bad\u7ec3\u6570\u636e \u2b06\ufe0f \u6210\u672c \u2b06\ufe0f \u4f18\u5316\u95ee\u9898\u6c42\u89e3\u96be\u5ea6 \u2b06\ufe0f \u5168\u8fde\u5c42 Fully connected layer
\u5355\u5c42\u53c2\u6570\u91cf\u5de8\u5927\uff08W \u5927\uff09 "},{"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
\u5c42\u6570\u8d8a\u591a\uff0c\u4e00\u822c\u8d8a\u5927 P69 "},{"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
classification: cross-entropy regression: L2 loss 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":" Caffe \u8001\u4e1c\u897f TF \u5f00\u53d1\u8005\u66f4\u559c\u6b22 PyTorch \u7814\u7a76\u8005\u66f4\u559c\u6b22 "},{"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
\u96be\u8bad\u7ec3\uff0c\u201c\u68af\u5ea6\u6d88\u5931\u201d\uff0c\u5c42\u6570\u592a\u591a\u4ee5\u540e\uff0c\u5230\u540e\u9762\u68af\u5ea6\u5c31\u5f88\u5c0f\u4e86\uff0c\u4e0b\u964d\u4e0d\u4e0b\u53bb\u4e86 \u4f46\u662f\u4e3a\u4ec0\u4e48\u4f1a\u53d8\u5dee\u5462\uff1f \u5982\u4f55\u8bbe\u8ba1\u589e\u52a0\u5c42\u6570\u800c\u81f3\u5c11\u4e0d\u53d8\u5dee\u5462\uff1f ResNet: \\(H(x) = F(x) + x\\) \u6b8b\u5dee\u5b66\u4e60 residual learning "},{"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
\u5206\u7c7b Classification \u8bed\u4e49\u5206\u5272 Semantic segmentation \u5bf9\u8c61\u68c0\u6d4b Object detection \u5b9e\u4f8b\u5206\u5272 Instance segmentation "},{"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
\u8f93\u5165\uff1a\u56fe\u7247 \u8f93\u51fa\uff1a\u6bcf\u4e2a\u50cf\u7d20\u7684\u7c7b\u522b\u6807\u7b7e\uff0c\u4e0d\u9700\u8981\u533a\u5206\u540c\u4e00\u7c7b\u522b\u7684\u4e0d\u540c\u5b9e\u4f8b \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)
Loss function: Per-pixel cross-entropy \u5c40\u9650\u6027\uff1a
Receptive field is linear in number of conv layers Convolution on high resolution is expensive\uff08\u8017\u65f6\uff09 \u6539\u8fdb\uff1a
Downsampling: pooling, strided conv \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
Run object detector on all test images For each category, compute Average Precision (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
Two-stage is generally more accurate \uff08\u6570\u636e\u91cf\u8db3\u591f\u5927\uff09 Single-stage is faster \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
CNN-base descriptor \u597d\u6709\u610f\u601d\uff01 \u63cf\u8ff0\u503c\uff1a
contrastive loss 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
\u5feb\u95e8 \u5149\u5708 ISO \u611f\u5149\u5ea6 \u9ad8\uff1a\u66f4\u4eae\u3001\u66f4\u591a\u566a\u58f0 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
Non-blind image deconvolution, NBID Blind image deconvolution, BID 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
sample-based colorization 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)
\u4e24\u4e2a\u4e00\u8d77\u8bad\u7ec3\uff0cmin-max problem GAN \u5f88\u96be\u6536\u655b\uff0c\u4e0d\u597d\u8c03 adversarial loss "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#more-image-synthesis-tasks","title":"more Image synthesis tasks","text":" image to image translation style transfer text-to-photo image dehazing customized gaming 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:
Textured Mesh (surface-based representations) Light Fields and Lumigraphs \u727a\u7272\u4e86\u4e00\u4e2a\u65b9\u5411\uff0c\u51cf\u5c11\u4e86\u4e00\u4e2a\u7eac\u5ea6 \u53ea\u80fd\u5185\u91c7\u6837 Depth Warping Multi-plane Images (MPI) (volume-based representations) rgba x multi planes Neural Volumes Neural Radiance Fields 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 246 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f
\u8bfe\u7a0b\u4fe1\u606f
\u667a\u4e91\u94fe\u63a5\uff1a\ud83d\udd17 \u6388\u8bfe\uff1a\u5b63\u6c5f\u6c11 \u8bfe\u672c\uff1aOperating System Concepts (10th edition) \u5206\u6570\u6784\u6210
[50%] \u5e73\u65f6\u6210\u7ee9 [5%] HOMEWORK [5%] Quiz / \u70b9\u540d [20%] Lab \u62a5\u544a [20%] Lab \u9a8c\u6536 [6%] Bonus [4%] Lab 7 [2%] \u8bfe\u5802\u56de\u7b54\u95ee\u9898\uff0c0.5/\u6b21 [50%] \u671f\u672b\u6210\u7ee9\uff08\u5141\u8bb8\u643a\u5e26 3 \u5f20 A4\uff0c\u5141\u8bb8\u6253\u5370\uff09 \u7b14\u8bb0\u53c2\u8003
\u672c\u8bfe\u7a0b\u7684\u7b14\u8bb0\u4e3b\u8981\u53c2\u8003\u8fc7\u5982\u4e0b\u8d44\u6599\uff1a
Operating System Concepts (10th edition) 2024 \u64cd\u4f5c\u7cfb\u7edf\u8003\u7814\u590d\u4e60\u6307\u5bfc\uff08\u738b\u9053\uff09 \u54b8\u9c7c\u6684\u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0 \u5c0f\u89d2\u9f99\u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0 hjh \u5b66\u957f\u7684 A4 \u7eb8 list
Unit 0: \u603b\u89c8 | Overview Unit 1: \u8fdb\u7a0b\u7ba1\u7406 | Process Management Unit 2: \u540c\u6b65 | Synchronization Part 1: \u540c\u6b65\u5de5\u5177 | Synchronization Tools Part 2: \u7ecf\u5178\u540c\u6b65\u4f8b\u5b50 | Synchronization Problems Examples Part 3: \u6b7b\u9501 | Deadlocks Unit 3: \u5185\u5b58 | Memory Part 1: \u5185\u5b58\u8bbe\u8ba1 | Memory Design Part 2: \u5185\u5b58\u7ba1\u7406 | Memory Management Unit 4: \u8f93\u5165/\u8f93\u51fa | I/O Unit 5: \u5b58\u50a8 | Storage Unit 6: \u6587\u4ef6\u7cfb\u7edf | File System "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/","title":"Unit 0: \u603b\u89c8 | Overview","text":" \u7ea6 9048 \u4e2a\u5b57 5 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 45 \u5206\u949f
\u5bfc\u8bfb
\u672c\u5355\u5143\u4e3b\u8981\u6709\u4e24\u4e2a\u4efb\u52a1\uff1a
\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 \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":"\u5bfc\u8bfb
\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\u6d89\u53ca\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\u8fdb\u7a0b\u7ba1\u7406\u8fd9\u4e00\u7ae0\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)\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":"\u5bfc\u8bfb
\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 \u5bf9\u79f0\u591a\u5904\u7406(SMP) | Wikipedia\uff1b \u975e\u4e00\u81f4\u5185\u5b58\u8bbf\u95ee(NUMA) | Wikipedia\uff1b \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
A \u9700\u8981\u987a\u5e8f\u4f7f\u7528\u5982\u4e0b\u8d44\u6e90\uff1aCPU: 10s, X: 5s, CPU: 5s, Y: 10s, CPU: 10s B \u9700\u8981\u987a\u5e8f\u4f7f\u7528\u5982\u4e0b\u8d44\u6e90\uff1aX: 10s, CPU: 10s, Y: 5s, CPU: 5s, Y: 10s \u8bf7\u8ba8\u8bba\uff1a
\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 \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
\u84dd/CPU\uff0c\u7eff/X\uff0c\u9ec4/Y\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\u8c03\u5ea6\u95ee\u9898\uff0c\u6240\u4ee5\u5b9e\u9645\u5b9e\u73b0\u4f1a\u590d\u6742\u4e00\u4e9b\u3002\u5177\u4f53\u7684\u5185\u5bb9\u6211\u4eec\u4f1a\u5728\u8fdb\u7a0b\u7ba1\u7406\u8fd9\u4e00\u7ae0\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\u3002\u5b83\u4eec\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\u4e3b\u52a8\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
\u5b9e\u65f6\u7cfb\u7edf(Real-time System)\uff1a\u5728\u7279\u5b9a\u65f6\u95f4\uff08\u53ef\u80fd\u6bd4\u65f6\u95f4\u7247\u8fd8\u5c0f\uff09\u5185\u5b8c\u6210\u7279\u5b9a\u4efb\u52a1\u7684\u7cfb\u7edf\uff0c\u4f8b\u5982\u822a\u7a7a\u822a\u5929\u7cfb\u7edf\u3001\u6838\u53cd\u5e94\u5806\u63a7\u5236\u7cfb\u7edf\u7b49\uff1b \u5206\u5e03\u5f0f\u7cfb\u7edf(Distributed System)\uff1a\u7531\u591a\u53f0\u8ba1\u7b97\u673a\u7ec4\u6210\u7684\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u8ba1\u7b97\u673a\u901a\u8fc7\u901a\u4fe1\u4ea4\u6362\u4fe1\u606f\uff0c\u5171\u540c\u5b8c\u6210\u4e00\u4e2a\u4efb\u52a1\uff0c\u4f8b\u5982\u4e91\u8ba1\u7b97\u3001\u5927\u578b\u7f51\u7ad9\u7b49\uff1b \u591a\u9053\u6280\u672f\u51fa\u73b0\u4e4b\u540e\uff0c\u867d\u7136\u8ba1\u7b97\u673a\u7684\u8868\u73b0\u4e0d\u65ad\u63d0\u5347\uff0c\u4f46\u662f\u7531\u4e8e\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\u4e8e\u662f\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\uff0c\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\u3002\u5728\u8fd9\u4e9b\u65b9\u9762\uff0c\u5b8f\u5185\u6838\u7684\u8868\u73b0\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\u81ea\u8eab\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":"\u5bfc\u8bfb
\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 Difference between TRAP and exceptions | StackOverflow Difference between Interrupt and Exception | GeeksForGeeks \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
\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 \u4e2d\u65ad\u5e76\u4e0d\u662f\u968f\u65f6\u968f\u5730\u90fd\u80fd\u53d1\u751f\u7684\uff0c\u201c\u4ee3\u7406\u4eba\u201d\u5728\u8d70\u94a2\u4e1d\u65f6\u4e0d\u5e94\u5f53\u6682\u505c\u53bb\u5904\u7406\u836f\u54c1\u7f3a\u8d27\u8fd9\u79cd\u76f8\u5bf9\u65e0\u5173\u7d27\u8981\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\u5728 lab1 \u4e2d\uff0c\u6211\u4eec\u4f1a\u6d89\u53ca\u76f8\u5173\u5185\u5bb9\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\uff1bmode 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 ABI | Wiki Difference between API and ABI | StackOverflow \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 \u4f7f\u7528 gcc -static ...
\u6765\u6307\u5b9a\u4f7f\u7528\u9759\u6001\u94fe\u63a5\uff1b \u4f7f\u7528 ldd <file>
\u6765\u67e5\u770b\u6587\u4ef6\u94fe\u63a5\u4e86\u54ea\u4e9b\u5e93\uff1b \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
\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 7283 \u4e2a\u5b57 60 \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
Text section: \u5b58\u50a8\u4ee3\u7801\uff1b Data section: \u5b58\u50a8\u4ee3\u7801\u4e2d\u7684\u5168\u5c40\u53d8\u91cf\u3001\u9759\u6001\u53d8\u91cf\uff1b Heap section: \u5e38\u8bf4\u7684\u201c\u5806\u201d\uff0c\u88ab\u52a8\u6001\u5206\u914d\u7684\u5185\u5b58\uff1b Stack section: \u5e38\u8bf4\u7684\u201c\u6808\u201d\uff0c\u5b58\u50a8\u4e00\u4e9b\u6682\u65f6\u6027\u7684\u6570\u636e\uff0c\u5982\u51fd\u6570\u4f20\u53c2\u3001\u8fd4\u56de\u503c\u3001\u5c40\u90e8\u53d8\u91cf\u7b49\uff1b \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
Process state: \u8fdb\u7a0b\u7684\u72b6\u6001\uff1b Program counter: \u6807\u8bc6\u8be5\u8fdb\u7a0b\u8dd1\u5230\u4e86\u54ea\u91cc\uff0c\u7531\u4e8e\u8fdb\u7a0b\u662f\u52a8\u6001\u7684\uff0c\u6bcf\u4e00\u88ab\u5207\u6362\u90fd\u9700\u8981\u4fdd\u8bc1\u4e0b\u4e00\u6b21\u80fd\u65e0\u7f1d\u8854\u63a5\u4e4b\u524d\u7684\u8fdb\u5ea6\uff0c\u6240\u4ee5\u9700\u8981\u5b58\u50a8\u6bcf\u6b21\u7684\u5de5\u4f5c\u72b6\u6001\uff1b CPU registers: \u4fdd\u5b58\u8fdb\u7a0b\u76f8\u5173\u7684\u5bc4\u5b58\u5668\u4fe1\u606f\uff1b CPU-scheduling information: CPU \u8c03\u5ea6\u53c2\u8003\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u4f18\u5148\u7ea7\u3001\u8c03\u5ea6\u961f\u5217\u7684\u6307\u9488\u3001\u8c03\u5ea6\u53c2\u6570\u7b49\uff1b Memory-management information: \u5305\u62ec\u9875\u8868\u3001\u6bb5\u8868\u7b49\u4fe1\u606f\uff0c\u5177\u4f53\u4e0e\u5b9e\u73b0\u7684\u5185\u5b58\u7cfb\u7edf\u6709\u5173\uff1b Accounting information\uff1a \u4e00\u4e9b\u5173\u4e8e\u8fdb\u7a0b\u7684\u52a8\u6001\u6570\u636e\u7684\u7edf\u8ba1\u548c\u8bb0\u5f55\uff0c\u6bd4\u5982\u603b\u5171\u5df2\u7ecf\u8dd1\u4e86\u591a\u4e45\u3001\u65f6\u95f4\u9650\u5236\u3001\u8fdb\u7a0b\u53f7\u7b49\uff1b I/O status information: \u88ab\u5206\u914d\u7ed9\u8fdb\u7a0b\u7684 I/O \u8bbe\u5907\u5217\u8868\u3001\u6253\u5f00\u7684\u6587\u4ef6\u5217\u8868\u7b49\uff1b \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
new
: \u8fdb\u7a0b\u6b63\u5728\u521b\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u5305\u62ec\u7533\u8bf7 PCB\uff0c\u5206\u914d\u521d\u59cb\u8d44\u6e90\u7b49\uff1b running
: \u8fdb\u7a0b\u6b63\u5728\u8fd0\u884c\uff0c\u5373\u6b63\u5728\u4f7f\u7528 CPU \u8d44\u6e90\uff1b \u6709\u51e0\u4e2a\u6838\u5c31\u6700\u591a\u6709\u51e0\u4e2a\u8fdb\u7a0b\u5904\u4e8e running
\u72b6\u6001\uff1b ready
: \u8fdb\u7a0b\u5df2\u7ecf\u51c6\u5907\u597d\u4e86\uff0c\u53ea\u5dee CPU \u8d44\u6e90\uff0c\u4e00\u65e6\u6709 CPU \u8d44\u6e90\u5f85\u5206\u914d\uff0c\u5c31\u4f1a\u6709\u5c31\u7eea\u6001\u7684\u8fdb\u7a0b\u53d8\u4e3a\u8fd0\u884c\u6001\uff1b \u5982\u679c\u6709\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\uff0c\u5c31\u4e00\u5b9a\u6709\u8fdb\u7a0b\u5904\u4e8e\u8fd0\u884c\u6001\uff1b CPU \u8c03\u5ea6\u5b9e\u9645\u4e0a\u6307\u7684\u5c31\u662f\u82e5\u5e72\u8fdb\u7a0b\u5728\u5c31\u7eea\u6001\u548c\u8fd0\u884c\u6001\u4e4b\u95f4\u7684\u5207\u6362\uff1b waiting
: \u8fdb\u7a0b\u6b63\u5728\u7b49\u5f85\u67d0\u4e2a\u4e8b\u4ef6\u7684\u53d1\u751f\uff0c\u6bd4\u5982\u7b49\u5f85 I/O \u5b8c\u6210\u3001\u7b49\u5f85\u67d0\u4e2a\u4fe1\u53f7\u91cf\u7b49\uff1b \u6b64\u65f6\u5373\u4f7f\u6709\u7a7a\u4f59\u7684 CPU \u8d44\u6e90\uff0c\u8be5\u8fdb\u7a0b\u4e5f\u65e0\u6cd5\u7ee7\u7eed\uff1b \u4e00\u822c\u8fdb\u7a0b\u4ece\u8fd0\u884c\u6001\u8fdb\u5165\u963b\u585e\u6001\u662f\u4e3b\u52a8\u7684\uff0c\u79bb\u5f00\u963b\u585e\u6001\u8fdb\u5165\u5c31\u7eea\u6001\u662f\u88ab\u52a8\u7684\uff1b terminated
: \u8fdb\u7a0b\u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u7ec8\u6b62\uff0c\u7ed3\u675f\u8fd0\u884c\uff0c\u9700\u8981\u91ca\u653e\u8d44\u6e90\uff1b \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
\u5173\u4e8e\u5e26 fork
\u7684\u7a0b\u5e8f\u5206\u6790\u662f\u4e00\u4e2a\u6bd4\u8f83\u91cd\u8981\u7684\u70b9\uff0c\u8bf7\u786e\u4fdd\u81ea\u5df1\u80fd\u6bd4\u8f83\u6d41\u7545\u5730\u5206\u6790\u76f8\u5173\u7a0b\u5e8f\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\u548c 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
\u590d\u5236 parent \u8fdb\u7a0b\u7684\u4ee3\u7801\u6570\u636e\uff1b \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\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\uff08child \u5e76\u4e0d\u77e5\u9053 parent \u4f1a\u4e0d\u4f1a\u3001\u4ec0\u4e48\u65f6\u5019\u6765\u56de\u6536\u5b83\uff09\u3002\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\u5e38\u89c1\u7684\u3002\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\u3002\u6b64\u65f6\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u540c\u65f6\u662f\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b(orphan)\uff0c\u5373\u6ca1\u6709 parent \u8fdb\u7a0b\u7684\u8fdb\u7a0b\u3002\u8fd9\u662f\u4e0d\u5408\u7406\u7684\u3002UNIX \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
\u4fe1\u53f7\u91cf(semaphores)\uff1a \u6211\u4eec\u5c06\u5728\u8fdb\u7a0b\u540c\u6b65\u8fd9\u4e00\u7ae0\u4e2d\u91cd\u70b9\u8bb2\u89e3\u4fe1\u53f7\u91cf\uff1b \u5171\u4eab\u5185\u5b58(shared memory)\uff1a \u76f8\u6bd4\u4e0b\u9762\u51e0\u79cd\u66f4\u5feb\uff0c\u9700\u8981\u7528\u5230 system call \u7684\u5730\u65b9\u53ea\u6709\u5efa\u7acb\u5171\u4eab\u5185\u5b58\u7684\u65f6\u5019\uff1b \u6d88\u606f\u4f20\u9012(message passing)\uff1a \u5728\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u66f4\u5bb9\u6613\u5b9e\u73b0\uff0c\u5bf9\u4e8e\u5c11\u91cf\u6570\u636e\u901a\u4fe1\u5f88\u6709\u7528\uff08\u56e0\u4e3a\u4e0d\u9700\u8981\u5904\u7406\u51b2\u7a81\u95ee\u9898\uff09\uff1b \u6587\u4ef6 / \u7ba1\u9053(pipe)\uff1a \u7ba1\u9053\u672c\u8d28\u4e0a\u4e5f\u662f\u4e00\u79cd\u6587\u4ef6\uff0c\u4f46\u4e00\u4e2a\u7ba1\u9053\u53ea\u652f\u6301\u5355\u5411\u4f20\u8f93\uff0c\u5373\u53ea\u80fd A \u5199 B \u8bfb\uff0c\u5982\u679c\u8981\u5b9e\u73b0\u53cc\u5411\u9700\u8981\u4e24\u4e2a\u7ba1\u9053\uff1b 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
\u5728\u4e24\u4e2a\u8fdb\u7a0b\u95f4\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362\uff1b \u5207\u6362\u5230\u7528\u6237\u6001\uff1b \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 lab1 \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
CPU \u4f7f\u7528\u7387(CPU utilization)\uff1a CPU \u4f7f\u7528\u65f6\u95f4 / \u603b\u65f6\u95f4\uff0c\u4ece CPU \u662f\u5426\u8db3\u591f\u5fd9\u788c\u6765\u770b\u786c\u4ef6\u6027\u80fd\u662f\u5426\u5145\u5206\u53d1\u6325\uff1b \u541e\u5410\u91cf(throughput)\uff1a \u5355\u4f4d\u65f6\u95f4\u5185\u5b8c\u6210\u7684\u8fdb\u7a0b\u6570\uff0c\u4ece\u7ed3\u679c\u6765\u770b\u4efb\u52a1\u5b8c\u6210\u662f\u5426\u8db3\u591f\u9ad8\u6548\uff1b \u5468\u8f6c\u65f6\u95f4(turnaround time)\uff1a \u4ece\u8fdb\u7a0b\u5f00\u59cb\u5efa\u7acb\u5230\u8fdb\u7a0b\u5b8c\u6210\u7684\u65f6\u95f4\uff0c\u5373\u5305\u62ec\u7b49\u5f85\u8fdb\u5165\u5185\u5b58\u3001\u5728\u5404\u79cd queue \u4e2d\u7684\u7b49\u5f85\u65f6\u95f4\u3001\u5728 CPU \u4e2d\u7684\u8fd0\u884c\u65f6\u95f4\u3001I/O \u65f6\u95f4\u7b49\uff0c\u901a\u8fc7\u89c2\u5bdf\u6700\u5927\u5468\u8f6c\u65f6\u95f4\uff0c\u80fd\u53cd\u6620\u8c03\u5ea6\u7684\u6548\u7387\u548c\u201c\u516c\u5e73\u6027\u201d\uff1b \u7b49\u5f85\u65f6\u95f4(waiting time)\uff1a \u8fdb\u7a0b\u5728 ready queue \u4e2d\u7b49\u5f85\u7684\u65f6\u95f4\u7684\u603b\u548c\uff0c\u7531\u4e8e\u4efb\u52a1\u6240\u9700\u8981\u7684 CPU \u65f6\u95f4\u3001I/O \u65f6\u95f4\u4e0d\u53d7\u8c03\u5ea6\u7b97\u6cd5\u5f71\u54cd\uff0c\u6240\u4ee5\u629b\u5f00\u8fd9\u4e9b\u53ea\u770b\u5728 ready queue \u4e2d\u7684\u7b49\u5f85\u65f6\u95f4\uff0c\u80fd\u53cd\u6620\u8c03\u5ea6\u7b97\u6cd5\u7684\u6548\u7387\uff1b \u5bb9\u6613\u53d1\u73b0\uff0c\u7b49\u5f85\u65f6\u95f4 = \u5468\u8f6c\u65f6\u95f4 - \u8fd0\u884c\u65f6\u95f4\uff1b \u54cd\u5e94\u65f6\u95f4(response time)\uff1a \u8fdb\u7a0b\u4ece\u53d1\u51fa\u8bf7\u6c42\u5230\u7b2c\u4e00\u6b21\u54cd\u5e94\u7684\u65f6\u95f4\uff0c\u80fd\u53cd\u5e94\u4ea4\u4e92\u5f0f\u7cfb\u7edf\u4e2d\u8c03\u5ea6\u7b97\u6cd5\u7684\u201c\u53ca\u65f6\u6027\u201d\uff1b \u4e0a\u9762\u4e94\u4e2a\u91cc\uff0c\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
\u753b\u51fa\u4e24\u8005\u7684\u7518\u7279\u56fe\uff1a
\u9996\u5148\u770b FCFS\uff0c\u5373\u6309\u7167\u987a\u5e8f\u6267\u884c\uff0c\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\uff0c\u518d\u6267\u884c P1\uff0c\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\u662f\u4f7f\u7528\u5206\u65f6\u6280\u672f\u7684\u8c03\u5ea6\u7b97\u6cd5\u3002\u7531\u4e8e\u65f6\u95f4\u7247\u5230\u671f\u540e\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u5f3a\u5236\u505c\u6b62\u8fdb\u7a0b\uff0c\u56e0\u6b64\u5b83\u662f\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
Real-time processes System processes Interactive processes 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
\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b > \u5185\u6838\u7ea7\u591a\u7ebf\u7a0b \u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u4e0d\u9700\u8981\u5185\u6838\u652f\u6301\u591a\u7ebf\u7a0b\uff0c\u4e0d\u9700\u8981\u8fdb\u5165\u5185\u6838\u6001\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff0c\u4e5f\u4e0d\u9700\u8981\u5360\u7528\u7ebf\u7a0b ID\uff0c\u56e0\u6b64\u7406\u8bba\u4e0a\u53ef\u4ee5\u6bd4\u5185\u6838\u7ea7\u652f\u6301\u66f4\u591a\u7684\u7ebf\u7a0b\u6570\uff1b \u7531\u4e8e\u5176\u5212\u5206\u662f\u9488\u5bf9\u8fdb\u7a0b\u7684\uff0c\u800c\u4e0d\u540c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u7ebf\u7a0b\u5b9e\u73b0\u6ca1\u6709\u76f4\u63a5\u5173\u7cfb\uff0c\u800c\u4e14\u7531\u4e8e\u662f\u5728\u7528\u6237\u7a7a\u95f4\u5b9e\u73b0\u7b97\u6cd5\uff0c\u6240\u4ee5\u80fd\u591f\u66f4\u5bb9\u6613\u7684\u5bf9\u5355\u4e2a\u8fdb\u7a0b\u5185\u7684\u591a\u4e2a\u7ebf\u7a0b\u7684\u8c03\u5ea6\u7b97\u6cd5\u8fdb\u884c\u81ea\u5b9a\u4e49\uff1b \u7528\u6237\u7ea7\u591a\u7ebf\u7a0b < \u5185\u6838\u7ea7\u591a\u7ebf\u7a0b \u7531\u4e8e\u5bf9\u5185\u6838\u6765\u8bf4\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u4ecd\u7136\u662f\u4e00\u4e2a\u666e\u901a\u7684\u8fdb\u7a0b\uff0c\u6240\u4ee5\u5f53\u7528\u6237\u7ea7\u7684\u7ebf\u7a0b\u51fa\u73b0\u963b\u585e\u65f6\uff0c\u5185\u6838\u4f1a\u8ba4\u4e3a\u6574\u4e2a\u8fdb\u7a0b\u90fd\u88ab\u963b\u585e\uff1b\u5185\u6838\u7ea7\u7ebf\u7a0b\u7531\u4e8e\u662f\u5185\u6838\u5b9e\u73b0\uff0c\u6240\u4ee5\u5355\u7ebf\u7a0b\u7684\u963b\u585e\u5e76\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u8fdb\u7a0b\u963b\u585e\uff1b \u5728\u591a\u6838\u7684\u60c5\u51b5\u4e0b\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u6ca1\u6cd5\u5229\u7528\u591a\u6838\u8fdb\u884c\u7ebf\u7a0b\u5e76\u884c\uff1b\u663e\u7136\u5185\u6838\u591a\u7ea7\u7ebf\u7a0b\u662f\u505a\u5f97\u5230\u8fd9\u4e00\u70b9\u7684\uff1b \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) One-to-one model. (b) Many-to-many model. (c) Many-to-one model.
Linux \u7ebf\u7a0b
Where memory will be allocated to \"Uninitialized Static variable\" upon initialization? \u21a9
What process is the parent of the init process in Linux? \u21a9
Linux CreateProcess? \u21a9
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 8261 \u4e2a\u5b57 216 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 44 \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\u90fd\u662f\u81ea\u987e\u81ea\u8dd1\u3002\u5373\uff0c\u662f\u5f02\u6b65\u7684\u3002\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\u4e00\u79cd\u201c\u540c\u6b65\u201d\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\u3002\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\u5fc3\u5316\u7684\u8c03\u63a7\u673a\u5236\uff0c\u800c\u66f4\u50cf\u662f\u4e00\u79cd\u201c\u534f\u8bae\u201d\uff1a\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
Race Condition | Wikipedia \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\u3002\u6362\u8a00\u4e4b\uff0c\u8981\u60f3\u4fee\u6539 mem[x]
\uff0c\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u6b65\u9aa4\uff1a
reg
<- mem[x]
\uff1b reg
<- update(reg
)\uff1b 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\u6211\u4eec\u5bf9\u7ade\u6001\u6761\u4ef6\u7684\u770b\u6cd5\u5e76\u4e0d\u5e94\u8be5\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\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
\u6211\u4eec\u771f\u6b63\u9700\u8981\u5173\u6ce8\u7684\u91cd\u70b9\u5e94\u8be5\u662f\u5982\u4f55\u907f\u514d\u8fd9\u79cd\u7ade\u4e89\u7684\u51fa\u73b0\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
\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 \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
\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
\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 \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 \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
\u5934\u8111\u98ce\u66b4
\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
\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 \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 \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
"},{"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 | Wikipedia 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\u8bf4\u660e\uff0centry section \u6ca1\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u8fd9\u91cc\u7684 TURN
\u662f\u6211\u4eec\u6545\u610f\u653e\u5728\u8fd9\u91cc\u7684\u3002
READY
\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\u5728\u7b2c 6 \u884c\u53ea\u5bf9 TURN
\u8fdb\u884c\u76f4\u63a5\u5199\u7684\u64cd\u4f5c\uff0c\u4f46\u662f P1 \u548c P2 \u8c01\u540e\u8dd1\u5b8c\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\u72ec\u7279\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
\\(P_0\\) \u60f3\u5750\u4e0b\uff0c\\(P_1\\) \u4e5f\u60f3\u5750\u4e0b\uff08\u5426\u5219\u5c31\u6ca1\u6709\u51b2\u7a81\uff0c\u53ef\u4ee5\u76f4\u63a5\u5750\u4e0b\u4e86\uff09\uff1b \\(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
READY[0]
= READY[1]
= true
\uff1b 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
\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u60f3\u8981\u8fdb\u5165 critical section\uff0c\u5373 READY[i]
\u548c READY[j]
\u90fd\u4e3a true
\uff1b TURN
\u7684\u503c\u4e0d\u518d\u4f1a\u88ab\u66f4\u6539\uff1b \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\uff0ci \u548c j \u53ea\u6709\u4e00\u4e2a\u80fd\u8fdb\u5165 critical section\uff1b\u53e6\u5916\u4e00\u4e2a\u53ea\u6709\u5728\u5148\u8fdb\u53bb\u7684\u90a3\u4e2a\u91ca\u653e\u8d44\u6e90\u4e86\u4ee5\u540e\u624d\u80fd\u8fdb\u53bb\uff0c\u6240\u4ee5\u6ee1\u8db3\u4e92\u65a5\u7684\u6761\u4ef6\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\u679c\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
\u4e00\u5f00\u59cb\u51b2\u7a81\u5c31\u4e0d\u5b58\u5728\uff1b 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
process j \u8fd8\u6ca1\u8fd0\u884c\u7b2c 6 \u884c\uff1b 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
process j \u6267\u884c\u7b2c 6 \u884c\u7684\u65f6\u95f4\uff1b 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\u4e0a\u8ff0\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
\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 \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
This Is Why They Call It a Weakly-Ordered CPU \u2b50\ufe0f Weak vs. Strong Memory Models \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 \u24f5 \u6211\u4eec\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u8fd0\u884c\u901f\u5ea6\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u24f6 \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 = (j + 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\u24f5 \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\u24f6 \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
target
\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u5730\u5740\uff1b expected
\u9884\u671f\u4e2d\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u65e7\u503c\uff1b 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
\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 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 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
The Critical Section Problem \u21a9
\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
Mutex access and system call | Stack Overflow \u21a9
\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 1570 \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
[READ] \u4ece\u6570\u636e\u5e93\u4e2d\u68c0\u7d22\u3001\u8bfb\u53d6\u6570\u636e\uff1b \u6570\u636e\u7ecf\u8fc7\u4e1a\u52a1\u903b\u8f91\u7684\u5904\u7406\uff0c\u5f97\u5230\u65b0\u503c\uff1b [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
reader \u548c writer \u7684\u51b2\u7a81\uff1b writer \u548c writer \u7684\u51b2\u7a81\uff1b \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 codewriter() {\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\u4e0d\u662f\u67d0\u4e2a reader\uff0c\u90a3\u4e48\u5b9e\u9645\u4e0a\u5b83\u624d\u662f\u7b2c\u4e00\u4e2a reader\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u83b7\u53d6 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\u91ca\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 codereader() {\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
read_count++
\uff1b read_count--
\uff1b 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
\u601d\u8003\uff1b \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
\u5141\u8bb8\u6700\u591a 4 \u4f4d\u54f2\u5b66\u5bb6\u540c\u65f6\u83b7\u53d6\u7b77\u5b50\uff1b \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 \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":" TODO: \u4e0d\u662f\u5f88\u91cd\u8981 "},{"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
\u7533\u8bf7\u8d44\u6e90\uff1b \u4f7f\u7528\u8d44\u6e90\uff1b \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
\u5f53\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u4e0d\u5b58\u5728\u73af\u65f6\uff0c\u8bf4\u660e\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\u72b6\u6001\uff1b \u5f53\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u5b58\u5728\u73af\u65f6\uff0c\u7cfb\u7edf\u53ef\u80fd\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\uff0c\u4e5f\u53ef\u80fd\u4e0d\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\uff1b \u7279\u4f8b\uff1a\u5982\u679c\u4e0e\u73af\u76f8\u5173\u7684\u8282\u70b9\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u65f6\u5019\uff0c\u7cfb\u7edf\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\uff1b \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
\u8fdb\u7a0b/\u7ebf\u7a0b\u7533\u8bf7\u67d0\u4e2a\u8d44\u6e90\u65f6\uff0c\u5728\u56fe\u4e2d\u6dfb\u52a0\u4e00\u6761\u5bf9\u5e94\u7684 request edge\uff1b \u5f53\u8d44\u6e90\u7d22\u53d6\u6210\u529f\u65f6\uff0c\u8fd9\u6761 request edge \u88ab\u66ff\u6362\u4e3a assignment edge\uff1b \u5f53\u8fdb\u7a0b\u91ca\u653e\u8fd9\u4e2a\u8d44\u6e90\u65f6\uff0c\u5219\u9700\u8981\u5c06\u8be5 assignment edge \u6d88\u9664\uff1b \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
\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 \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 \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 \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
\u4e0d\u505a\u989d\u5916\u5904\u7406\uff0c\u8981\u6c42\u7a0b\u5e8f\u5458\u4fdd\u8bc1\u903b\u8f91\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b \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 \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 \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
\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 \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 \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 \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
\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 \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 \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 \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
Available[m]
: number of available resources of each type. Max[n][m]
: maximum demand of each thread. Allocation[n][m]
: number of resources of each type currently allocated to each thread. Need[n][m]
: remaining resource need of each thread. \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
\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 \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 \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
\u7528 Request[n][m]
\u6765\u7ef4\u62a4\u8fdb\u7a0b/\u7ebf\u7a0b\u60f3\u8981\u8bf7\u6c42\u7684\u8d44\u6e90\u7684\u6570\u91cf\uff1b \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 \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 \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 \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
\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 \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 \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 What's the difference between deadlock and livelock? \u21a9
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
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 9177 \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
\u901a\u5e38\u6765\u8bf4\uff0c\u5728 compile time\uff0ccompiler \u4f1a\u5c06\u4ee3\u7801\u4e2d\u7684 symbol \u8f6c\u4e3a relocatable addresses\uff1b\u800c\u5982\u679c\u5728 compile time \u5c31\u77e5\u9053\u4e86\u8fdb\u7a0b\u6700\u7ec8\u4f1a\u88ab\u5b89\u7f6e\u5728\u4f55\u5904\uff0c\u90a3\u4e48\u5728 compile time \u5c31\u5c06 symbol \u8f6c\u4e3a absolute addresses \u4e5f\u662f\u53ef\u80fd\u7684\uff0c\u53ea\u4e0d\u8fc7\u5982\u679c\u6b64\u65f6\u8d77\u59cb\u5730\u5740\u53d1\u751f\u6539\u53d8\uff0c\u5c31\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u3002 \u800c\u4e00\u822c\u5728 load time\uff0crelocatable addresses \u4f1a\u8f6c\u4e3a absolute addresses\uff0c\u5f53\u8fdb\u7a0b\u8d77\u59cb\u5730\u5740\u53d1\u751f\u6539\u53d8\u65f6\uff0c\u6211\u4eec\u53ea\u9700\u8981\u91cd\u65b0\u88c5\u8f7d\u5373\u53ef\u3002 \u5982\u679c\u8fdb\u7a0b\u5728 execution time \u65f6\uff0c\u5141\u8bb8\u88ab\u79fb\u52a8\uff0c\u90a3\u4e48\u53ef\u80fd\u4ece relocatable addresses \u8f6c\u4e3a absolute addresses \u8fd9\u4e00\u6b65\u5c31\u9700\u8981\u5ef6\u8fdf\u5230 execution time \u6765\u6267\u884c\u3002\u7edd\u5927\u591a\u6570\u64cd\u4f5c\u7cfb\u7edf\u90fd\u4f7f\u7528\u8fd9\u79cd\u65b9\u6848\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\u4e0e\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
\u53c2\u8003\u9605\u8bfb\uff1aWhy does memory necessarily have to be contiguous? If it weren't, wouldn't this solve the issue of memory fragmentation? \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
First Fit Best Fit Worst Fit \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 \u8003\u8651\u6570\u5b66\u4e0a\u5982\u4f55\u5206\u7c7b\u201c\u51fd\u6570\u6620\u5c04\u201d\uff1b \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
page \u8868\u793a\u865a\u62df\u5185\u5b58\u4e2d\u7684\u5b8c\u6574\u4e00\u5757\uff1b 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
\u4f5c\u4e3a\u7f29\u5199\u7684 page \u6307\u4ee3 virtual page\uff0c\u5373\u865a\u62df\u5185\u5b58\u4e2d\u7684\u4e00\u5757\uff1b \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
page \u7684\u672c\u8d28\u662f\u201c\u6570\u636e\u4fe1\u606f\u201d\uff1b physical page \u662f page \u5728\u7269\u7406\u5185\u5b58\u4e0a\u7684\u5b9e\u9645\u5b58\u50a8\u5f62\u5f0f\uff1b 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
"},{"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\u3002\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} \\] \u5982\u679c\u9898\u4e2d\u7ed9\u4e86 TLB access time\uff0c\u5219\u9700\u8981\u5c06\u8fd9\u4e2a\u4e5f\u52a0\u4e0a\u53bb\uff0c\u56e0\u4e3a\u65e0\u8bba hit \u8fd8\u662f miss \u90fd\u9700\u8981\u8bbf\u95ee TLB\u3002
\\[ \\begin{aligned} &\\text{effective memory-access time} \\\\ &= (2 - p_{\\text{hit}})t + \\varepsilon_\\text{TLB cache access} \\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 Hash function | wikipedia \u54c8\u5e0c | \u9e64\u7fd4\u4e07\u91cc\u7684\u7b14\u8bb0\u672c Hashing | sakuratsuyu's Notes \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
Translation lookaside buffer | Wikipedia \u21a9
Cache replacement policies | Wikipedia \u21a9
\u51fa\u81ea Buttered cat paradox | Wikipedia\uff0c\u6211\u5728\u8fd9\u91cc\u8868\u793a\u6b7b\u5faa\u73af\u3002\u00a0\u21a9\u21a9
how does an inverted page table deal with multiple process accessing the same frame | Stack Overflow \u21a9
What is the difference between executable and relocatable in elf format? | Stack Overflow \u21a9
\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
Shared Memory \"Segment\" in Operating System | Stack Overflow \u21a9
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 7912 \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
\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 \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 \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
\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 \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
\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 \u5982\u679c\u662f\u60c5\u51b5 2.\uff0c\u5219\u7ee7\u7eed\u5982\u4e0b\u64cd\u4f5c\u4ee5\u5c06\u5176 page in\uff1b \u5982\u679c\u662f\u60c5\u51b5 3.\uff0c\u5219\u7ec8\u6b62\u8fdb\u7a0b\uff1b \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 \u5f00\u59cb\u4ece\u540e\u5907\u5b58\u50a8\u8bfb\u53d6\u5185\u5bb9\uff0c\u5e76\u5199\u5165 frame\uff1b \u5b8c\u6210\u8bfb\u5199\u540e\uff0c\u66f4\u65b0\u5185\u90e8\u8868\u548c\u9875\u8868\u7b49\u5143\u4fe1\u606f\uff1b \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
\u4ea7\u751f\u5f02\u5e38\u540e\uff0c\u8fdb\u884c\u4e00\u6b21 context switch \u540e\u8fdb\u5165\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\uff1b \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 \u53d1\u8d77\u540e\u5907\u5b58\u50a8 -> \u5185\u5b58\u7684 I/O \u8bf7\u6c42\uff1b \uff08\u7b49\u5f85\u8fc7\u7a0b\u4e2d CPU \u88ab\u8c03\u5ea6\uff09\uff1b 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 \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
\u5206\u914d\u7b56\u7565\uff1a\u521d\u59cb\u5316\u65f6\uff0c\u5982\u4f55\u5206\u914d\u8fdb\u7a0b\u6240\u9700\u8981\u7684 frame\uff1f \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
\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 \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
\u5229\u7528\u7f6e\u6362\u7b97\u6cd5(replacement algorithm)\u51b3\u5b9a\u54ea\u4e2a frame \u662f victim frame\uff1b \u5982\u679c\u6709\u5fc5\u8981\uff08dirty\uff09\uff0cvictim frame -> \u540e\u5907\u5b58\u50a8\uff1b \u66f4\u65b0\u76f8\u5173\u5143\u4fe1\u606f\uff1b \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
\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 \u5f53\u4e00\u4e2a frame \u88ab\u4f7f\u7528\u7684\u65f6\u5019\u5c06\u8ba1\u6570\u5668\u5f52\u96f6\uff1b \u9700\u8981\u8003\u8651\u6bcf\u4e2a frame \u7684\u8ba1\u6570\u5668\u90fd\u9700\u8981\u88ab\u5b9a\u671f\u66f4\u65b0\uff1b \u9700\u8981\u8003\u8651\u8ba1\u6570\u5668\u53ef\u80fd\u6ea2\u51fa\uff1b \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 \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 \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
LRU \u5bf9\u4e8e optimal \u7684\u62df\u5408\u662f\u6bd4\u8f83\u597d\u7684\uff1b LRU \u7b97\u6cd5\u4e0d\u4f1a\u51fa\u73b0 Belady's anomaly\uff1b \u7f3a\u9677
\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 \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
\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 \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\u4e00\u6574\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
\\((0, 0)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4e5f\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b \\((0, 1)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4f46\u88ab\u4fee\u6539\u8fc7\uff1b \\((1, 0)\\)\uff1a\u88ab\u7528\u8fc7\uff0c\u4f46\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b \\((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
Least frequently used(LFU) \u9009\u62e9 counter \u6700\u5c0f\u7684 frame \u4f5c\u4e3a victim frame\uff1b Most frequently used(MFU) \u9009\u62e9 counter \u6700\u5927\u7684 frame \u4f5c\u4e3a victim frame\uff1b \u8fd9\u4e2a\u505a\u6cd5\u57fa\u4e8e\u300ccounter \u5c0f\u7684 frame \u53ef\u80fd\u624d\u521a\u521a\u88ab load \u8fdb\u6765\u300d\u8fd9\u4e2a\u5047\u8bbe\uff1b \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
\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 \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 \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
Linux OOM (Out-of-memory) Killer | Medium \u21a9
Enhanced Second-Chance Algorithm \u21a9
"},{"location":"cour_note/D3QD_OperatingSystem/Unit4/","title":"Unit 4: \u8f93\u5165/\u8f93\u51fa | I/O","text":" \u7ea6 1321 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \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/Unit4/#io-\u6982\u8ff0","title":"I/O \u6982\u8ff0","text":"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
\u5728 Linux \u4e2d\uff0c\u53d7 \u201ceverything is a file\u201d \u601d\u60f3\u7684\u6307\u5bfc\uff0cI/O \u8bbe\u5907\u4e5f\u88ab\u770b\u4f5c\u4e00\u4e2a\u7279\u6b8a\u7684\u6587\u4ef6\u3002
concepts
\u603b\u7ebf(bus)\uff1a\u8fde\u63a5\u5404\u4e2a\u786c\u4ef6\u7ec4\u6210\u7684\u201c\u62bd\u8c61\u201d\u5185\u90e8\u901a\u4fe1\u7ebf\u8def\uff0c\u66f4\u4fa7\u91cd\u4e8e\u5982\u4f55\u89c4\u8303\u5316\u5730\u4f20\u8f93\u6570\u636e\uff0c\u662f\u786c\u4ef6\u4e0e\u534f\u8bae\u7684\u7edf\u4e001\uff1b \u7aef\u53e3(port)\uff1a\u8bbe\u5907\u4e0e\u603b\u7ebf\u7684\u8fde\u63a5\u70b9\uff1b \u63a7\u5236\u5668(controller)\uff1a\u63a7\u5236\u8bbe\u5907\u7684\u786c\u4ef6\u7ec4\u6210\uff1b \u96c6\u6210\u5728\u8bbe\u5907\u4e0a\u6216\u5355\u72ec\u5728\u7535\u8def\u677f\u4e0a\uff1b \u901a\u5e38\u5305\u62ec\u5904\u7406\u5668\u3001\u79c1\u6709\u5185\u5b58\u3001\u5fae\u4ee3\u7801\uff08\u5c0f\u91cf\u4ee3\u7801\uff09\u3001\u603b\u7ebf\u63a7\u5236\u5668\u7b49\uff1b "},{"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
\u78c1\u76d8\u5c31\u662f\u5178\u578b\u7684\uff0c\u901a\u5e38\u4f7f\u7528 DMA \u6765\u5b9e\u73b0 I/O \u7684\u8bbe\u5907\u3002
"},{"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 ioctl
Wiki\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
\u6570\u636e\u4f20\u8f93\u6a21\u5f0f(data transfer mode)\uff1a \u9010\u4e2a\u5b57\u8282\u4f20\u8f93\uff0c\u5982 terminal\uff1b \u4ee5\u5757\u4e3a\u5355\u4f4d\u4f20\u8f93\uff0c\u5982 disk\uff1b \u8bbf\u95ee\u65b9\u6cd5(access method)\uff1a \u9700\u8981\u987a\u5e8f\u8bbf\u95ee\uff0c\u5982 modemWiki\uff1b \u53ef\u4ee5\u968f\u673a\u8bbf\u95ee\uff0c\u5982 CD-ROM\uff1b \u4f20\u8f93\u65b9\u6cd5(transfer method)\uff1a \u540c\u6b65\u7684\uff0c\u9700\u8981\u6309\u9884\u8ba1\u7684\u54cd\u5e94\u65f6\u95f4\u8fdb\u884c\u4f20\u8f93\u5e76\u548c\u7cfb\u7edf\u7684\u5176\u4ed6\u65b9\u9762\u76f8\u534f\u8c03\uff0c\u5982 keyboard\uff1b \u963b\u585e\u5f0f\uff1a\u4e00\u76f4\u7b49\u5f85\u76f4\u5230 I/O \u5b8c\u6210\uff1b \u975e\u963b\u585e\u5f0f\uff1a\u8fd4\u56de\u5c3d\u53ef\u80fd\u591a\u7684\u6570\u636e\uff0c\u4e0d\u7ba1\u662f\u5426\u5b8c\u6210\uff1b \u5f02\u6b65\u7684\uff0c\u54cd\u5e94\u65f6\u95f4\u4e0d\u9700\u8981\u89c4\u5219\u6216\u8005\u53ef\u9884\u6d4b\uff0c\u4e0d\u9700\u8981\u4e0e\u5176\u4ed6\u8ba1\u7b97\u673a\u4e8b\u4ef6\u534f\u8c03\uff0c\u5982\u7f51\u7edc I/O\uff1b \u5171\u4eab(sharing)\uff1a \u53ef\u5171\u4eab\uff1a\u53ef\u4ee5\u88ab\u591a\u4e2a\u8fdb\u7a0b\u6216\u7ebf\u7a0b\u5e76\u53d1\u4f7f\u7528\uff0c\u5982 keyboard\uff1b \u72ec\u5360\u7684\uff1a\u4e0d\u80fd\u88ab\u5171\u4eab\uff0c\u5982 tape\uff1b \u8bbe\u5907\u901f\u5ea6(device speed) I/O \u65b9\u5411(I/O direction)\uff1a R-
\uff0c\u5982 CD-ROM\uff1b -W
\uff0c\u5982 graphics controllerWiki\uff1b RW
\u5982 disk\uff1b \u4fee\u6539\u81ea xyx \u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0\u3002
Bus (computing) | Wikipedia \u21a9
"},{"location":"cour_note/D3QD_OperatingSystem/Unit5/","title":"Unit 5: \u5b58\u50a8 | Storage","text":" \u7ea6 3547 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 18 \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
\u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u67f1\u9762\uff1b \u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u78c1\u9053\uff1b \u78c1\u76d8\u65cb\u8f6c\u5230\u6247\u533a\u4f4d\u4e8e\u78c1\u5934\u4e0b\u65b9\uff1b \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
\u5b9a\u4f4d\u65f6\u95f4(positioning time / random-access time)\uff1a \u5bfb\u9053\u65f6\u95f4(seek time)\uff1a\u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u67f1\u9762\u7684\u65f6\u95f4\uff1b \u65cb\u8f6c\u65f6\u5ef6(rotational latency)\uff1a\u76ee\u6807\u6247\u533a\u65cb\u8f6c\u5230\u78c1\u5934\u4e0b\u65b9\u7684\u65f6\u95f4\uff1b \u53d6\u51b3\u4e8e\u78c1\u76d8\u7684\u8f6c\u901f\uff0c\u4e00\u822c\u4ee5 round per minute(rpm) \u8868\u793a\uff0c\u5bb9\u6613\u5f97\u5230\uff0c\u5e73\u5747\u65cb\u8f6c\u65f6\u5ef6\u4e3a \\(\\frac{1}{2} \\cdot \\frac{1}{rpm} \\cdot 60\\) \u79d2\uff1b \u4f20\u8f93\u65f6\u95f4(transfer time)\uff1a\u6570\u636e\u5728 disk \u548c\u3000memory \u4e4b\u95f4\u4f20\u8f93\u7684\u65f6\u95f4\uff1b \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
\u5f00\u9500\u7684\u5927\u5934\u662f access time\uff1b \u8bf7\u6c42\u6d89\u53ca\u7684\u5185\u5b58\u8ddd\u79bb\u8d8a\u8fdc\uff0c\u5177\u4f53\u7684 access time \u8d8a\u5927\uff1b \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)Wiki\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
\u4f4e\u5e73\u5747\u54cd\u5e94\u65f6\u95f4\uff1b \u9ad8\u541e\u5410\u91cf\uff1b Disadvantages
\u54cd\u5e94\u65f6\u95f4\u65b9\u5dee\u8f83\u5927\uff1b \u5b58\u5728\u9965\u997f\u95ee\u9898\uff08\u4e0a\u9762\u90a3\u4e2a\u95ee\u9898\u7684\u6781\u7aef\u60c5\u51b5\uff09\uff1b \u8ba1\u7b97 seek time \u9700\u8981\u989d\u5916\u5f00\u9500\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#scan--look","title":"SCAN & LOOK","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
\u9ad8\u541e\u5410\u91cf\uff1b \u54cd\u5e94\u65f6\u95f4\u65b9\u5dee\u4f4e\uff08\u66f4\u5747\u5300\u5730\u54cd\u5e94\uff09\uff1b \u5e73\u5747\u54cd\u5e94\u65f6\u95f4\u4f4e\uff1b Disadvantages
\u7531\u4e8e\u79fb\u52a8\u5355\u5411\uff0c\u6240\u4ee5\u5982\u679c\u8bf7\u6c42\u53d1\u751f\u5728\u78c1\u5934\u521a\u521a\u7ecf\u8fc7\u7684\u5730\u65b9\uff0c\u90a3\u4e48\u53ef\u80fd\u4f1a\u9700\u8981\u7b49\u5f85\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u54cd\u5e94\uff1b \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 LOOK \u7b97\u6cd5\u3002\u663e\u800c\u6613\u89c1\u7684\uff0cLOOK \u7b97\u6cd5\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 SCAN\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#c-scan--c-look","title":"C-SCAN & C-LOOK","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
C-SCAN \u76f8\u6bd4 SCAN \u6709\u66f4\u5747\u5300\u7684\u7b49\u5f85\u65f6\u95f4\uff1b \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-LOOK \u7b97\u6cd5\u3002\u540c\u6837\uff0cC-LOOK \u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 C-SCAN\u3002
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u5047\u8bbe\u8bbe\u5907 LBA \u4ece 0 \u5230 4999\uff0c\u73b0\u5728\u78c1\u5934\u4f4d\u4e8e 143
\u3002\u6b64\u65f6\uff0c\u63a5\u4e0b\u6765\u5f85\u89e3\u51b3\u8bf7\u6c42\u6309\u7167\u5148\u6765\u540e\u5230\u7684\u987a\u5e8f\u6392\u5217\u4e3a\uff1a86
, 1470
, 913
, 1774
, 948
, 1509
, 1022
, 1750
, 130
\uff0c\u5e76\u5047\u8bbe\u4e4b\u540e\u4e0d\u4f1a\u518d\u6709\u65b0\u7684\u8bf7\u6c42\u3002
\u5982\u679c\u78c1\u5934\u4ece LBA = x \u7684\u5730\u65b9\u79fb\u52a8\u5230 LBA = y \u7684\u5730\u65b9\u9700\u8981\u7ecf\u8fc7\u7684\u8ddd\u79bb\u4e3a |x - y|\uff0c\u8bf7\u95ee\u91c7\u7528\u5982\u4e0b\u8fd9\u4e9b\u7b56\u7565\uff0c\u78c1\u5934\u7684 seek distance \u5206\u522b\u4e3a\u591a\u5c11\uff1f
FCFS SSTF SCAN\uff08\u5148\u5411\u53f3\uff09 LOOK\uff08\u5148\u5411\u53f3\uff09 C-SCAN\uff08\u5411\u53f3\uff09 C-LOOK\uff08\u5411\u53f3\uff09 \u63d0\u793a\uff1a\u4ece\u8ba1\u7b97\u4e0a\u6765\u8bb2\u6bd4\u8f83\u7e41\u7410\u7684\u5c31\u53ea\u6709\u7b2c\u4e00\u4e2a\uff0c\u540e\u9762\u7684\u90fd\u6709\u6bd4\u8f83\u5bb9\u6613\u7684\u7b97\u6cd5\u3002
FCFS\uff1a
\u6ca1\u4ec0\u4e48\u597d\u8bf4\u7684\uff0c\u8001\u8001\u5b9e\u5b9e\u4e00\u4e2a\u4e00\u4e2a\u7b97\u8fc7\u6765\u5427\uff0c\u7b54\u6848\u662f 7081\u3002
SSTF\uff1a
\u9700\u8981\u5bfb\u627e\u6700\u8fd1\u7684\uff0c\u4f46\u662f\u4e71\u5e8f\u6765\u770b\u5f88\u96be\u53d7\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5148\u6392\u5e8f\u4e00\u4e0b\uff0c\u5f97\u5230\uff1a
86
, 130
, 913
, 948
, 1022
, 1470
, 1509
, 1750
, 1774
\u800c\u6211\u4eec\u5f53\u524d\u7684\u4f4d\u7f6e\u662f 143
\uff0c\u6240\u4ee5\u6700\u8fd1\u7684\u5c31\u662f 130
\uff0c\u56e0\u6b64\u8ba1\u5165 143 - 130
\uff1b\u7136\u540e\u5c31\u662f 86
\uff0c\u8ba1\u5165 130 - 86
\uff1b\u63a5\u4e0b\u6765\u6211\u4eec\u53d1\u73b0\u5de6\u4fa7\u90fd\u6ca1\u6570\u5b57\u4e86\uff0c\u53f3\u4fa7\u662f\u5355\u5411\u7684\uff0c\u6240\u4ee5\u76f4\u63a5\u52a0\u4e0a\u4e00\u4e2a 1774
- 86
\u5c31\u597d\u4e86\u3002\u6700\u7ec8\u7ed3\u679c\u662f 1745
\u3002
SCAN\uff1a
\u7531\u4e8e\u8fd9\u91cc\u7684\u4e1c\u897f\u90fd\u662f\u4e00\u6b21\u6027\u7ed9\u51fa\u6765\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u9700\u8981\u5411\u53f3\u626b\u5230\u5e95\uff0c\u7136\u540e\u626b\u56de\u6765\u5230 86
\u5373\u53ef\u3002
\u6240\u4ee5\u7b54\u6848\u662f 4999
- 143
+ 4999
- 86
= 9769
\u3002
LOOK\uff1a
\u6211\u4eec\u5f88\u5bb9\u6613\u53d1\u73b0\uff0c\u6211\u4eec\u9700\u8981\u5904\u7406\u7684\u660e\u660e\u6700\u5927\u624d 1774
\uff0c\u4f46\u662f\u5374\u5f97\u8dd1\u5230 4999
\uff0c\u6240\u4ee5\u4f7f\u7528 LOOK \u7684\u8bdd\u6211\u4eec\u5c31\u53ef\u4ee5\u7701\u5f88\u591a\u8ddd\u79bb\u3002\u53ea\u9700\u8981\u626b\u5230 1774
\u7136\u540e\u518d\u626b\u56de\u5230 130
\u5373\u53ef\u3002
\u6240\u4ee5\u7b54\u6848\u662f 1774
- 143
+ 1774
- 86
= 3319
\u3002
C-SCAN\uff1a
\u7c7b\u4f3c SCAN\uff0c\u5411\u53f3\u626b\u5230\u5e95\uff0c\u7136\u540e\u4ece\u5de6\u626b\u5230 130
\uff08\u56e0\u4e3a\u8fd4\u7a0b\u4e0d\u4f1a\u5904\u7406\uff0c\u6240\u4ee5\u5904\u7406\u7684\u987a\u5e8f\u662f\u5148 86
\u518d 130
\uff09\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u867d\u7136 LOOK \u53ea\u5728\u5411\u53f3\u626b\u7684\u65f6\u5019\u505a\u5904\u7406\uff0c\u4f46\u662f\u8fd4\u7a0b\u4e5f\u9700\u8981\u8ba1\u5165 seek distance\uff0c\u6bd5\u7adf arm \u4e0d\u53ef\u80fd\u662f\u95ea\u73b0\u56de 0
\u3002
\u6240\u4ee5\u7b54\u6848\u662f 4999
- 143
+ 4999
+ 130
= 9985
\u3002
C-LOOK\uff1a
\u7c7b\u4f3c LOOK\uff0c\u5411\u53f3\u626b\u5230 1774
\uff0c\u7136\u540e\u4ece\u5de6\u626b\u5230 130
\uff0c\u540c\u6837\uff0c\u4e0d\u80fd\u5fd8\u8bb0\u8ba1\u5165\u8fd4\u7a0b\u7684 seek distance\u3002
\u6240\u4ee5\u7b54\u6848\u662f 1774
- 143
+ 1774
- 86
+ 130
- 86
= 3363
\uff0c\u7136\u540e\u4f60\u4f1a\u53d1\u73b0\uff0c\u753b\u6a2a\u7ebf\u7684\u90e8\u5206\u5c31\u662f LOOK \u7684\u8ba1\u7b97\u65f6\u95f4\uff0c\u800c 130
- 86
\u5c31\u53cd\u5e94\u4e86 C-XXXX \u7b97\u6cd5\u8fd4\u7a0b\u4e0d\u5904\u7406\u7684\u7279\u70b9\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 LOOK \u6216\u8005 C-LOOK\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
\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 \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 \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
\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 \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 \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\uff08\u4e0d\u9700\u8981\u518d\u7ecf\u8fc7\u7cfb\u7edf\u8c03\u7528\uff09\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
Volume (computing) | Wikipedia \u21a9
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/","title":"Unit 6: \u6587\u4ef6\u7cfb\u7edf | File System","text":" \u7ea6 8843 \u4e2a\u5b57 47 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 45 \u5206\u949f
\u5173\u4e8e FCB
\u4e66\u672c\u4e0a\u5e76\u6ca1\u6709\u5f3a\u8c03 FCB \u7ef4\u62a4\u7684\u662f\u6253\u5f00\u7684\u6587\u4ef6\u7684\u4fe1\u606f\uff08\u751a\u81f3\u6697\u6233\u6233\u5730\u5728\u5426\u5b9a\u8fd9\u53e5\u8bdd\uff09\uff0c\u4f46\u662f\u505a\u9898\u7684\u65f6\u5019\u53ef\u80fd\u4f1a\u5f3a\u8c03\u8fd9\u4e00\u70b9\u3002\u5173\u4e8e\u8fd9\u4e00\u70b9\u6211\u8fd8\u9700\u8981\u505a\u4e00\u4e9b\u8003\u8bc1\uff0c\u8bf7\u8bfb\u8005\u4fdd\u6301\u5ba1\u614e\u7684\u6001\u5ea6\u3002
\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
name
\uff1a\u8fd9\u662f\u552f\u4e00\u7684\u4ee5 human-readable \u5f62\u5f0f\u4fdd\u5b58\u7684\u4fe1\u606f\uff0c\u5373\u6587\u4ef6\u540d\uff1b identifier
\uff1a\u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u7528\u4e8e\u552f\u4e00\u6807\u8bc6\u4e00\u4e2a\u6587\u4ef6\uff1b type
\uff1a\u4e00\u4e9b\u6587\u4ef6\u7cfb\u7edf\u9700\u8981\u652f\u6301\u4e0d\u540c\u7684\u6587\u4ef6\u7c7b\u578b\uff0c\u6b64\u65f6\u8fd9\u4e9b\u4fe1\u606f\u7528\u4e8e\u6807\u8bc6\u7c7b\u578b\uff1b location
\uff1a\u6807\u8bc6\u6587\u4ef6\u5728\u54ea\u4e2a\u8bbe\u5907\u7684\u54ea\u4e2a\u4f4d\u7f6e\uff1b size
\uff1a\u5f53\u524d\u6587\u4ef6\u5927\u5c0f\uff0c\u4e5f\u53ef\u80fd\u5305\u542b\u6587\u4ef6\u88ab\u5141\u8bb8\u7684\u6700\u5927\u5927\u5c0f\uff1b protection
\uff1a\u8bbf\u95ee\u63a7\u5236\u4fe1\u606f\uff0c\u51b3\u5b9a\u54ea\u4e9b\u7528\u6237\u5177\u6709\u5bf9\u5e94\u7684\u8bfb/\u5199/\u6267\u884c\u6743\u9650\u7b49\uff1b timestamp
\uff1a\u4fdd\u5b58\u521b\u5efa\u65f6\u95f4\u3001\u4e0a\u6b21\u4fee\u6539\u65f6\u95f4\u3001\u4e0a\u6b21\u4f7f\u7528\u65f6\u95f4\u7b49\uff0c\u8fd9\u4e9b\u4fe1\u606f\u53ef\u7528\u6765\u505a\u4e00\u4e9b\u5b89\u5168\u4fdd\u62a4\u548c\u4f7f\u7528\u76d1\u63a7\uff1b user indentification
\uff1a\u521b\u5efa\u8005\u3001\u4e0a\u6b21\u4fee\u6539\u8005\u3001\u4e0a\u6b21\u8bbf\u95ee\u8005\u7b49\uff0c\u8fd9\u4e9b\u4fe1\u606f\u53ef\u7528\u6765\u505a\u4e00\u4e9b\u5b89\u5168\u4fdd\u62a4\u548c\u4f7f\u7528\u76d1\u63a7\uff1b \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
create
\uff1a\u5206\u4e3a\u4e24\u6b65\uff0c\u24f5 \u5728\u6587\u4ef6\u7cfb\u7edf\u4e2d\u4e3a\u6587\u4ef6\u5206\u914d\u4e00\u5757\u7a7a\u95f4\uff0c\u24f6 \u5728\u76ee\u5f55\u4e2d\u521b\u5efa\u5bf9\u5e94\u7684\u6761\u76ee\uff1b open
/ close
\uff1a\u6253\u5f00\u6587\u4ef6\u540e\u4f1a\u5f97\u5230\u6587\u4ef6\u7684\u53e5\u67c4(handle)\uff0c\u5176\u5b83\u5bf9\u7279\u5b9a\u6587\u4ef6\u7684\u64cd\u4f5c\u4e00\u822c\u90fd\u9700\u8981\u901a\u8fc7\u8fd9\u4e2a\u53e5\u67c4\u6765\u5b8c\u6210\uff0c\u7c7b\u4f3c\u4e8e\u201c\u4e0e\u6587\u4ef6\u5efa\u7acb\u4e00\u4e2a\u4f1a\u8bdd\u201d\uff0c\u5173\u95ed\u6587\u4ef6\u5c31\u662f\u201c\u7ed3\u675f\u8fd9\u4e2a\u4f1a\u8bdd\u201d\uff1b \u901a\u5e38\u6765\u8bf4\uff0c\u6587\u4ef6\u88ab\u6253\u5f00\u540e\u9700\u8981\u7531\u7528\u6237\u6765\u8d1f\u8d23\u5173\u95ed\uff1b \u6253\u5f00\u540e\u7684\u6587\u4ef6\u4f1a\u88ab\u52a0\u5165\u5230\u4e00\u4e2a\u6253\u5f00\u6587\u4ef6\u8868(open-file table)\u4e2d\uff0c\u8fd9\u4e2a\u8868\u4e2d\u4fdd\u5b58\u4e86\u6240\u6709\u6253\u5f00\u7684\u6587\u4ef6\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u6587\u4ef6\u7684\u53e5\u67c4\u3001\u6587\u4ef6\u7684\u4f4d\u7f6e\u3001\u6587\u4ef6\u7684\u8bbf\u95ee\u6743\u9650\u7b49\uff1b \u6587\u4ef6\u53ef\u80fd\u88ab\u591a\u65b9\u7528\u6237\uff08\u8fdb/\u7ebf\u7a0b\uff09\u6253\u5f00\uff0c\u800c\u53ea\u6709\u6240\u6709\u7528\u6237\u90fd\u5173\u95ed\u6587\u4ef6\u540e\u624d\u5e94\u5f53\u91ca\u653e\u6587\u4ef6\u5728\u6253\u5f00\u6587\u4ef6\u8868\u4e2d\u7684\u6761\u76ee\uff0c\u6240\u4ee5\u7ef4\u62a4\u4e00\u4e2a open-file count \u7528\u4e8e\u8bb0\u5f55\u5f53\u524d\u6587\u4ef6\u88ab\u6253\u5f00\u7684\u6b21\u6570\uff0c\u6709\u70b9\u7c7b\u4f3c\u667a\u80fd\u6307\u9488\uff1b read
/ write
\uff1a\u7ef4\u62a4\u4e00\u4e2a current-file-position pointer \u8868\u793a\u5f53\u524d\u64cd\u4f5c\u7684\u4f4d\u7f6e\uff0c\u5728\u5bf9\u5e94\u4f4d\u7f6e\u4e0a\u505a\u8bfb\u5199\u64cd\u4f5c\uff0c\u6709\u4e00\u70b9\u50cf\u56fe\u7075\u673a\uff1b repositioning within a file
\uff1a\u5c06 current-file-position pointer \u7684\u4f4d\u7f6e\u91cd\u65b0\u5b9a\u4f4d\u5230\u7ed9\u5b9a\u503c\uff08\u5982\u6587\u4ef6\u5f00\u5934\u6216\u7ed3\u5c3e\uff09\uff0c\u4e5f\u88ab\u53eb\u505a seek
\uff1b delete
\uff1a\u5728 directory \u4e2d\u627e\u5230\u5bf9\u5e94\u6761\u76ee\u5e76\u5220\u9664\u8be5\u6761\u76ee\uff0c\u5982\u679c\u6b64\u65f6\u5bf9\u5e94\u7684\u6587\u4ef6\u6ca1\u6709\u5176\u5b83\u786c\u94fe\u63a5\uff0c\u5219\u9700\u8981\u91ca\u653e\u5176\u7a7a\u95f4\uff0c\u7c7b\u4f3c\u4e8e\u667a\u80fd\u6307\u9488\uff1b truncate
\uff1a\u6e05\u7a7a\u6587\u4ef6\u5185\u5bb9\uff0c\u4f46\u4fdd\u7559\u6587\u4ef6\u5c5e\u6027\uff1b locking
\uff1b \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 0xFFD8
1\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
\u65e0\u7ed3\u6784\uff1a\u6d41\u5f0f\u7684\u5b58\u50a8\u6240\u6709\u7684 words/bytes\uff0cUNIX \u5c31\u5b9a\u4f4d\u4eea\u6240\u6709\u6587\u4ef6\u5c31\u662f\u666e\u901a\u7684\u4e00\u4e32\u5b57\u8282\uff1b \u7b80\u5355\u8bb0\u5f55\u7ed3\u6784(simple record structure)\uff1a\u5c06\u6587\u4ef6\u4ee5 record \u4e3a\u5355\u4f4d\u5b58\u50a8\uff0crecord \u7684\u957f\u5ea6\u53ef\u4ee5\u662f fixed \u4e5f\u53ef\u4ee5\u662f variable \u7684\uff0c\u4f8b\u5982\u6570\u636e\u5e93\u6587\u4ef6\uff1b \u590d\u6742\u7ed3\u6784(complex structures)\uff1b "},{"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\uff08Linux \u4e2d\uff09\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\u53ef\u4ee5\u8ba4\u4e3a\u76ee\u5f55\u80fd\u591f\u5b9e\u73b0 filename \u5230 FCB \u7684\u6620\u5c04\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u76ee\u5f55\u7ed3\u6784\u7684\u8bbe\u8ba1\u3002
\u800c\u5728 Windows \u4e2d\uff0c\u76ee\u5f55\u548c\u6587\u4ef6\u6709\u4e0d\u540c\u7684\u7cfb\u7edf\u8c03\u7528\u6765\u63a7\u5236\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
\u4e3a\u4e86\u5b9e\u73b0\u7d22\u5f15\uff0c\u6587\u4ef6\u7684\u540d\u5b57\u5fc5\u987b\u662f\u552f\u4e00\u7684\uff1b \u968f\u7740\u6587\u4ef6\u6570\u91cf\u7684\u589e\u5927\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u6108\u53d1\u4e0d\u5408\u7406\uff1b "},{"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
\u76f8\u6bd4\u4e8e\u5355\u7ea7\u76ee\u5f55\uff0c\u4e0d\u540c\u7528\u6237\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u540d\u53ef\u4ee5\u76f8\u540c\u4e86\uff1b disadvantages
\u5e76\u6ca1\u6709\u4ece\u6839\u6e90\u4e0a\u89e3\u51b3\u65e0\u6cd5\u5206\u7ec4\u7684\u95ee\u9898\uff1b "},{"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
\u89e3\u51b3\u4e86\u81ea\u7531\u5206\u7ec4\u7684\u95ee\u9898\uff0c\u4f7f\u6587\u4ef6\u7cfb\u7edf\u7684\u7ed3\u6784\u5316\u7ba1\u7406\u80fd\u529b\u5927\u5927\u589e\u5f3a\uff1b "},{"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 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) ... "},{"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\"]);
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 \u5176\u4e2d\u8bbe\u5907\u9a71\u52a8(device driver)\u63d0\u4f9b\u4e86\u4e00\u5957\u7edf\u4e00\u7684\u63a5\u53e3\uff0c\u901a\u5e38\u662f\u4e00\u7cfb\u5217\u5f02\u6b65\u4e2d\u65ad\u5904\u7406\u65b9\u6848\uff1b5 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 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 address \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 Logical file system \u5b58\u50a8\u4e00\u4e9b\u6587\u4ef6\u7cfb\u7edf\u7684\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 FCB \u4f1a\u7ef4\u62a4\u88ab\u6253\u5f00\u7684\u6587\u4ef6\u7684\u4e00\u4e9b\u5177\u4f53\u4fe1\u606f\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u7684\u5b9e\u73b0","title":"\u6587\u4ef6\u7cfb\u7edf\u7684\u5b9e\u73b0","text":"\u4e3a\u4e86\u5b9e\u73b0\u6587\u4ef6\u7cfb\u7edf\uff0c\u6211\u4eec\u9700\u8981\u5728\u786c\u76d8\u548c\u5185\u5b58\u4e2d\u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u7ed3\u6784\uff0c\u4e0b\u9762\u5206\u522b\u4ecb\u7ecd on-disk structures \u548c in-memory structures\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u786c\u76d8\u6570\u636e\u7ed3\u6784","title":"\u786c\u76d8\u6570\u636e\u7ed3\u6784","text":"On-Disk \u7684\u6570\u636e\u7ed3\u6784\u7ef4\u62a4 \u24f5 \u5982\u4f55\u542f\u52a8\u786c\u76d8\u4e2d\u7684 OS\uff0c\u24f6 \u786c\u76d8\u4e2d\u5305\u62ec\u7684 block \u603b\u6570\uff0c\u24f7 \u7a7a\u95f2 block \u7684\u6570\u91cf\u548c\u4f4d\u7f6e\uff0c\u24f8 \u76ee\u5f55\u7ed3\u6784\u4ee5\u53ca\u6587\u4ef6\u4e2a\u4f53\u7b49\uff0c\u4e0b\u9762\u4ecb\u7ecd\u51e0\u4e2a\u4e3b\u8981\u7684\u6570\u636e\u7ed3\u6784\u3002
Boot control block \u64cd\u4f5c\u7cfb\u7edf\u88ab\u4fdd\u5b58\u5728\u5f15\u5bfc\u63a7\u5236\u5757(boot control block)\u4e2d\uff0c\u4e00\u822c boot control block \u662f\u64cd\u4f5c\u7cfb\u7edf\u6240\u5728\u7684 volume \u7684\u7b2c\u4e00\u4e2a block\u3002 \u5728 UFS \u4e2d\uff0cboot control block \u4e5f\u88ab\u79f0\u4e3a boot block\uff1b\u5728 NTFS \u4e2d\uff0c\u4e5f\u88ab\u79f0\u4e3a partition boot sector\u3002 \u8be5\u6570\u636e\u7ed3\u6784\u662f per volume \u7684\u3002 Volume control block \u5377\u63a7\u5236\u5757(volume control block)\u7ef4\u62a4\u4e86 volume \u7684\u5177\u4f53\u4fe1\u606f\uff0c\u4f8b\u5982 volume \u7684 blocks \u6570\u91cf\u3001\u7a7a\u95f2 block \u7684\u6570\u91cf\u4e0e\u6307\u9488\u3001\u7a7a\u95f2 PCB \u7684\u6570\u91cf\u4e0e\u6307\u9488\u7b49\u3002 \u5728 UFS volume control block \u4e5f\u88ab\u79f0\u4e3a superblock\uff1b\u5728 NTFS \u4e2d\uff0c\u4e5f\u88ab\u79f0\u4e3a master file table\u3002 \u8be5\u6570\u636e\u7ed3\u6784\u662f per volume \u7684\u3002 Directory structure \u76ee\u5f55\u7ed3\u6784(directory structure)\u5df2\u7ecf\u5728\u524d\u9762\u63d0\u5230\u8fc7\uff0c\u5b83\u7528\u6765\u7ec4\u7ec7 files\uff0c\u540c\u65f6\u4e5f\u7ef4\u62a4\u4e86 files \u7684\u5143\u4fe1\u606f\u3002 \u5728 UFS \u4e2d\uff0c\u5b83\u7ef4\u62a4\u4e86\u6587\u4ef6\u4ee5\u53ca\u5bf9\u5e94\u7684 inode numbers\uff1b\u5728 NTFS \u4e2d\uff0c\u5b83\u5728 master file table \u4e2d\u88ab\u7ef4\u62a4\u3002 \u8be5\u6570\u636e\u7ed3\u6784\u662f per FS \u7684\u3002 File control block \u6587\u4ef6\u63a7\u5236\u5757(file control block, FCB)Wiki\u7ef4\u62a4\u4e86\u88ab\u6253\u5f00\u7684\u6587\u4ef6\u7684\u5177\u4f53\u4fe1\u606f\u3002PCB \u4e00\u822c\u6709\u4e00\u4e2a\u552f\u4e00\u7684\u6807\u8bc6\u7b26\u4e0e\u76ee\u5f55\u9879\u5173\u8054\u3002 \u6ce8\u610f\uff1a\u7406\u8bba\u4e0a\u7684 FCB \u5b9a\u4e49\u5982\u4e0a\uff0c\u5e94\u5f53\u4e3b\u8981\u5b58\u5728\u4e8e\u5185\u5b58\u4e2d\uff1b\u4f46\u662f\u8bfe\u672c\u4e2d\u7684 FCB \u6307\u7684\u662f\u66f4\u5e7f\u6cdb\u7684\uff0c\u56e0\u6b64\u5728\u786c\u76d8\u4e2d\u7ef4\u62a4\u6587\u4ef6\u5143\u4fe1\u606f\u7684\u90a3\u4e9b\u4e1c\u897f\u4e5f\u88ab\u79f0\u4e3a FCB\uff0c\u8bfb\u8005\u9700\u8981\u5728\u8fd9\u91cc\u68b3\u7406\u6e05\u695a\u8fd9\u79cd\u5b9a\u4e49\u4e0a\u7684\u504f\u5dee\uff01 \u4f8b\u5982\uff0c\u5b83\u53ef\u80fd\u88ab\u5305\u542b\u5982\u4e0b\u4fe1\u606f\uff1a \u6587\u4ef6\u6743\u9650\uff1b \u6587\u4ef6\u64cd\u4f5c\u65e5\u671f\uff1b ACL\uff1b \u6587\u4ef6\u5927\u5c0f\uff1b \u6587\u4ef6\u6570\u636e\u6240\u5728\u7684 block \u6216\u8fd9\u4e2a block \u7684\u6307\u9488\uff1b ... \u5728 UFS \u4e2d\uff0cFCB \u6307\u7684\u5c31\u662f\u4e00\u4e2a inode\uff1b\u5728 NTFS \u4e2d\uff0cPCB \u901a\u5e38\u5728 master file table \u4e2d\u88ab\u7ef4\u62a4\uff0c\u5176\u7ef4\u62a4\u5f62\u5f0f\u7c7b\u4f3c\u4e8e\u5173\u7cfb\u5f62\u6570\u636e\u5e93\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5185\u5b58\u6570\u636e\u7ed3\u6784","title":"\u5185\u5b58\u6570\u636e\u7ed3\u6784","text":"In-Memory \u7684\u6570\u636e\u7ed3\u6784\u5728 main memory \u4e2d\u7ef4\u62a4\uff0c\u7528\u4e8e\u5e2e\u52a9\u6587\u4ef6\u7cfb\u7edf\u7ba1\u7406\u548c\u4e00\u4e9b\u7f13\u5b58\u64cd\u4f5c\u3002
Mount table \u5df2\u88ab\u6302\u8f7d\u7684 volume \u4f1a\u88ab\u8bb0\u5f55\u5728 mount table \u4e2d\u3002 Directory cache \u4e3a\u4e86\u63d0\u9ad8\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\uff0c\u4e00\u4e9b\u6700\u8fd1\u88ab\u8bbf\u95ee\u7684\u76ee\u5f55\u4fe1\u606f\u4f1a\u88ab\u7f13\u5b58\u5230\u5185\u5b58\u4e2d\uff0c\u8fd9\u4e9b\u7f13\u5b58\u7684\u76ee\u5f55\u4fe1\u606f\u88ab\u79f0\u4e3a directory cache\u3002 System-wide open-file table \u8bb0\u5f55\u8fd9\u4e2a\u7cfb\u7edf\u4e2d\u6240\u6709\u8fdb\u7a0b\u6253\u5f00\u7684\u6587\u4ef6\u3002 Per-process open-file table \u8bb0\u5f55\u6bcf\u4e2a\u8fdb\u7a0b\u6253\u5f00\u7684\u6587\u4ef6\uff0c\u5176 entry \u6307\u5411 system-wide open-file table \u4e2d\u7684 entry\u3002 Buffers \u5728\u5185\u5b58\u4e2d\uff0c\u7528\u4e8e\u7f13\u51b2 disk block \u7684\u5185\u5bb9\u3002 \u5f53\u4e00\u4e2a disk block \u88ab\u8bfb\u65f6\uff0c\u5b83\u7684\u5185\u5bb9\u4f1a\u88ab\u653e\u5230 buffer \u91cc\uff1b\u5f53\u4e00\u4e2a\u5411 disk block \u5199\u7684\u52a8\u4f5c\u53d1\u751f\u65f6\uff0c\u4f1a\u5148\u88ab\u5199\u5165 buffer\u3002 \u901a\u8fc7\u4e0a\u9762\u8fd9\u79cd\u65b9\u5f0f\uff0cbuffer \u6280\u672f\u53ef\u4ee5\u5b9e\u73b0\u7edf\u4e00 CPU \u548c I/O \u8bbe\u5907\u4e4b\u95f4\u7684\u901f\u5ea6\u5dee\u5f02\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u64cd\u4f5c_1","title":"\u6587\u4ef6\u64cd\u4f5c","text":"\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4e3e\u4f8b\u8bf4\u660e\u5177\u4f53\u7684\u64cd\u4f5c\u662f\u5982\u4f55\u5728\u8fd9\u4e9b\u8bbe\u8ba1\u4e0b\u8fd0\u4f5c\u7684\u3002
file creation Application program \u9700\u8981\u521b\u5efa\u6587\u4ef6\u65f6\uff0c\u8c03\u7528 logical file system\uff0c\u5e76\u7ed9\u51fa\u9700\u8981\u521b\u5efa\u7684\u6587\u4ef6\u540d\u3002\u5b83\u4e86\u89e3 directory \u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u4f1a\u505a\u76f8\u5e94\u5904\u7406\u3002
\u521b\u5efa\u6587\u4ef6\u65f6\uff0c\u4e00\u4e2a\u5bf9\u5e94\u7684 FCB \u4f1a\u88ab\u521b\u5efa\uff1b\u4e0e\u6b64\u540c\u65f6\uff0c\u5bf9\u5e94\u7684 parent directory \u4e5f\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\uff0c\u5e76\u88ab\u66f4\u65b0\u3002
file open & close Application program \u9700\u8981\u5148\u6253\u5f00\u6587\u4ef6\u624d\u80fd\u5bf9\u6587\u4ef6\u8fdb\u884c\u8fdb\u4e00\u6b65\u7684 I/O \u64cd\u4f5c\uff0c\u8fd9\u4e00\u6b65\u901a\u8fc7\u7cfb\u7edf\u8c03\u7528 open()
\u6765\u5b9e\u73b0\u3002
\u6253\u5f00\u6587\u4ef6\u65f6\uff0copen()
\u4f1a\u5c06\u6587\u4ef6\u540d\u4f20\u8f93\u7ed9 logical file system\u3002\u540c\u65f6\uff0copen()
\u4f1a\u5728 system-wide open-file table \u91cc\u67e5\u627e\u8fd9\u4e2a\u6587\u4ef6\uff0c\u5982\u679c\u627e\u5230\u4e86\uff0c\u8bf4\u660e\u8fd9\u4e2a\u6587\u4ef6\u6b63\u5728\u88ab\u5176\u5b83\u8fdb\u7a0b\u4f7f\u7528\uff0c\u5c31\u53ef\u4ee5\u5269\u4e0b\u4e00\u4e9b\u989d\u5916\u7684\u5f00\u9500\u76f4\u63a5\u8fdb\u884c\u4e0b\u4e00\u6b65\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u6ca1\u6709\u627e\u5230\uff0c\u5c31\u9700\u8981\u5728 directory structure \u4e2d\u67e5\u627e\u8fd9\u4e2a\u6587\u4ef6\uff0c\u5f53\u8fd9\u4e2a\u6587\u4ef6\u88ab\u627e\u5230\u540e\uff0c\u5176 FCB \u4f1a\u88ab\u590d\u5236\u8fdb system-wide open-file table \u8868\u793a\u8be5\u6587\u4ef6\u88ab\u6253\u5f00\u3002
\u968f\u540e\uff0c\u5728 per-process open-file table \u4e2d\u521b\u5efa\u4e00\u4e2a entry\uff0c\u6307\u5411 system-wide open-file table \u4e2d\u7684 entry\uff0c\u8868\u793a\u5f53\u524d\u8fdb\u7a0b\u6253\u5f00\u4e86\u4e00\u4e2a\u6587\u4ef6\u3002\u540c\u65f6\uff0c\u8fd9\u4e2a\u6307\u5411\u7684 entry \u7684 reference counter \u4f1a\u88ab\u52a0 1\u3002
\u6211\u4eec\u4e4b\u540e\u5bf9\u6587\u4ef6\u7684\u64cd\u4f5c\u90fd\u4f9d\u8d56\u8fd9\u4e2a\u6307\u5411 system-wide open-file table \u4e2d entry \u7684\u6307\u9488\uff0c\u5b83\u5728 UNIX \u4e2d\u88ab\u79f0\u4e3a file descriptor\uff0c\u5728 Windows \u4e2d\u88ab\u79f0\u4e3a file handle\u3002
\u5bf9\u5e94\u7684\uff0c\u5728\u6587\u4ef6 close \u7684\u8fc7\u7a0b\u4e2d\uff0c\u4f1a\u5148\u5220\u9664 per-process open-file table \u4e2d\u7684 entry\uff0c\u7136\u540e\u5c06 system-wide open-file table \u4e2d\u7684 entry \u7684 reference counter \u51cf 1\uff0c\u5982\u679c\u6b64\u65f6 reference counter \u4e3a 0\uff0c\u8bf4\u660e\u6ca1\u6709\u5176\u5b83\u8fdb\u7a0b\u6253\u5f00\u8fd9\u4e2a\u6587\u4ef6\u4e86\uff0c\u90a3\u4e48\u8fd9\u4e2a entry \u4f1a\u88ab\u5220\u9664\uff0c\u6b64\u65f6\u9700\u8981\u66f4\u65b0 directory structure \u4e2d\u7684\u4fe1\u606f\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u76ee\u5f55\u7684\u5b9e\u73b0","title":"\u76ee\u5f55\u7684\u5b9e\u73b0","text":"\u672c\u8282\u4ecb\u7ecd\u4e24\u79cd\u76ee\u5f55\u7684\u5b9e\u73b0\u65b9\u6cd5\u3002
linear list based \u7ebf\u6027\u68c0\u7d22\u6cd5\u901a\u8fc7\u7ebf\u6027\u8868\uff08\u6570\u7ec4/\u94fe\u8868\u7b49\uff09\u6765\u5b58\u50a8\u76ee\u5f55\u4fe1\u606f\uff0c\u6bcf\u4e2a\u76ee\u5f55\u9879\u5305\u542b file name \u548c\u6307\u5411 FCB/Inode \u7684\u6307\u9488\uff0c\u67e5\u627e\u65f6\u9700\u8981\u904d\u5386\u67e5\u627e\u3002
advantages
\u5b9e\u73b0\u7b80\u5355\uff1b disadvantages
\u968f\u7740\u6587\u4ef6\u6570\u91cf\u7684\u589e\u52a0\uff0c\u68c0\u7d22\u6548\u7387\u4f1a\u964d\u4f4e\uff1b improvement
\u4f7f\u7528\u6709\u5e8f\u6570\u636e\u7ed3\u6784\uff08\u5e73\u8861\u6811\u3001B+ \u6811\u7b49\uff09\u53ef\u4ee5\u6539\u5584\u7f3a\u70b9\uff1b hash table based \u54c8\u5e0c\u8868\u6cd5\u901a\u8fc7\u54c8\u5e0c\u8868\u6765\u5b58\u50a8\u76ee\u5f55\u4fe1\u606f\uff0c\u6bcf\u4e2a\u76ee\u5f55\u9879\u5305\u542b file name \u548c\u6307\u5411 FCB/Inode \u7684\u6307\u9488\uff0c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 hash function \u8fdb\u884c random access\u3002
advantages
\u68c0\u7d22\u6548\u7387\u66f4\u9ad8\uff1b disadvantages
\u53ef\u80fd\u51fa\u73b0\u51b2\u7a81\u95ee\u9898\uff0c\u4f46\u53ef\u4ee5\u901a\u8fc7\u7b97\u6cd5\u89e3\u51b3\uff1b \u54c8\u5e0c\u8868\u5bf9\u5bb9\u7eb3\u5185\u5bb9\u7684\u5927\u5c0f\u6709\u5047\u8bbe\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5757\u5206\u914d\u4e0e\u5757\u7ec4\u7ec7","title":"\u5757\u5206\u914d\u4e0e\u5757\u7ec4\u7ec7","text":"\u6211\u4eec\u5728\u8bb2\u5185\u5b58\u7684\u65f6\u5019\uff0c\u8ba8\u8bba\u8fc7\u8fdb\u7a0b\u7684\u5185\u5b58\u5206\u914d\u7b56\u7565\u3002\u8fd9\u91cc\u8ba8\u8bba\u7684\u5185\u5bb9\u662f\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u8003\u8651\u6587\u4ef6\u5185\u5b58\u8981\u5982\u4f55\u88ab\u5206\u914d\uff0c\u540c\u65f6\uff0c\u5757\u5982\u4f55\u5206\u914d\u4e5f\u6697\u793a\u4e86\u5757\u662f\u5982\u4f55\u7ec4\u7ec7\u7684\u3002
\u901a\u5e38\u6765\u8bf4\u4e3b\u8981\u6709\u4e09\u79cd\uff1a\u8fde\u7eed(contiguous)\u3001\u94fe\u63a5(linked)\u548c\u7d22\u5f15(indexed)\uff0c\u5b83\u4eec\u4e4b\u95f4\u5404\u6709\u4f18\u52a3\uff0c\u9700\u8981\u6ce8\u610f\u638c\u63e1\u5b83\u4eec\u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u4f1a\u6709\u8ba1\u7b97\u9898\u3002
continuous \u8fde\u7eed\u5206\u914d\u6307\u7684\u662f\u6bcf\u4e2a\u6587\u4ef6\u5360\u7528\u4e00\u6bb5\u8fde\u7eed\u7684 block\u3002
Contiguous allocation of disk space.
\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 512 B\uff0c\u5982\u679c\u7ed9\u5b9a\u5b58\u53d6\u6587\u4ef6\u7684\u903b\u8f91\u5730\u5740 LA\uff0c\u5219\u5176\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R \u4e3a\uff1a
block_size = 512 # Bytes\nQ = LA / block_size\nR = LA % block_size\n
advantages
\u5b9e\u73b0\u7b80\u5355\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u6587\u4ef6\u7684 start block \u548c length \u5373\u53ef\uff1b \u6587\u4ef6\u8bbf\u95ee\u6548\u7387\u9ad8\uff1b disadvantages
\u5206\u914d\u65f6\u5bfb\u627e\u5408\u9002\u7a7a\u95f4\u6bd4\u8f83\u56f0\u96be\uff1b \u7c7b\u4f3c\u8fdb\u7a0b\u7684\u5185\u5b58\u5206\u914d\u7b56\u7565\uff0c\u9700\u8981\u8003\u8651\u5916\u90e8\u788e\u7247\u7b49\u95ee\u9898\uff1b \u5728\u6587\u4ef6\u53ef\u80fd\u52a8\u6001\u53d8\u5316\u7684\u60c5\u51b5\u4e0b\u4f1a\u5f88\u7cdf\u7cd5\uff08\u6216\u8005\u8bf4\uff0c\u6587\u4ef6\u9700\u8981\u591a\u5c11\u7a7a\u95f4\u6709\u65f6\u662f\u96be\u4ee5\u9884\u8ba1\u7684\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5b9e\u9645\u4f7f\u7528\u7a7a\u95f4\u6bd4\u9884\u671f\u5927\u6216\u5c0f\u7684\u60c5\u51b5\uff09\uff1b \u5982\u679c\u6587\u4ef6\u53d8\u5c0f\uff0c\u53ef\u80fd\u53ea\u662f\u5e26\u6765\u5916\u90e8\u788e\u7247\uff0c\u4f46\u662f\u6587\u4ef6\u53d8\u5927\u5c31\u65e0\u6cd5\u89e3\u51b3\u4e86\uff1b \u4e3a\u4e86\u89e3\u51b3\u5916\u90e8\u788e\u7247\u7684\u95ee\u9898\uff0c\u6709\u4e00\u79cd\u7b56\u7565\u53eb compacts\uff0c\u6307\u7684\u662f\u5148\u6682\u65f6\u5c06\u6587\u4ef6\u7cfb\u7edf\u590d\u5236\u5230\u53e6\u5916\u4e00\u4e2a\u8bbe\u5907\u4e0a\uff0c\u7136\u540e\u5b8c\u5168\u91ca\u653e\u539f\u59cb\u8bbe\u5907\u7684\u8d44\u6e90\uff0c\u518d\u5c06\u6587\u4ef6\u590d\u5236\u56de\u53bb\uff0c\u4ece\u800c\u5b9e\u73b0\u4e86\u201c\u538b\u7f29\u201d\u3002\u4e0d\u8fc7\u663e\u7136\uff0c\u8fd9\u4e2a\u64cd\u4f5c\u7684\u5f00\u9500\u662f\u5de8\u5927\u7684\u3002
\u4e3a\u4e86\u89e3\u51b3\u6587\u4ef6\u5927\u5c0f\u53d8\u5927\uff0c\u65e0\u6cd5\u6269\u5c55\u7684\u95ee\u9898\uff0c\u6709\u4e00\u79cd\u673a\u5236\u53eb\u505a extent\uff0c\u53ef\u4ee5\u4fee\u6b63\u8fd9\u4e2a\u95ee\u9898\u3002\u5f53\u7a7a\u95f4\u4e0d\u591f\u65f6\uff0c\u7cfb\u7edf\u4f1a\u88ab\u5206\u914d\u4e00\u5757\u65b0\u7684\u8fde\u7eed\u7a7a\u95f4\uff0c\u94fe\u5f0f\u5730\u52a0\u5165\u5230\u539f\u59cb\u7a7a\u95f4\u7684\u540e\u9762\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u89e3\u51b3\u6587\u4ef6\u5927\u5c0f\u53d8\u5927\u7684\u95ee\u9898\u4e86\uff08\u7c7b\u4f3c\u4e8e\u4e00\u79cd\u4e0d\u5b9a\u7684\u5927\u7c92\u5ea6\u7684\uff0c\u7531 FCB \u7ef4\u62a4\u7684\u94fe\u63a5\u65b9\u6848\uff09\u3002\u5f53\u7136\uff0c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u9664\u4e86 start blok \u548c length\uff0c\u8fd8\u9700\u8981\u5728 FCB \u4e0a\u8bb0\u5f55\u6307\u5411 extent \u7684\u6307\u9488\u3002
linked \u6bcf\u4e2a block \u4f5c\u4e3a\u4e00\u4e2a\u94fe\u8282\uff0c\u7ef4\u62a4\u5b58\u50a8\u4fe1\u606f\u4ee5\u5916\u8fd8\u9700\u8981\u7ef4\u62a4\u6307\u5411\u4e0b\u4e00\u4e2a block \u7684\u6307\u9488\u3002\u6b64\u65f6\uff0cFCB \u4e2d\u53ea\u9700\u8981\u8bb0\u5f55\u8d77\u59cb\u5730\u5740\u5373\u53ef\u3002
Linked allocation of disk space.
\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 512 B\uff0c\u6bcf\u4e2a\u5757\u7684\u5f00\u5934\u6d88\u8017 1 B \u6765\u5b58\u653e\u6307\u9488\uff0c\u5982\u679c\u7ed9\u5b9a\u5b58\u53d6\u6587\u4ef6\u7684\u903b\u8f91\u5730\u5740 LA\uff0c\u5219\u5176\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R \u4e3a\uff1a
\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\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\u2510\n\u2502pointer\u2502 data \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\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\u2518\n0 1 512\n
valid_block_size = 512 - 1 # Bytes\nQ = LA / valid_block_size\nR = (LA % valid_block_size) + 1\n
advantages
\u5b9e\u73b0\u7b80\u5355\uff0c\u53ea\u9700\u8981\u8bb0\u5f55\u6587\u4ef6\u7684 start pointer \u5373\u53ef\uff1b \u6587\u4ef6\u7684\u521b\u5efa\uff08\u5206\u914d\uff09\u548c\u589e\u957f\u5f88\u5bb9\u6613\uff1b \u89e3\u51b3\u4e86\u8fde\u7eed\u5206\u914d\u4e2d\u7684\u5916\u90e8\u788e\u7247\u95ee\u9898\uff1b disadvantages
\u65e0\u6cd5\u968f\u673a\u8bbf\u95ee\uff0c\u6587\u4ef6\u8bbf\u95ee\u6548\u7387\u4f4e\uff0c\u56e0\u4e3a\u9700\u8981\u4ece\u5934\u5f00\u59cb\u904d\u5386\uff1b \u9700\u8981\u989d\u5916\u7684\u7a7a\u95f4\u6765\u5b58\u50a8\u6307\u9488\uff1b \u989d\u5916\u7a7a\u95f4\u4e8e\u94fe\u8282\u6570\u91cf\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u7c07(cluster)\uff0c\u5373\u591a\u4e2a\u8fde\u7eed\u5757\u4e3a\u4e00\u4e2a\u94fe\u8282\uff0c\u6765\u51cf\u5c11\u6307\u9488\u5e26\u6765\u7684\u989d\u5916\u5f00\u9500\uff1b \u53ef\u9760\u6027\u5b58\u5728\u95ee\u9898\uff1b index \u867d\u7136\u94fe\u63a5\u5f0f\u65b9\u6848\u89e3\u51b3\u4e86\u8fde\u7eed\u5f0f\u65b9\u6848\u4e2d\u5206\u914d\u4e0d\u7075\u6d3b\u7684\u95ee\u9898\uff0c\u4f46\u662f\u4e0d\u652f\u6301\u968f\u673a\u8bbf\u95ee\u3002
\u7d22\u5f15\u65b9\u6cd5\u5c06\u6240\u6709\u6307\u9488\u7edf\u4e00\u7ef4\u62a4\u5230 index block \u4e2d\uff0c\u800c\u4e0d\u662f\u5229\u7528\u94fe\u8868\u7684\u65b9\u5f0f\u3002\u6bcf\u4e2a\u6587\u4ef6\u6709\u81ea\u5df1\u7684 index block\uff0c\u5728 index block \u4e2d\uff0c\u987a\u5e8f\u5b58\u653e\u7740\u6307\u5411\u6587\u4ef6\u7684\u6240\u6709 block \u7684\u6307\u9488\uff0cindex block \u4e2d\u7b2c i \u4e2a entry \u6307\u5411\u4e86\u5b58\u50a8\u6587\u4ef6\u6570\u636e\u7684\u7b2c i \u4e2a block\u3002
Indexed allocation of disk space.
\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 512 B\uff0c\u5982\u679c\u7ed9\u5b9a\u5b58\u53d6\u6587\u4ef6\u7684\u903b\u8f91\u5730\u5740 LA\uff0c\u5219\u5176\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R \u4e3a\uff1a
block_size = 512 # Bytes\nQ = LA / block_size\nR = LA % block_size\n
advantages
\u6587\u4ef6\u7684\u521b\u5efa\uff08\u5206\u914d\uff09\u548c\u589e\u957f\u5f88\u5bb9\u6613\uff1b \u89e3\u51b3\u4e86\u8fde\u7eed\u5206\u914d\u4e2d\u7684\u5916\u90e8\u788e\u7247\u95ee\u9898\uff1b \u652f\u6301\u968f\u673a\u8bbf\u95ee\uff1b disadvantages
\u901a\u5e38\u6709\u66f4\u5927\u7684\u6307\u9488\u7a7a\u95f4\u5f00\u9500\uff0c\u56e0\u4e3a index \u4ee5 block \u4e3a\u6700\u5c0f\u5360\u7528\u5355\u4f4d\uff1b \u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u8981\u8003\u8651 index block \u592a\u5c0f\u7684\u60c5\u51b5\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u590d\u6570\u4e2a index blocks\uff0c\u51e0\u79cd\u5e38\u89c1\u7684\u65b9\u6848\uff1a
\u4f7f\u7528\u94fe\u63a5\u7d22\u5f15\uff0c\u7528\u94fe\u8868\u5c06\u5b83\u4eec\u8fde\u8d77\u6765\uff1b \u4f7f\u7528\u591a\u7ea7\u7d22\u5f15\uff08\u56de\u987e\u591a\u7ea7\u9875\u8868\uff09\uff1b \u4f7f\u7528\u6df7\u5408\u6a21\u5f0f\uff0c\u8be5\u65b9\u6848\u4e3a UNIX \u6240\u91c7\u7528\uff0c\u7c7b\u4f3c\u4e8e\u5206\u7ea7\u7535\u8d39\uff0cinode \u4e2d\u6709 15 \u4e2a\u6307\u9488\uff0c\u5404\u81ea\u7528\u9014\u4e0d\u540c\uff1a \u524d 12 \u4e2a\u76f4\u63a5\u7d22\u5f15 12 \u4e2a block\uff1b \u7b2c 13 \u4e2a\u6307\u5411\u4e00\u4e2a indirect index block\uff08\u7528\u4e0d\u5230\u7684\u65f6\u5019\u5c31\u4e0d\u7528\uff09\uff1b \u7b2c 14 \u4e2a\u6307\u5411\u4e00\u4e2a\u4e8c\u7ea7 indirect index block\uff08\u7528\u4e0d\u5230\u7684\u65f6\u5019\u5c31\u4e0d\u7528\uff09\uff1b \u7b2c 15 \u4e2a\u6307\u5411\u4e00\u4e2a\u4e09\u7ea7 indirect index block\uff08\u7528\u4e0d\u5230\u7684\u65f6\u5019\u5c31\u4e0d\u7528\uff09\uff1b The UNIX inode.
\u5934\u8111\u98ce\u66b4
\u8bf7\u601d\u8003\u8fd9\u4e09\u79cd\u8bbe\u8ba1\u4e0b\uff0c\u5982\u4f55\u8ba1\u7b97\u5bf9\u5e94\u7684\u7ed3\u6784\u5185\u5757\u53f7 Q \u548c\u5757\u5185\u504f\u79fb R\u3002
\u63d0\u793a \u94fe\u63a5\u7d22\u5f15\uff1a
block_size = 512 # Bytes\nnormal_block_size = block_size # Bytes\nptr_valid_block_size = block_size - 1 # Bytes\n\nQ1 = LA / (normal_block_size * ptr_valid_block_size) # the index block\nR1 = LA % (normal_block_size * ptr_valid_block_size)\n\nQ2 = R1 / normal_block_size # the data block\nR2 = R1 % normal_block_size # the offset in the data block\n
\u4e8c\u7ea7\u7d22\u5f15\uff1a
block_size = 512 # Bytes\n\nQ1 = LA / (block_size ** 2) # the inner index block\nR1 = LA % (block_size ** 2)\n\nQ2 = R1 / block_size # the data block\nR2 = R1 % block_size # the offset in the data block\n
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u4f7f\u7528\u4e8c\u7ea7\u7d22\u5f15\u5206\u914d\uff0c\u4e00\u4e2a\u5757\u7684\u5927\u5c0f\u4e3a 1 KiB\uff0c\u7d22\u5f15\u4e2d\u7684\u5757\u5730\u5740\u4e3a 4 B\uff0c\u5219\u6587\u4ef6\u7cfb\u7edf\u80fd\u652f\u6301\u7684\u6700\u5927\u7a7a\u95f4\u5927\u5c0f\u4e3a\uff1f
\u8fd9\u91cc\u6709\u4e24\u6761\u7ebf\uff0c\u7b2c\u4e00\u6761\u662f\u7d22\u5f15\u7cfb\u7edf\u6240\u80fd\u652f\u6301\u7684\u6700\u5927\u5757\u6570\u91cf\uff0c\u7b2c\u4e8c\u6761\u662f\u5757\u5730\u5740\u80fd\u652f\u6301\u7684\u6700\u5927\u5730\u5740\u7a7a\u95f4\u5927\u5c0f\uff0c\u6211\u4eec\u5e94\u5f53\u5206\u522b\u8ba1\u7b97\uff0c\u53d6\u6700\u5c0f\u7684\u90a3\u4e2a\u4f5c\u4e3a\u7b54\u6848\u3002
\u9996\u5148\uff0c\u53ef\u4ee5\u8ba4\u4e3a\u4e8c\u7ea7\u7d22\u5f15\u5b9e\u9645\u4e0a\u5c31\u662f\u4e2a\u4e8c\u7ef4\u6570\u7ec4\uff0c\u4e00\u4e2a\u7ef4\u5ea6\u7531\u4e00\u4e2a\u5757\u7ef4\u62a4\uff0c\u6240\u4ee5\u6bcf\u4e2a\u7ef4\u5ea6\u4e2d\u6709 1 KiB / 4 B = 28 \u4e2a\u9879\uff0c\u6240\u4ee5\u4e00\u5171\u652f\u6301 2 16 \u4e2a\u9879\u3002
\u5176\u6b21\uff0c\u7531\u4e8e\u5757\u5730\u5740\u7531 4 B \u8868\u793a\uff0c\u6240\u4ee5\u5730\u5740\u7a7a\u95f4\u6700\u591a\u6709 232 \u4e2a\u9879\u3002
\u6240\u4ee5\uff0c\u6587\u4ef6\u7cfb\u7edf\u652f\u6301\u7684\u6700\u591a\u9879\u6570\u4e3a 216 \u9879\uff0c\u6700\u5927\u7a7a\u95f4\u4e3a 1 KiB * 216 = 64 MB\u3002
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u6587\u4ef6 F \u7531 200 \u6761\u8bb0\u5f55\u7ec4\u6210\uff0c\u8bb0\u5f55\u4ece 1 \u5f00\u59cb\u7f16\u53f7\u3002\u7528\u6237\u6253\u5f00\u6587\u4ef6\u540e\uff0c\u6b32\u5c06\u5185\u5b58\u4e2d\u7684\u4e00\u6761\u8bb0\u5f55\u63d2\u5165\u5230\u6587\u4ef6 F \u4e2d\uff0c\u4f5c\u4e3a\u5176\u7b2c 30 \u6761\u8bb0\u5f55\u3002\u8bf7\u56de\u7b54\u4e0b\u5217\u95ee\u9898\uff0c\u5e76\u8bf4\u660e\u7406\u7531\u3002
\u82e5\u6587\u4ef6\u7cfb\u7edf\u91c7\u7528\u8fde\u7eed\u5206\u914d\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u78c1\u76d8\u5757\u5b58\u653e\u4e00\u6761\u8bb0\u5f55\uff0c\u6587\u4ef6 F \u7684\u5b58\u50a8\u533a\u57df\u524d\u540e\u5747\u6709\u8db3\u591f\u7a7a\u95f2\u7684\u78c1\u76d8\u7a7a\u95f4\uff0c\u5219\u5b8c\u6210\u4e0a\u8ff0\u63d2\u5165\u64cd\u4f5c\u6700\u5c11\u9700\u8981\u8bbf\u95ee\u51e0\u6b21\u5b58\u50a8\u5757? F \u7684\u6587\u4ef6\u63a7\u5236\u5757\u5185\u5bb9\u4f1a\u53d1\u751f\u54ea\u4e9b\u6539\u53d8\uff1f
\u82e5\u6587\u4ef6\u7cfb\u7edf\u91c7\u7528\u94fe\u63a5\u5206\u914d\u65b9\u5f0f\uff0c\u6bcf\u4e2a\u78c1\u76d8\u5757\u5b58\u653e\u4e00\u6761\u8bb0\u5f55\u548c\u4e00\u4e2a\u94fe\u63a5\u6307\u9488\uff0c\u5219\u5b8c\u6210\u4e0a\u8ff0\u63d2\u5165\u64cd\u4f5c\u9700\u8981\u8bbf\u95ee\u51e0\u6b21\u78c1\u76d8\u5757\uff1f\u82e5\u6bcf\u4e2a\u78c1\u76d8\u5757\u5927\u5c0f\u4e3a 1 KiB\uff0c\u5176\u4e2d 4 B \u5b58\u653e\u94fe\u63a5\u6307\u9488\uff0c\u5219\u8be5\u6587\u4ef6\u7cfb\u7edf\u652f\u6301\u7684\u6587\u4ef6\u6700\u5927\u957f\u5ea6\u662f\u591a\u5c11 GiB\uff1f
\u7b2c\u4e00\u9898\uff1a
\u7b2c\u4e00\u5c0f\u95ee\uff1a
\u8fde\u7eed\u5206\u914d\u7684\u8bdd\uff0c\u5c31\u6709\u70b9\u7c7b\u4f3c\u4e8e\u6570\u7ec4\u3002\u8981\u5bf9\u6570\u7ec4\u505a\u63d2\u5165\uff0c\u5c31\u9700\u8981\u79fb\u52a8\u540e\u9762\u7684\u5143\u7d20\uff0c\u4f46\u662f\u8fd9\u91cc\u63d0\u5230\uff0cF \u7684\u524d\u540e\u5747\u6709\u8db3\u591f\u7a7a\u95f2\u7684\u7a7a\u95f4\uff0c\u90a3\u4e48\u5728\u8fd9\u91cc\u628a 30 \u53f7\u4e4b\u524d\u7684\u5143\u7d20\u5f80\u524d\u79fb\u5e94\u5f53\u6bd4\u628a 29 \u53f7\u4e4b\u540e\u7684\u5143\u7d20\u5f80\u540e\u79fb\u66f4\u5feb\uff0c\u6240\u4ee5\u6211\u4eec\u8fd9\u91cc\u9009\u62e9\u5c06 1 ~ 29 \u5757\u7684\u5185\u5bb9\u5411\u524d\u79fb\u52a8\u3002 \u5bf9\u4e8e\u8fde\u7eed\u5206\u914d\uff0c\u8981\u60f3\u79fb\u52a8\u4e00\u5757\u7684\u5185\u5bb9\uff0c\u24f5 \u9996\u5148\u9700\u8981\u8bfb\u53d6\u4e00\u5757\u7684\u5185\u5bb9\uff0c\u24f6 \u7136\u540e\u662f\u5199\u5165\u53e6\u5916\u4e00\u4e2a\u5757\u3002\u56e0\u6b64\uff0c\u6bcf\u6b21\u79fb\u52a8\u90fd\u9700\u8981\u4e24\u6b21\u5bf9\u5757\u7684 I/O \u8bbf\u95ee\uff0c\u8fd9\u91cc\u4e00\u5171\u6709 29 \u4e2a\u5757\u8981\u79fb\u52a8\uff0c\u6240\u4ee5\u9700\u8981 29 * 2 = 58 \u6b21\u79fb\u52a8\u3002 \u5b8c\u6210\u79fb\u52a8\u4e4b\u540e\uff0c\u9700\u8981\u5728 30 \u5757\u7684\u4f4d\u7f6e\u5199\u5165\u65b0\u7684\u8bb0\u5f55\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e5f\u6709\u4e00\u6b21 I/O \u8bbf\u95ee\uff0c\u4e00\u5171\u662f 58 + 1 = 59 \u6b21\u3002 \u7b2c\u4e8c\u5c0f\u95ee\uff1a
\u800c\u5173\u4e8e\u6587\u4ef6\u63a7\u5236\u5757\u7684\u53d8\u5316\uff0c\u4e0e\u6587\u4ef6\u5b58\u50a8\u76f4\u63a5\u76f8\u5173\u7684\u662f\uff1a\u6587\u4ef6\u8d77\u59cb\u5730\u5740\u6539\u53d8\uff08\u5411\u524d\u79fb\u52a8\u4e00\u5757\uff09\u4ee5\u53ca\u6587\u4ef6\u957f\u5ea6\u6539\u53d8\uff08\u589e\u52a0\u4e00\u6761\u8bb0\u5f55\uff09\u3002 \u6b64\u5916\uff0c\u53ef\u80fd\u8fd8\u4f1a\u66f4\u65b0 dirty bit\u3001\u6700\u540e\u66f4\u65b0\u65f6\u95f4\u7b49\u3002 \u7b2c\u4e8c\u9898\uff1a
\u7b2c\u4e00\u5c0f\u95ee\uff1a
\u94fe\u63a5\u5206\u914d\u5c31\u7c7b\u4f3c\u4e8e\u94fe\u8868\u63d2\u5165\uff0c\u53ea\u9700\u8981\u627e\u5230\u76ee\u6807\u4f4d\u7f6e\uff0c\u7136\u540e\u5c06\u524d\u9a71\u7684 next
\u6307\u9488\u4fee\u6539\u4e3a\u63d2\u5165\u8282\u70b9\uff0c\u5c06\u63d2\u5165\u8282\u70b9\u7684 next
\u6539\u4e3a\u540e\u9a71\u5373\u53ef\u3002 \u9996\u5148\u9700\u8981\u627e\u5230 29 \u53f7\u94fe\u8282\uff0c\u94fe\u5f0f\u53ea\u652f\u6301\u987a\u5e8f\u8bbf\u95ee\uff0c\u6240\u4ee5\u9700\u8981 29 \u6b21 I/O \u8bbf\u95ee\u624d\u80fd\u627e\u5230\u7b2c 29 \u4e2a\u94fe\u8282\uff0c\u6b64\u65f6\u62ff\u5230 29 \u53f7\u94fe\u8282\u7684 next
\u6307\u9488\u5c31\u77e5\u9053 30 \u53f7\u94fe\u8282\u5728\u54ea\u91cc\u4e86\u3002 \u63a5\u4e0b\u6765\u521b\u5efa\u65b0\u94fe\u8282\uff0c\u5176 next
\u6307\u9488\u6307\u5411\u521a\u521a\u62ff\u5230\u7684 29 \u94fe\u8282\u7684 next
\u6307\u9488\uff0c\u9700\u8981 1 \u6b21 I/O \u8bbf\u95ee\u3002 \u7136\u540e\u4fee\u6539 29 \u53f7\u94fe\u8282\u7684 next
\u6307\u9488\u6307\u5411\u65b0\u94fe\u8282\uff0c\u9700\u8981 1 \u6b21 I/O \u8bbf\u95ee\u3002 \u6240\u4ee5\uff0c\u4e00\u5171\u662f 29 + 1 + 1 = 31 \u6b21 I/O \u8bbf\u95ee\u3002 \u7b2c\u4e8c\u5c0f\u95ee\uff1a
\u8fd9\u79cd\u95ee\u9898\u4e4d\u4e00\u773c\u770b\u53ef\u80fd\u4f1a\u89c9\u5f97\uff1a\u300c\u94fe\u8868\u4e0d\u662f\u4e0d\u9650\u957f\u5ea6\u5417\uff0c\u4e3a\u4ec0\u4e48\u4f1a\u6709\u6700\u5927\u5927\u5c0f\u300d\uff0c\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u6307\u9488\u662f\u5b9a\u957f\u7684\uff0c\u5730\u5740\u662f\u6709\u9650\u7684\uff0c\u56e0\u6b64\u51b3\u5b9a\u4e86\u94fe\u8282\u4e5f\u662f\u6709\u9650\u7684\u3002 \u6240\u4ee5\uff0c\u8fd9\u91cc\u7684\u300c\u5176\u4e2d 4 B \u5b58\u653e\u94fe\u63a5\u6307\u9488\u300d\u5305\u542b\u4e86\u4e24\u4e2a\u4fe1\u606f\uff1a\u24f5 \u6bcf\u4e2a\u78c1\u76d8\u5757\u6709\u6548\u5b58\u50a8\u7a7a\u95f4\u4e3a 1 KiB - 4 B\uff0c\u24f6 \u6700\u591a\u53ea\u6709 232 \u4e2a\u94fe\u8282\u3002 \u56e0\u6b64\uff0c\u8be5\u6587\u4ef6\u7cfb\u7edf\u652f\u6301\u7684\u6587\u4ef6\u6700\u5927\u957f\u5ea6\u4e3a 232 * (1 KiB - 4 B) = 4080 GiB\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u7a7a\u95f2\u7a7a\u95f4\u7ba1\u7406","title":"\u7a7a\u95f2\u7a7a\u95f4\u7ba1\u7406","text":"\u6211\u4eec\u524d\u9762\u5728\u6587\u4ef6\u7cfb\u7edf\u5206\u5c42\u8bbe\u8ba1\u91cc\u63d0\u5230\u8fc7\uff0cfile-organization module \u9700\u8981\u8d1f\u8d23\u8fdb\u884c\u7a7a\u95f2\u7a7a\u95f4\u7684\u7ba1\u7406\u3002\u73b0\u5728\u6211\u4eec\u6765\u8003\u8651\u5982\u4f55\u7ba1\u7406\u7a7a\u95f2\u7a7a\u95f4\u3002
\u4f4d\u56fe \u4f4d\u56fe(bitmap)\u5373\u4f4d\u5411\u91cf\uff0c\u7528\u5bf9\u5e94 bit \u7684 0 \u6216 1 \u6765\u6807\u8bb0\u5bf9\u5e94\u7684 block \u662f\u5426\u7a7a\u95f2\u3002
\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\u9700\u8981\u5e26\u6765\u7684\u989d\u5916\u5f00\u9500\u662f\uff0c\u6709\u591a\u5c11 blocks \u5c31\u9700\u8981\u591a\u5c11\u4e2a\u989d\u5916\u7684 bits\u3002\u4f8b\u5982\uff0c\u5047\u8bbe\u5757\u5927\u5c0f\u4e3a 4 KiB\uff0c\u786c\u76d8\u4e00\u5171\u6709 1 GiB\uff0c\u5219\u9700\u8981 230 / 212 = 218 = 256 KiB \u7684\u989d\u5916\u7a7a\u95f4\u6765\u5b58\u50a8\u4f4d\u56fe\u3002
\u76f8\u5bf9\u6765\u8bf4\u5bb9\u6613\u5f97\u5230\u8fde\u7eed\u7684\u7a7a\u95f4\uff0c\u56e0\u4e3a bitmap \u4e2d bit \u7684\u76f8\u90bb\u6697\u793a block \u7684\u76f8\u90bb\u3002
\ud83c\udf30 \u9898\u9762\u89e3\u6790 \u6587\u4ef6\u7cfb\u7edf\u7528\u4f4d\u56fe\u6cd5\u8868\u793a\u78c1\u76d8\u7a7a\u95f4\u7684\u5206\u914d\u60c5\u51b5\uff0c\u4f4d\u56fe\u5b58\u4e8e\u78c1\u76d8\u7684 32 ~ 127 \u53f7\u5757\u4e2d\uff0c\u6bcf\u4e2a\u76d8\u5757\u5360 1024 B\uff0c\u76d8\u5757\u548c\u5757\u5185\u5b57\u8282\u5747\u4ece 0 \u5f00\u59cb\u7f16\u53f7\u3002\u5047\u8bbe\u8981\u91ca\u653e\u7684\u76d8\u5757\u53f7\u4e3a 409612\uff0c\u5219\u4f4d\u56fe\u4e2d\u4fee\u6539\u7684\u4f4d\u6240\u5728\u7684\u76d8\u5757\u53f7\u548c\u5757\u5185\u5b57\u8282\u504f\u79fb\u91cf\u5206\u522b\u662f_____\u3002
A. 82 \u548c 2\uff1b B. 82 \u548c 1\uff1b C. 81 \u548c 2\uff1b D. 81 \u548c 1\uff1b \u9996\u5148\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u8003\u8651\u4f4d\u56fe\u5728\u78c1\u76d8\u4e2d\u7684\u4f4d\u7f6e\u662f\u5426\u5bf9\u8ba1\u7b97\u6709\u6ca1\u6709\u5f71\u54cd\uff0c\u53ea\u9700\u8981\u5c06\u5b83\u4eec\u770b\u4f5c\u6b63\u5e38\u7684\u78c1\u76d8\u5373\u53ef\u3002\u4e8e\u662f\u6211\u4eec\u77e5\u9053\uff0c\u5728\u300c\u4f4d\u56fe\u5b58\u4e8e\u78c1\u76d8\u7684 32 ~ 127 \u53f7\u5757\u4e2d\u300d\u8fd9\u53e5\u8bdd\u4e2d\uff0c\u6709\u7528\u7684\u4fe1\u606f\u5b9e\u9645\u4e0a\u662f \u24f5 \u4f4d\u56fe\u4ece 32 \u53f7\u76d8\u5f00\u59cb\uff0c\u24f6 \u4f4d\u56fe\u4e00\u5171\u7528\u4e86 127 - 32 + 1 = 96 \u4e2a\u76d8\u5757\uff0c\u5176\u4e2d\u540e\u8005\u5728\u672c\u9053\u9898\u91cc\u7528\u4e0d\u5230\u3002
\u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u76f4\u63a5\u8ba1\u7b97 409612 \u5bf9\u5e94\u7684\u4f4d\u6bd4\u7279\u5728\u54ea\u91cc\u3002
\u6839\u636e\u4f4d\u56fe\u6cd5\u7684\u539f\u7406\uff0c\u4e00\u4e2a\u5b57\u8282\u80fd\u8868\u793a 8 \u4e2a\u5757\u3001\u4e00\u4e2a\u76d8\u5757\u80fd\u8868\u793a 8 * 1024 \u4e2a\u5757\u3002\u56e0\u6b64\uff1a
409612 / (8 * 1024) = 50 ... 12
\u5176\u4e2d\uff0c50 \u8868\u793a\u5b83\u88ab\u7b2c 50 \u4e2a\u4f4d\u56fe\u5757\u4e2d\u88ab\u8868\u793a\uff0c\u5757\u5185\u6bd4\u7279\u504f\u79fb\u91cf\u4e3a 12\u3002
\u4f46\u662f\uff0c\u4f4d\u56fe\u4ece 32 \u5757\u624d\u5f00\u59cb\uff0c\u6240\u4ee5\u8868\u793a\u8fd9\u4e00\u5757\u7684\u4f4d\u56fe\u5757\u53f7\u5e94\u5f53\u662f 50 + 32 = 82\uff0c\u800c\u5757\u5185\u5b57\u8282\u504f\u79fb\u91cf\u4e3a 12 / 8 = 1\u3002\uff08\u5b57\u8282\u504f\u79fb\u91cf\u662f 1 \u8bf4\u660e\u662f\u7b2c\u4e8c\u4e2a\u5b57\u8282\uff01\u4ece 0 \u5f00\u59cb\u7b97\uff01\uff09
\u94fe\u8868 \u7c7b\u4f3c free-frame list\uff0c\u7528\u94fe\u8868\u5c06\u7a7a\u95f2\u7684 block \u8fde\u8d77\u6765\u3002
\u4e0d\u5bb9\u6613\u9020\u6210\u7a7a\u95f4\u6d6a\u8d39\uff0c\u4f46\u4e0d\u592a\u5bb9\u6613\u5f97\u5230\u8fde\u7eed\u7684\u7a7a\u95f4\u3002
\u5206\u7ec4 \u5c06 n \u4e2a\u7a7a\u95f2\u5757\u7684\u5730\u5740\u5b58\u653e\u5728\u7b2c 0 \u4e2a\u7a7a\u95f2\u5757\u4e2d\uff0c\u5728\u7b2c n \u4e2a\u7a7a\u95f2\u5757\u5b58\u50a8\u540e n \u4e2a\u7a7a\u95f2\u5757\u7684\u5730\u5740\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002
\u8ba1\u6570 \u8ba1\u6570\u65b9\u6cd5\u662f\u57fa\u4e8e\u94fe\u8868\u65b9\u6cd5\u7684\u6539\u8fdb\uff0c\u57fa\u4e8e\u8fde\u7eed\u7a7a\u95f4\u901a\u5e38\u88ab\u4e00\u8d77\u4f7f\u7528\u7684\u5047\u8bbe\uff0c\u4e0d\u662f\u5b58\u50a8\u6bcf\u4e2a\u4e00\u4e2a block\uff0c\u800c\u662f\u53ea\u7ef4\u62a4\u6bcf\u4e2a\u8fde\u7eed\u5185\u5b58\u6bb5\u7684\u8d77\u59cb\u5730\u5740\u548c\u957f\u5ea6\uff08\u5757\u6570\uff09\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5178\u578b\u6587\u4ef6\u7cfb\u7edf","title":"\u5178\u578b\u6587\u4ef6\u7cfb\u7edf","text":"ext TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
Links
Inode structure - record rec_len? | StackOverflow
FAT TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
Links
FAT \u5373 file-allocation table\uff0c\u662f\u4e00\u79cd\u94fe\u63a5\u5206\u914d\u7684\u53d8\u79cd\uff0c\u4f7f\u7528 FAT \u7684\u6587\u4ef6\u7cfb\u7edf\u6709 FAT12\u3001FAT16\u3001FAT32\u3001exFAT\uff0864\u4f4d\uff09\u3002\u7531\u4e8e\u7b80\u5355\u9ad8\u6548\uff0c\u5b83\u88ab MS-DOS \u4f7f\u7528\u3002
FAT \u7684\u6bcf\u4e2a\u76ee\u5f55\u9879\u4e3a 32 \u4e2a\u5b57\u8282\u3002 FAT32 \u957f\u6587\u4ef6\u540d\u7684\u76ee\u5f55\u9879\u7531\u51e0\u4e2a 32 B \u8868\u9879\u7ec4\u6210\u3002 \u7528\u4e00\u4e2a\u8868\u9879\u5b58\u653e\u77ed\u6587\u4ef6\u540d\u548c\u5176\u4ed6\u5c5e\u6027\uff08\u5305\u62ec\u7c07\u53f7\u3001\u6587\u4ef6\u5927\u5c0f\uff0c\u6700\u540e\u4fee\u6539\u65f6\u95f4\u548c\u6700\u540e\u4fee\u6539\u65e5\u671f\u3001\u521b\u5efa\u65f6\u95f4\u3001\u521b\u5efa\u65e5\u671f\u548c\u6700\u540e\u5b58\u53d6\u65e5\u671f\uff09\uff0c\u77ed\u6587\u4ef6\u540d\u7684\u5c5e\u6027\u662f 0x20
\u3002 \u7528\u8fde\u7eed\u82e5\u5e72\u4e2a\u8868\u9879\u5b58\u653e\u957f\u6587\u4ef6\u540d\uff0c\u6bcf\u4e2a\u8868\u9879\u5b58\u653e 13 \u4e2a\u5b57\u7b26\uff08\u4f7f\u7528 Unicode \u7f16\u7801\uff0c\u6bcf\u4e2a\u5b57\u7b26\u5360\u7528 2 \u4e2a\u5b57\u8282\uff09\u3002 \u957f\u6587\u4ef6\u540d\u7684\u8868\u9879\u9996\u5b57\u8282\u7684\u4e8c\u8fdb\u5236\u6570\u4f4e 5 \u4f4d\u503c\uff0c\u5206\u522b\u4e3a 00001
\u300100010
\u300100011
\u3001...\u8868\u793a\u5b83\u4eec\u7684\u6b21\u5e8f\uff0c\u5de6\u8d77\u7b2c 2 \u4f4d\u4e3a 1\uff08\u4e5f\u5c31\u662f\u5728\u4f4e 5 \u4f4d\u57fa\u7840\u4e0a\u52a00x40
\uff09\u8868\u793a\u8be5\u8868\u9879\u662f\u6700\u540e\u4e00\u9879\u3002\u6700\u540e\u9879\u5b58\u653e 13 \u4e2a\u5b57\u7b26\u4f4d\u7f6e\u591a\u4f59\u65f6\uff0c\u5148\u7528 2 \u4e2a\u5b57\u8282 0 \u8868\u793a\u7ed3\u675f\uff0c\u518d\u7528 0xFF`` \u586b\u5145\u3002\u957f\u6587\u4ef6\u540d\u7684\u5c5e\u6027\u662f
0x0F\u3002\u957f\u6587\u4ef6\u540d\u9879\u7684\u7b2c 13\u300127\u300128 \u5b57\u8282\u4e3a
0x00`\uff0c\u7b2c 14 \u5b57\u8282\u4e3a\u77ed\u6587\u4ef6\u540d\u6821\u9a8c\u548c\u3002 NTFS TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
Links
\u6bcf\u4e2a\u5206\u533a\u90fd\u6709 MFT \u5373 master file table\u3002 MFT \u7531\u4e00\u4e2a\u4e2a MFT entry\uff08\u4e5f\u79f0\u4e3a\u6587\u4ef6\u8bb0\u5f55\uff09\u7ec4\u6210\uff0c\u6bcf\u4e2a MFT entry \u5360\u7528 1 KB \u7684\u7a7a\u95f4\u3002 MFT \u524d 16 \u4e2a\u8bb0\u5f55\u7528\u6765\u5b58\u653e\u5143\u6570\u636e\u6587\u4ef6\u7684\u4fe1\u606f\uff0c\u5b83\u4eec\u5360\u6709\u56fa\u5b9a\u7684\u4f4d\u7f6e\u3002 \u6bcf\u4e2a MFT entry \u5934\u90e8(header)\u7684\u51e0\u5341\u4e2a\u5b57\u8282\u6709\u7740\u56fa\u5b9a\u7684\u7ed3\u6784\uff0c\u7528\u6765\u63cf\u8ff0\u8be5 MFT entry \u7684\u76f8\u5173\u4fe1\u606f\uff1b\u540e\u9762\u7684\u5b57\u8282\u5b58\u653e\u7740\u6587\u4ef6\u5c5e\u6027\u7b49\u4fe1\u606f\u3002 \u6bcf\u4e2a\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u4fe1\u606f\u90fd\u5305\u542b\u5728 MFT \u4e2d\uff0c\u6bcf\u4e2a\u6587\u4ef6\u6216\u76ee\u5f55\u81f3\u5c11\u5bf9\u5e94\u4e00\u4e2a MFT entry\u3002 "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u865a\u62df\u6587\u4ef6\u7cfb\u7edf","title":"\u865a\u62df\u6587\u4ef6\u7cfb\u7edf","text":"\u6211\u4eec\u5728\u524d\u9762\u7ed9\u51fa\u4e86\u5927\u91cf\u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\uff0c\u4f46\u662f\u64cd\u4f5c\u7cfb\u7edf\u5e94\u5f53\u80fd\u5e7f\u6cdb\u652f\u6301\u5404\u79cd\u6587\u4ef6\u7cfb\u7edf\uff08\u4e0d\u540c\u7684 disk \u4f7f\u7528\u7684 FS \u53ef\u80fd\u4e0d\u540c\uff09\u3002\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u5728\u6587\u4ef6\u7cfb\u7edf\u4e0a\u518d\u505a\u4e00\u6b21\u62bd\u8c61\uff0c\u5373\u865a\u62df\u6587\u4ef6\u7cfb\u7edf(virtual FS, VFS)\u3002
Schematic view of a virtual file system.
VFS \u6709\u4e24\u4e2a\u4e3b\u8981\u529f\u80fd\uff1a
\u5c01\u88c5\u5e76\u900f\u660e\u5316\u5177\u4f53\u6587\u4ef6\u64cd\u4f5c\uff0c\u540c\u4e00\u63a5\u53e3\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u5177\u4f53\u5b9e\u73b0\uff08\u7c7b\u4f3c\u4e8e\u201c\u591a\u6001\u201d\uff09\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u6765\u652f\u6301\u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\uff1b \u53cd\u8fc7\u6765\u4e3a\u6587\u4ef6\u7cfb\u7edf\u63d0\u4f9b\u4e00\u4e2a\u552f\u4e00\u6807\u8bc6\u6587\u4ef6\u7684\u65b9\u5f0f\uff0cVFS \u57fa\u4e8e\u4e00\u4e2a\u540d\u4e3a vnode \u7684 file-representation structure \u7684\u4e1c\u897f\u6765\u8868\u793a\u6587\u4ef6\uff0c\u5176\u4e2d\u5305\u542b\u4e86\u5728\u6574\u4e2a\u6587\u4ef6\u7f51\u7edc\u4e2d\u6807\u8bc6\u6587\u4ef6\u7684\u6570\u5b57\u6307\u793a\u7b26\uff1b "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\u4e0e\u5b89\u5168","title":"\u6587\u4ef6\u7cfb\u7edf\u7684\u6027\u80fd\u4e0e\u5b89\u5168","text":"TODO: \u5b8c\u5584\u8fd9\u90e8\u5206\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u9875\u7f13\u51b2","title":"\u9875\u7f13\u51b2","text":"\u9875\u7f13\u51b2(page cache)\u6280\u672f\u901a\u8fc7\u865a\u62df\u5185\u5b58\u6280\u672f\uff0c\u4ee5\u9875\u4e3a\u5355\u4f4d\u8fdb\u884c\u7f13\u51b2\uff0c\u800c\u975e\u4ee5\u9762\u5411 FS \u7684 block \u4e3a\u5355\u4f4d\u3002\u56e0\u4e3a\u4f7f\u7528\u865a\u62df\u5185\u5b58\u76f8\u5173\u7684\u63a5\u53e3\u4f1a\u6bd4\u4f7f\u7528\u6587\u4ef6\u7cfb\u7edf\u7684\u76f8\u5173\u63a5\u53e3\u66f4\u5feb\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6062\u590d","title":"\u6062\u590d","text":"\u5907\u4efd\u6570\u636e\uff0c\u5e76\u65f6\u5e38\u68c0\u67e5\u6570\u636e\u7684\u4e00\u81f4\u6027\u548c\u5b8c\u6574\u6027\uff0c\u5982\u679c\u53d1\u73b0\u95ee\u9898\u5219\u5c1d\u8bd5\u5229\u7528\u5907\u4efd\u6570\u636e\u8fdb\u884c\u6062\u590d\u3002
"},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u65e5\u5fd7\u7cfb\u7edf","title":"\u65e5\u5fd7\u7cfb\u7edf","text":"\u65e5\u5fd7\u7ed3\u6784\u7684\u6587\u4ef6\u7cfb\u7edf(log-structured FS)\u662f\u4e00\u79cd\u6587\u4ef6\u7cfb\u7edf\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u5b83\u5c06\u6240\u6709\u7684\u4fee\u6539\u64cd\u4f5c\u90fd\u4f5c\u4e3a\u4e00\u4e2a\u4e8b\u52a1(transaction)\u8bb0\u5f55\u5728\u4e00\u4e2a\u65e5\u5fd7\u4e2d\uff0c\u800c\u4e0d\u662f\u76f4\u63a5\u4fee\u6539\u6587\u4ef6\u672c\u8eab\uff08\u5bf9\u4e8e\u6587\u4ef6\u7684\u4fee\u6539\u548c\u65e5\u5fd7\u7684\u521b\u5efa\u662f\u5f02\u6b65\u7684\uff09\u3002
\u8fd9\u79cd\u65b9\u5f0f\u7684\u597d\u5904\u662f\uff0c\u5f53\u7cfb\u7edf\u5d29\u6e83\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u65e5\u5fd7\u6765\u6062\u590d\u6587\u4ef6\u7cfb\u7edf\u3002
ISO/IEC 10918-1: 1993(E) p.36\uff0c\u5176\u4e2d SOI (Start Of Image) \u7684\u503c\u4e3a 0xFFD8
\u3002\u00a0\u21a9
Why are hard links not allowed for directories? \u21a9
File Permissions \u21a9
Implementation of File Systems \u21a9\u21a9
Device driver | Wikipedia \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
\u672c\u6587\u9762\u5411 \u8ba4\u4e3a PPT \u5e76\u4e0d\u9ad8\u6548\uff0c\u4f46\u540c\u65f6\u53c8\u786e\u5b9e\u9700\u8981\u4e00\u79cd\u300c\u6f14\u793a\u300d\u9014\u5f84 \u7684\u504f\u6280\u672f\u4eba\u5458\uff1b \u867d\u7136\u5de5\u5177\u57fa\u4e8e\u524d\u7aef\u6280\u672f\u6808\uff0c\u4f46\u524d\u7aef\u77e5\u8bc6\u4ec5\u51b3\u5b9a\u5de5\u5177\u4f7f\u7528\u4e0a\u9650\uff0c\u5b8c\u5168\u53ef\u4ee5\u505a\u5230\u65e0\u524d\u7aef\u57fa\u7840\u8fdb\u884c\u57fa\u7840\u4f7f\u7528\uff1b \u6211\u5e76\u6ca1\u6709\u5c1d\u8bd5\u8fc7\u8131\u79bb\u547d\u4ee4\u884c\u6765\u5b9e\u73b0\u8fd9\u4e9b\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5927\u6982\u201c\u504f\u6280\u672f\u201d\u4eba\u5458\u4e0d\u5e94\u5f53\u4e0d\u4f1a\u4f7f\u7528\u547d\u4ee4\u884c\uff0c\u81f3\u5c11\u4f60\u8981\u77e5\u9053\u5728\u54ea\u91cc\u80fd\u8fd0\u884c\u547d\u4ee4\uff1b\u6b64\u5916\uff0c\u60a8\u9700\u8981\u786e\u4fdd\u60a8\u7684\u547d\u4ee4\u884c\u73af\u5883\u80fd\u591f\u4f7f\u7528 npm\uff1b "},{"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
reveal.js
\u7684\u5b98\u65b9 demo\uff1a\ud83d\udd17 \u6211\u81ea\u5df1\u5199\u7684\u4e00\u4e2a project\uff1a\ud83d\udd17 reveal-md
\u7684 github repo\uff1a\ud83d\udd17 "},{"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
PPT \u7b49\u56fe\u5f62\u5316\u7684\u300c\u6f14\u793a\u300d\u6587\u6863\u5236\u4f5c\u5e73\u53f0\uff1b \u4f7f\u7528Beamer
\u3001reveal.js
\u3001nodeppt
\u7b49\u5de5\u5177\uff0c\u4f7f\u7528\u4ee3\u7801\u7f16\u5199\u300c\u6f14\u793a\u300d\u6587\u6863\uff1b \u8bed\u96c0\u7684\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff1b \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
\u901a\u8fc7\u70b9\u51fb/ \u7a7a\u683c\u6765\u9009\u62e9\u4e0b\u4e00\u9875\uff0c\u4f7f\u7528 h/\u2190
j/\u2193
k/\u2191
l/\u2192
\u6216\u8005\u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u65b9\u5411\u76d8\u6765\u8fdb\u884c\u4e0a\u4e0b\u5de6\u53f3\u5207\u6362\uff0c\u76f4\u63a5\u70b9\u51fb\u9875\u9762\u5e95\u90e8\u7684\u8fdb\u5ea6\u6761\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u9875\u9762\u8df3\u8f6c\u3002
\u6309\u4e0b f
\u6765\u5168\u5c4f\u663e\u793a\uff0c\u6309\u4e0b Esc
\u6216\u8005 f
\u9000\u51fa\u3002 \u6309 f
\u4e4b\u524d\u3002 \u5168\u5c4f\u663e\u793a\u3002 \u6309\u4e0bs
\u8fdb\u5165\u6f14\u8bb2\u8005\u6a21\u5f0f\uff0c\u4e5f\u5c31\u662f\u518d\u591a\u8df3\u51fa\u6765\u4e00\u4e2a\u5f39\u7a97\uff0c\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\u53ef\u4ee5\u5728\u6295\u5f71\u4eea\u91cc\u653e\u5168\u5c4f\uff0c\u5728\u81ea\u5df1\u7535\u8111\u4e0a\u5c55\u793a\u8fd9\u4e2a\u7a97\u53e3\u3002\u4fee\u6539\u53f3\u4e0a\u89d2\u7684 Layout \u53ef\u4ee5\u4fee\u6539\u663e\u793a\u6a21\u5f0f\u3002Notes
\u7684\u5185\u5bb9\u4f1a\u5728\u540e\u9762\u4ecb\u7ecd\uff0c\u7c7b\u4f3c\u4e8e PPT \u7684\u5907\u6ce8\u3002
\u6309\u4e0bo
\u8fdb\u5165\u603b\u89c8\u89c6\u56fe\uff0c\u53ef\u4ee5\u5229\u7528\u65b9\u5411\u952e\u8fdb\u884c\u79fb\u52a8\uff0c\u56de\u8f66\u6216\u70b9\u51fb\u8fdb\u884c\u9009\u62e9\u3002\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u663e\u793a\u7684\u5185\u5bb9\u548c\u5b9e\u9645\u5c55\u793a\u7684\u9875\u9762\u5185\u5bb9\u5728\u5e03\u5c40\u4e0a\u5b58\u5728\u5dee\u5f02\u3002
\u6309\u4e0bv
\u6216.
\u9ed1\u5c4f\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\u5c06 <!--s-->
\u8bbe\u4e3a separator\uff0c\u5c06 <!--v-->
\u8bbe\u4e3a vertical separator\u3002 \u8fd9\u4e00\u90e8\u5206\u5185\u5bb9\u9700\u8981\u653e\u5728 md
\u6587\u4ef6\u7684\u5f00\u5934\uff0c\u4e4b\u540e\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u3002 \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
title
\u5373\u663e\u793a\u5728\u7f51\u9875\u6807\u7b7e\u4e0a\u5185\u5bb9\uff1b (vertical)separator
\u5373\u4e4b\u524d\u63d0\u5230\u8fc7\u7684\u4e24\u4e2a separator
\uff1b theme
\u4e3a Slides \u4e3b\u9898\uff0c\u53ef\u4f9b\u4f7f\u7528\u7684\u5b98\u65b9\u9ed8\u8ba4\u4e3b\u9898\u53ef\u4ee5\u770b\u8fd9\u91cc\uff1a\ud83d\udd17\uff1b highlightTheme
\u4e3a\u4ee3\u7801\u6846\u9ad8\u4eae\u4e3b\u9898\uff0c\u5b98\u65b9\u5bf9\u9ad8\u4eae\u4e3b\u9898\u7684\u8bf4\u660e\u5728\u8fd9\u91cc\uff1a\ud83d\udd17\uff1b revealOptions
\u5219\u5bf9\u5e94\u4e86 reveal.js
\u4e2d config \u7684\u5185\u5bb9\uff1b \u8fd9\u4e00\u5757\u4e0d\u53ea\u8fd9\u4e9b\u5185\u5bb9\uff0c\u6d89\u53ca\u7684\u5185\u5bb9\u975e\u5e38\u591a\uff0creveal.js
\u5b98\u65b9\u7684\u6587\u6863\u4e2d\u90fd\u6709\u8be6\u7ec6\u7684\u5185\u5bb9\uff0c\u6211\u8fd9\u91cc\u5217\u51fa\u4e86 \u5bbd\u3001\u9ad8\u3001\u8fb9\u754c\u3001\u6362\u9875\u52a8\u753b\u3001\u6807\u53f7 \u7b49\u3002 \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
\u8fd9\u4e2a\u95ee\u9898\u6211\u8fd8\u63d0\u4e86\u4e2a issue\uff0c\u91cc\u9762\u4e5f\u9644\u4e86\u89e3\u51b3\u7684\u529e\u6cd5\uff1a--static with --theme generate the index.html
with the wrong path of theme.css
\u5728\u4f7f\u7528 gh-page \u8fdb\u884c\u90e8\u7f72\uff0c\u5e76\u4e14\u6307\u5b9a\u4e86\u989d\u5916\u7684 css
\u6587\u4ef6\u7684\u65f6\u5019\uff0c\u4e00\u5b9a\u8981\u6dfb\u52a0 --assets-dir assets
\uff0c\u5426\u5219\u9ed8\u8ba4\u7684\u7d20\u6750\u6587\u4ef6\u5939\u7684\u540d\u5b57\u662f _assets
\uff0c\u800c _
\u5f00\u5934\u7684\u6587\u4ef6\u5939\u4f1a\u88ab gh-page \u5ffd\u7565\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
\u6587\u7ae0\u9898\u76ee\uff1aAction-Conditioned 3D Human Motion Synthesis with Transformer VAE \u5206\u7c7b\uff1aComputer Science
> Computer Vision and Pattern Recognition
\u4f5c\u8005\uff1aMathis Petrovich, Michael J. Black, G\u00fcl Varol \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2104.05670 \u4ee3\u7801\uff1a\ud83d\udd17 \u76f8\u5173\u5185\u5bb9
Transformer VAE SMPL \u4e00\u4e2a\u6027\u8d28\u826f\u597d\u7684\u4eba\u4f53\u6a21\u578b\u89c4\u8303 MoCap "},{"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":" Future human motion prediction Human motion synthesis Monocular human motion estimation Transformer VAEs \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
\u6587\u7ae0\u9898\u76ee\uff1aEG3D: Efficient Geometry-aware 3D Generative Adversarial Networks \u4f5c\u8005\uff1a Eric Ryan Chan * 1, 2 , Connor Zhizhen Lin * 1 , Matthew Aaron Chan * 1 , Koki Nagano * 2 , Boxiao Pan 1 , Shalini De Mello 2 , Orazio Gallo 2 , Leonidas Guibas 1 , Jonathan Tremblay 2 , Sameh Khamis 2 , Tero Karras 2 , Gordon Wetzstein 1 \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2112.07945 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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
\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 \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
https://www.cnblogs.com/ghostcai/p/16615616.html \uff08\u7b14\u8bb0\uff09 "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aMAS: Multi-view Ancestral Sampling for 3D Motion Generation Using 2D Diffusion \u4f5c\u8005\uff1aRoy Kapon, Guy Tevet, Daniel Cohen-Or, Amit H. Bermano \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2310.14729 "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aNeural State Machine for Character-Scene Interactions \u4f5c\u8005\uff1aSebastian Starke, He Zhang, Taku Komura, Jun Saito \u8bba\u6587\uff1a\ud83d\udd17 "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aNeRF: Representing Scenes as Neural Radiance Fields for View Synthesis \uff08\u795e\u7ecf\u8f90\u5c04\u573a\uff09 \u5206\u7c7b\uff1aComputer Science
> Computer Vision and Pattern Recognition
\u4f5c\u8005\uff1aBen Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren Ng \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 arXiv\uff1a\ud83d\udd17 2003.08934 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"location":"pape_read/NeRF/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NeRF/#\u8d21\u732e","title":"\u8d21\u732e","text":" \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 \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 \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
\u53ef\u4ee5\u8868\u8fbe\u590d\u6742\u771f\u5b9e\u7684\u51e0\u4f55\u5f62\u72b6 \u9002\u5408\u4f7f\u7528\u6295\u5f71\u56fe\u50cf\u505a\u68af\u5ea6\u4f18\u5316 \u95ee\u9898\uff1a\u4ec0\u4e48\u610f\u601d\uff1f \u964d\u4f4e\u4e86\u9ad8\u5206\u8fa8\u7387\u7a7a\u95f4\u56fe\u50cf\u7684\u5b58\u50a8\u6210\u672c "},{"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} \\] \u5168\u662f FC\uff1b \u8f93\u5165\u662f 5D \u5ea7\u6807\u2014\u2014\u70b9\u7684\u7a7a\u95f4\u5ea7\u6807 \\((x,y,z)\\) \u548c\u89c6\u89d2\u65b9\u5411 \\((\\theta, \\phi)\\)\uff1b \u8f93\u51fa\u662f\u4f53\u79ef\u5bc6\u5ea6\u4ee5\u53ca\u5bf9\u5e94\u7a7a\u95f4\u4f4d\u7f6e\u7684\u4e0e\u89c6\u89d2\u6709\u5173\u7684\u8f90\u5c04\uff08\u6216\u8005\u8bf4\u89c6\u89d2\u6709\u5173\u7684 RGB \u989c\u8272\uff09\uff1b \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
\u5173\u4e8e\u5bc6\u5ea6 \\(\\sigma\\) \u7684\u51fd\u6570\uff0c\u4ec5\u4e0e\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e \\(\\mathrm{x} = (x,y,z)\\) \u6709\u5173\uff0c\u800c\u4e0e\u89c6\u89d2\u65e0\u5173\uff1b \u5173\u4e8e\u989c\u8272 \\(\\mathrm{c}\\) \u7684\u51fd\u6570\uff0c\u4e0e\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e \\(\\mathrm{x} = (x,y,z)\\) \u548c\u89c2\u5bdf\u65b9\u5411 \\(\\mathrm{d}\\) \u540c\u65f6\u6709\u5173\uff1b \u8fd9\u5927\u6982\u4e0e NeRF \u5728\u4e0d\u540c\u89c6\u89d2\u4e0a\u5149\u5f71\u8868\u73b0\u7684\u826f\u597d\u4e5f\u6709\u8f83\u5927\u5173\u7cfb\uff1b \u5b9e\u73b0\u4e0a\u662f\u5148\u901a\u8fc7 MLP \u7528 \\(\\mathrm{x}\\) \u8bad\u7ec3\u51fa \\(\\sigma\\) \u548c\u4e00\u4e2a\u4e2d\u95f4\u7279\u5f81\u5411\u91cf\uff0c\u518d\u5c06\u8fd9\u4e2a\u4e2d\u95f4\u5411\u91cf\u4e0e \\(\\mathrm{d}\\) \u62fc\u63a5\uff0c\u7ee7\u7eed\u653e\u5230 MLP \u4e2d\uff1b \u5229\u7528\u5982\u4e0a\u201c\u51fd\u6570\u201d\uff0c\u5177\u4f53\u6765\u8bf4\u64cd\u4f5c\u5982\u4e0b\uff1a
\u5728\u573a\u666f\u4e2d\u5339\u914d\u7a7f\u8fc7\u7684\u76f8\u673a\u5149\u7ebf\u4ee5\u751f\u6210\u91c7\u6837\u7684 3D \u70b9\u96c6\u5408\uff1b \u4f7f\u7528\u8fd9\u4e9b\u70b9\u4ee5\u53ca\u5bf9\u5e94\u7684 2D \u89c6\u89d2\u65b9\u5411\u8f93\u5165\u5230\u7f51\u7edc\u4e2d\uff0c\u4ee5\u5f97\u5230\u989c\u8272\u548c\u5bc6\u5ea6\u96c6\u5408\uff1b \u4f7f\u7528\u4f20\u7edf\u7684\u4f53\u79ef\u6e32\u67d3\u6280\u672f\u7d2f\u79ef\u8fd9\u4e9b\u989c\u8272\u548c\u5bc6\u5ea6\u4ee5\u5f97\u5230 2D \u56fe\u50cf\uff1b \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
\u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u6765\u4f7f MLP \u80fd\u591f\u652f\u6301\u66f4\u9ad8\u9891\u7684\u56fe\u50cf\u4fe1\u606f\uff1b \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 https://zhuanlan.zhihu.com/p/360365941 \uff08\u7b14\u8bb0 \u5173\u4e8e\u4f53\u79ef\u6e32\u67d3\u8bb2\u5f97\u5f88\u6e05\u6670\uff09 https://zhuanlan.zhihu.com/p/380015071 \uff08\u7b14\u8bb0\uff09 https://wandb.ai/wandb_fc/chinese/reports/NeRF-Neural-Radiance-Fields-View-Synthesis---VmlldzozNDQxNzk \uff08\u4fa7\u91cd\u5982\u4f55\u4f7f\u7528\uff09 https://www.youtube.com/watch?v=nCpGStnayHk\uff08\u4e0a\u9762\u90a3\u7bc7\u6587\u7ae0\u7684\u4ecb\u7ecd\u89c6\u9891\uff09 https://blog.csdn.net/qq_43620967/article/details/124467551 \uff08\u7ffb\u8bd1\uff09 https://blog.csdn.net/weixin_44292547/article/details/126042398 \uff08\u7ffb\u8bd1\uff09 https://blog.csdn.net/weixin_44580210/article/details/122284120 \uff08\u7b14\u8bb0\uff09 \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
\u6587\u7ae0\u9898\u76ee\uff1aLearning Human Mesh Recovery in 3D Scenes \u4f5c\u8005\uff1a Zehong Shen, Zhi Cen, Sida Peng, Qing Shuai, Hujun Bao, Xiaowei Zhou \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 \u8bba\u6587\uff1a\ud83d\udd17 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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":" SA-HMR = scene-aware human mesh recovery \u9884\u5148\u7ed9\u5b9a\u626b\u63cf\u597d\u7684\u573a\u666f\uff0c\u518d\u6839\u636e\u5355\u5f20\u7167\u7247\u4f30\u8ba1\u4eba\u7684\u7edd\u5bf9\u4f4d\u7f6e\u548c\u59ff\u52bf "},{"location":"pape_read/SA-MHR/#\u4f18\u52bf\u4e0e\u8d21\u732e","title":"\u4f18\u52bf\u4e0e\u8d21\u732e","text":" \u76f8\u6bd4\u4f20\u7edf\u7684\u901a\u8fc7\u4f18\u5316\u8fed\u4ee3\u7684\u751f\u6210\u529e\u6cd5\uff0c\u672c\u65b9\u6cd5\u5728\u63a8\u65ad\u8fc7\u7a0b\u4e2d\u66f4\u52a0\u8fc5\u901f\uff1b \u95ee\u9898\uff1a\u6700\u4f18\u5316\u4e2d\u7684 contact regions \u7684 chamfer distance \u7ea6\u675f\u662f\u4e3a\u4e86\u4ec0\u4e48\uff1f \u5c3d\u53ef\u80fd\u589e\u52a0\u4e00\u56e2\u7684\u805a\u5408\u6027\uff1f \u662f\u3002 \u6982\u62ec\u8d21\u732e\uff1a
\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 \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 \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":" \u4f30\u8ba1\u4eba\u4f53\u7684\u5168\u5c40\u4f4d\u7f6e(absolute human position)\u3001\u573a\u666f\u63a5\u89e6\u70b9(dense scene contacts)\u3001\u4ee5\u53ca\u4e00\u4e2a\u573a\u666f\u611f\u77e5\u7684\u4eba\u4f53\u7f51\u683c(scene aware human mesh)\uff1b \u51c6\u5907\u5de5\u4f5c\uff1a \u4eba\u4f53 \u4f7f\u7528 SMPL \u6765\u8868\u793a\u4eba\u4f53\uff0c\u8ba1\u7b97\u7f51\u683c\u9876\u70b9 \\(V\\in\\mathrm{R}^{6890\\times 3}\\)\uff1b \u4f7f\u7528 H36M \u5173\u952e\u70b9\u56de\u5f52\u77e9\u9635(joint regression matrix) \\(M \\in \\mathrm{R}^{14\\times 6890}\\)\uff1b \u95ee\u9898\uff1a\u8fd9\u662f\u4ec0\u4e48\uff1f \u4e00\u4e2a from smpl to h36m \u7684\u77e9\u9635\u3002 \u8ba1\u7b97 3D \u5173\u952e\u70b9 \\(J\\in \\mathrm{R}^{14\\times 3} = MV\\)\uff1b \u573a\u666f \u7528\u4e00\u4e2a bbox \u53bb\u6846\u9009\u76ee\u6807\u4eba\u4f53\uff1b \u8f6c\u5316\u4e3a\u7279\u5b9a\u5927\u5c0f\u7684\u56fe\u50cf \\(I \\in \\mathrm{R}^{224\\times 224\\times 3}\\)\uff1b \u6839\u636e\u7ed9\u5b9a\u7684\u56fe\u50cf\u533a\u57df\u548c\u76f8\u673a\u53c2\u6570\uff0c\u5f97\u5230\u5bf9\u5e94\u4e8e\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u89c6\u9525\u4f53\u7a7a\u95f4\uff0c\u9009\u53d6\u8fd9\u90e8\u5206\u70b9\u4e91\u4f5c\u4e3a\u8f93\u5165\u7684\u70b9\u4e91 \\(S \\in \\mathrm{R}^{N_S \\times 3}\\)\uff1b \u4eba\u4e0e\u573a\u666f\u7684\u63a5\u89e6 \u4f7f\u7528 7 \u4e2a\u6700\u5bb9\u6613\u6210\u4e3a\u63a5\u89e6\u70b9\u7684\u533a\u57df\u548c 1 \u4e2a\u8868\u793a\u4e0d\u63a5\u89e6\u7684\u533a\u57df\uff0c\u8fd9 8 \u4e2a\u6807\u7b7e\u5728\u70b9\u4e91\u4e2d\u505a\u5206\u5272\u4efb\u52a1\uff1b \u4eba\u4f53\u6839\u4f4d\u7f6e\u548c\u573a\u666f\u63a5\u89e6\u70b9\u7684\u4f30\u8ba1\uff1a \u6982\u8ff0 \u9996\u5148\u4f7f\u7528\u4e00\u4e2a\u7a00\u758f 3D CNN \u6765\u4f30\u8ba1\u5bc6\u5ea6\u573a\u666f\u7684\u63a5\u89e6\u70b9\u2014\u2014\u70b9\u4e91\u6807\u7b7e\u4efb\u52a1(point cloud labeling task)\u548c\u7edd\u5bf9\u7684\u4eba\u4f53\u4f4d\u7f6e\u2014\u2014\u6295\u7968\u5411\u91cf\u573a\u4fee\u6b63\u4efb\u52a1(voting vector field refinement task)\uff0c\u6839\u636e\u5f97\u5230\u7684\u7ed3\u679c\uff0c\u4ee5\u7edd\u5bf9\u4f4d\u7f6e\u4e3a\u4e2d\u5fc3\u8868\u793a\u63a5\u89e6\u70b9\uff1b \u95ee\u9898\uff1a\u4ec0\u4e48\u662f voting vector field refinement task\uff1f\u540e\u9762\u6709\u5199\u3002 \u7c97\u4f30\u6839 \u4f7f\u7528\u4e00\u4e2a CNN \u5f97\u5230\u4e00\u4e2a\u70ed\u56fe\u548c\u5f52\u4e00\u5316\u7684\u6df1\u5ea6\u56fe\uff1b \u4ece\u70ed\u56fe\u4e2d\u80fd\u4f7f\u7528 argmax
\u5f97\u5230\u521d\u59cb\u7684\u4eba\u4f53\u6839\u90e8\u5ea7\u6807 \\((x,y)\\)\uff0c\u4ece\u6df1\u5ea6\u56fe\u4e2d\u4f30\u8ba1\u51fa \\(\\tilde Z\\)\uff1b \u5229\u7528\u76f8\u673a\u5185\u53c2\u53ef\u4ee5\u8ba1\u7b97\u51fa 3D \u7a7a\u95f4\u4e2d\u7684\u5ea7\u6807 \\((X,Y,Z)\\)\uff1a \\(Z = \\tilde{Z} \\frac{f}{w},\\quad X = \\frac{x - c_x}{f} \\cdot Z,\\quad Y = \\frac{y-c_y}{f}\\cdot Z\\) \u4ece\u7ed3\u679c\u6765\u770b\uff0c\\((x, y)\\) \u7684\u4f30\u8ba1\u662f\u6bd4\u8f83\u51c6\u786e\u7684\uff0c\u4f46 \\(\\tilde{Z}\\) \u7684\u6548\u679c\u6bd4\u8f83\u5dee\uff1b 3D \u7279\u5f81\u6784\u9020 \u5728\u70b9\u4e91\u4e2d\u5bfb\u627e ROI\u2014\u2014\u4ee5 \\(r=(X,Y,Z)\\) \u4e3a\u4e2d\u5fc3\uff0c\\(\\gamma_1\\) \u4e3a\u534a\u5f84\u7684\u7403\u5f62\u533a\u57df\uff0c\u7531 \\(\\tilde{Z}\\) \u7684\u4f30\u8ba1\u5e76\u4e0d\u51c6\u786e\uff0c\u6240\u4ee5\u5728\u8ddd\u79bb \\(\\gamma_2\\) \u7684\u3001\u6cbf\u7740 \\(z\\) \u8f74\u7684\u5730\u65b9\u518d\u91c7\u4e24\u4e2a\u7403\u5f62 ROI\uff1b \u95ee\u9898\uff1a\u4e0d\u51c6\u786e\u7684\u662f \\(\\tilde{Z}\\)\uff0c\u53ef\u662f \\(X, Y\\) \u7684\u5f97\u5230\u4e5f\u4e0e \\(\\tilde{Z}\\) \u6709\u5173\u5440\uff1f \u900f\u89c6\u6295\u5f71\uff0c\u800c\u975e\u6b63\u4ea4\u6295\u5f71\u3002 \u63a5\u4e0b\u6765\u5c06 ROI \u4e2d\u7684\u70b9\u4e91\u4f53\u7d20\u5316\uff0c\u5e76\u4e14\u8ba1\u7b97\u5f97\u5230\u6bcf\u4e00\u4e2a\u4f53\u7d20\u7684\u7279\u5f81\uff0c\u7279\u5f81\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff1a \u7531\u4f53\u7d20\u4e2d\u5fc3 \\(\\overline{s}_i\\) \u6307\u5411\u6839 \\(r\\) \u7684\u504f\u79fb\u5411\u91cf(offset vector) \\(o_i = r - \\overline{s}_i\\)\uff1b \u5229\u7528\u76f8\u673a\u53c2\u6570\uff0c\u5c06 \\(\\overline{s}_i\\) \u6295\u5f71\u56de\u56fe\u7247\u540e\uff0c\u5728\u7279\u5f81 map \u4e0a\u8fdb\u884c\u53cc\u7ebf\u6027\u91c7\u6837\u5f97\u5230\u7684\u4e0d\u6295\u5f71\u56fe\u50cf\u7279\u5f81(unprojecting image feature) \\(\\hat{f}\\)\uff1b \u4f30\u8ba1\u4fee\u6b63\u6839\u548c\u573a\u666f\u63a5\u89e6\u70b9 \u4f7f\u7528\u4e00\u4e2a\u7a00\u758f 3D CNN \u6765\u5904\u7406 3D \u7279\u5f81\uff0c\u4ee5\u6c42\u4f18\u5316\u6839\u7684\u4f30\u8ba1\u5e76\u4f30\u8ba1\u573a\u666f\u63a5\u89e6\u4f4d\u7f6e\uff0c\u7f51\u7edc\u7684\u8f93\u51fa\u5305\u62ec\u4e09\u4e2a\u90e8\u5206\uff1a\u66f4\u65b0\u540e\u7684\u504f\u79fb\u5411\u91cf(updated offset vector) \\(o_i^*\\)\u3001\u5176\u7f6e\u4fe1\u5ea6(confidence) \\(c_i\\)\u3001\u4ee5\u53ca\u5173\u4e8e\u516b\u4e2a\u63a5\u89e6\u4f4d\u7f6e\u6216\u4e0d\u63a5\u89e6\u4f4d\u7f6e\u7684\u5206\u5272\u7ed3\u679c\uff1b \u4f7f\u7528 \\(r^* = \\sum \\limits_i c_i \\cdot (o^*_i + \\overline{s}_i)\\) \u6765\u8ba1\u7b97\u4f18\u5316\u540e\u7684\u6839\uff0c\u5176\u4e2d \\(i\\) \u4e3a ROI \u4e2d\u7684\u4f53\u7d20\u7684 index\uff08\u4e4b\u524d\u63d0\u5230\u7684 voting vector field refinement task\uff09\uff1b \u63a5\u89e6\u70b9\u5206\u7c7b\u5305\u62ec 7 \u4e2a\u6700\u5bb9\u6613\u6210\u4e3a\u63a5\u89e6\u70b9\u7684\u5206\u7c7b\uff0c\u548c 1 \u4e2a\u7528\u6765\u8868\u793a\u4e0d\u63a5\u89e6\u7684\u7c7b\u522b\uff0c\u901a\u8fc7\u53d6\u5f97\u5206\u6700\u9ad8\u7684\u5f97\u5230\u70b9\u4e91\u7684\u6807\u7b7e\uff0c\u6700\u7ec8\u5f97\u5230\u4e00\u4e2a\u6709\u6807\u7b7e\u7684\u70b9\u4e91\u6570\u636e\u4f5c\u4e3a\u4e4b\u540e\u7684\u8f93\u5165\uff08\u4e4b\u524d\u63d0\u5230\u7684 point cloud labeling task\uff09\uff1b SA-HMR\uff1a \u53d7\u6570\u636e\u96c6\u9650\u5236\uff0c\u672c\u90e8\u5206\u7684\u5de5\u4f5c\u4ee5\u9884\u8bad\u7ec3\u597d\u7684 METRO \u4e3a\u57fa\u7840 SA-HMR \u6dfb\u52a0\u4e00\u4e2a\u5e73\u884c\u7684\u573a\u666f\u76f8\u5173\u7f51\u7edc\uff0c\u4f7f\u7528\u4ea4\u53c9\u6ce8\u610f\u529b\u673a\u5236\u6765\u63d0\u9ad8 METRO \u7684\u573a\u666f\u611f\u77e5\uff1b METRO \u4f7f\u7528\u81ea\u6ce8\u610f\u529b\u673a\u5236\u5b9e\u73b0\u5355\u76ee\u7684\u4eba\u4f53\u7f51\u683c\u6062\u590d\uff1b \u63d0\u53d6\u5168\u5c40\u7684 CNN \u7279\u5f81 \u27a1\ufe0f \u5c06\u7279\u5f81\u5408\u5e76\u5230\u65e0\u59ff\u52bf\u7684 SMPL \u7f51\u683c\u9876\u70b9\u4e0a \u27a1\ufe0f \u9884\u6d4b\u5305\u542b\u5f62\u4f53\u7684\u59ff\u52bf\uff1b \u4ea4\u53c9\u6ce8\u610f\u529b\u4e0b\u7684 METRO \u9996\u5148\u4f7f\u7528 METRO \u9aa8\u5e72\u90e8\u5206\u4e2d\u7684 CNN \u4ece\u56fe\u7247\u4e2d\u63d0\u53d6\u51fa\u56fe\u50cf\u7279\u5f81\uff0c\u5e76\u6620\u5c04\u3001\u6c60\u5316\u5f97\u5230\u4e0e\u4eba\u4f53 mesh \u9876\u70b9\u4e2a\u6570\u4e00\u81f4\u7684 tokens\uff1b \u5c06\u521d\u59cb\u9876\u70b9\u4e0e\u8fd9\u4e9b\u751f\u6210\u7684 token \u76f4\u63a5\u62fc\u63a5\uff0c\u585e\u8fdb transformer \u91cc\uff0c\u4ee5\u6b64\u6765\u8ba9 transformer \u80fd\u66f4\u597d\u7684\u6ce8\u610f\u5230\u8bed\u4e49\u4e0a\u66f4\u76f8\u5173\u7684\u90e8\u5206\uff1b \u4e3a\u4e86\u5c06\u7528\u6765\u4f30\u8ba1\u4eba\u4f53\u59ff\u6001\u7684 METRO \u4e0e\u9879\u76ee\u63d0\u51fa\u7684\u573a\u666f\u7f51\u7edc\u76f8\u7ed3\u5408\uff0c\u4f7f\u7528\u4e86\u4ea4\u53c9\u6ce8\u610f\u529b(cross attention)\uff1b \u5373 Q \u548c K \u4e0d\u540c\u5c5e\u4e00\u4e2a\u6a21\u5757\uff0c\u5728\u672c\u9879\u76ee\u7684\u8bed\u5883\u4e0b\uff0c\u6307\u4e24\u4e2a\u6a21\u5757\u7684 Q \u548c K \u90fd\u6765\u81ea\u5bf9\u65b9\uff1b \u8fd9\u91cc\u5bf9 METRO \u4f7f\u7528\u5171\u4eab\u6743\u91cd\u7684\u56de\u5f52\u5c42\uff0c\u5177\u4f53\u5e94\u7528\u5728\u4ece\u9010\u70b9\u7279\u5f81\u5230\u70b9\u4f4d\u7f6e\u7684\u56de\u5f52\uff1b \u56e0\u6b64\uff0c\u5f53\u7279\u5f81\u76f8\u4f3c\u7684\u70b9\u88ab\u8f93\u5165\u4ee5\u540e\uff0c\u8f93\u51fa\u7684\u5ea7\u6807\u4e5f\u503e\u5411\u4e8e\u76f8\u4f3c\uff0c\u76f8\u5f53\u4e8e\u8bf4\u5728\u505a scene image \u548c real image \u7684\u7279\u5f81\u5339\u914d\uff1b \u8fd9\u9690\u5f0f\u5730\u5c06\u76f8\u4f3c\u7684\u4eba\u4f53\u9876\u70b9\u548c\u573a\u666f\u70b9\u5bf9\u9f50\uff0c\u4ee5\u4fbf\u4e8e transformer \u5bfb\u627e\u5bf9\u5e94\u5173\u7cfb\uff1b Loss \u7b2c\u4e00\u90e8\u5206 \u00b7 \u6839\u548c\u63a5\u89e6\u70b9 \\(L_ {RC} = L_ {R2D} + w_ {RZ} \\cdot L_ {RZ} + L_ {ROV} + L_ {R3D} + L_ {C}\\) \\(L_ {R2D}\\) \u662f\u6839\u7684\u70ed\u529b\u56fe\u7684 MSE loss\uff1b \\(L_{RZ},L_{ROV},L_{R3D}\\) \u662f\u76f8\u5bf9\u6df1\u5ea6\u3001\u504f\u79fb\u5411\u91cf\u3001\u6839\u7684 3D \u5ea7\u6807\u7684 L1 loss\uff1b \\(L_C\\) \u662f\u63a5\u89e6\u70b9\u7684\u6807\u7b7e\u7684\u4ea4\u53c9\u71b5 loss\uff1b \u7b2c\u4e8c\u90e8\u5206 \u00b7 HMR \\(L_{\\mathrm{HMR}}=L_\\mathrm{V}+L_\\mathrm{J}+L_{\\mathrm{CP}}+L_\\mathrm{GV}\\) \u56db\u4e2a term \u5206\u522b\u662f\u5e73\u79fb\u5bf9\u9f50\u7684\u4eba\u4f53\u9876\u70b9\u7684\u3001\u4eba\u4f53\u5173\u952e\u70b9\u7684\u3001\u91cd\u5efa\u7684\u63a5\u89e6\u70b9\u7684\u3001\u5168\u5c40\u4eba\u4f53\u9876\u70b9\u7684 L1 loss\uff1b "},{"location":"pape_read/SA-MHR/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":" RICH \u573a\u666f\uff1a6 \u5ba4\u5916 & 2 \u5ba4\u5185 \u4e0d\u5904\u7406\u591a\u4eba\u3001\u4e0d\u5904\u7406 bbox \u51fa\u753b\u9762\u7684\u60c5\u51b5 PROX \u573a\u666f\uff1a12 \u5ba4\u5185 "},{"location":"pape_read/SA-MHR/#\u6548\u679c\u5ea6\u91cfmetrics","title":"\u6548\u679c\u5ea6\u91cf(metrics)","text":" HMR G-MPJPE: Global Mean-Per-Joint-Position-Error G-MPVE: Global Mean-Per-Vertex-Error \u5373\u5168\u5c40\u7684 JP \u548c V \u7684 L2 \u8bef\u5dee\uff0c\u76f8\u5bf9\u7684\uff0c\u540e\u9762\u8fd8\u6709\u4e00\u4e2a\u975e\u5168\u5c40\u7684\u8bef\u5dee\uff0c\u8868\u793a\u7684\u662f\u8282\u70b9/\u9876\u70b9\u76f8\u5bf9\u4e8e pelvis \u7684\u5ea7\u6807\u7684\u8bef\u5dee\uff0c\u5168\u5c40\u7684\u8bef\u5dee\u66f4\u80fd\u4f53\u73b0\u5728\u5168\u5c40\u8303\u56f4\u5185\u7684\u6548\u679c\uff1b contact PenE: Penetration Error \u5373\u7a7f\u6a21\u8bef\u5dee\uff0c\u5bf9\u4e8e\u6240\u6709\u7a7f\u5165\u6a21\u8868\u9762\u7684\u70b9\uff0c\u7d2f\u52a0\u5176\u5230\u8868\u9762\u7684\u8ddd\u79bb\uff0c\u8d8a\u7a7f\u8d8a\u574f\uff1b \u95ee\u9898\uff1a\u5177\u4f53\u6765\u8bf4\u5982\u4f55\u8861\u91cf v to scene \u7684\u8ddd\u79bb\uff1f\u5982\u679c\u7a7f\u4e86\u4e00\u4e2a\u6241\u5e73\u6a21\u662f\u5426\u8868\u8fbe\u4e0d\u660e\u663e\uff1f \u662f\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6807\u51c6\u53ea\u662f\u793a\u610f\uff0c\u5b9e\u9645\u5f88\u96be\u505a\u3002 ConFE: Contact Failure Error \u524d\u4e00\u4e2a term \u8868\u793a\u5f53\u8fd9\u91cc\u662f\u63a5\u89e6\u65f6\uff0c\u8981\u5c3d\u53ef\u80fd\u63a5\u8fd1\uff1b\u540e\u4e00\u4e2a term \u8868\u793a\u5f53\u8fd9\u91cc\u4e0d\u63a5\u89e6\u65f6\uff0c\u8981\u5c3d\u53ef\u80fd\u4e0d\u7a7f\u6a21\uff1b \u95ee\u9898\uff1a\u7b2c\u4e8c\u4e2a term \u662f\u4e0d\u662f\u4e0e PenE \u7684\u529f\u80fd\u91cd\u5408\u4e86\uff1f \u6709\u4e00\u90e8\u5206\u91cd\u5408\uff0c\u4f46\u662f\u662f\u5fc5\u8981\u7684\uff0c\u5b83\u8861\u91cf\u7684\u6709\u4e24\u4e2a\u5185\u5bb9\uff1a1. \u5c5e\u4e8e\u63a5\u89e6\u70b9\u7684\uff0c\u8981\u5c3d\u53ef\u80fd\u201c\u63a5\u89e6\u201d\uff1b2. \u4e0d\u5c5e\u4e8e\u63a5\u89e6\u70b9\u7684\uff0c\u8981\u5c3d\u53ef\u80fd\u201c\u4e0d\u63a5\u89e6\u201d\uff1b "},{"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
\u6587\u7ae0\u9898\u76ee\uff1aStochastic Scene-Aware Motion Prediction \u4f5c\u8005\uff1aMohamed Hassan, Duygu Ceylan, Ruben Villegas, Jun Saito, Jimei Yang, Yi Zhou, and Michael Black \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 \u8bba\u6587\uff1a\ud83d\udd17 Demo\uff1a\ud83d\udd17 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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
\u5bfc\u822a\u81f3\u4ea4\u4e92\u76ee\u6807\uff1b \u5bfb\u627e\u4ea4\u4e92\u63a5\u89e6\u70b9(contact point)\uff1b \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
\u968f\u673a\u6a21\u578b \u8f93\u5165 3D \u573a\u666f \u91c7\u6837\u6709\u6548\u4ea4\u4e92\u76ee\u6807 \u751f\u6210\u76ee\u6807\u9650\u5236\u7684\u3001\u573a\u666f\u611f\u77e5\u7684\u3001\u903c\u771f\u7684\u4eba\u4f53\u52a8\u4f5c\u5e8f\u5217 "},{"location":"pape_read/SAMP/#\u8d21\u732e","title":"\u8d21\u732e","text":" \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 \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 \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 \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":" MotionNet
(core)\uff1a\u4e00\u4e2a cVAE\uff0c\u8f93\u5165\u76ee\u6807\u5bf9\u8c61\u548c\u52a8\u4f5c\uff0cMotionNet
\u6bcf\u4e00\u5e27\u5c06\u91c7\u6837\u4e00\u4e2a\u6f5c\u5411\u91cf\uff0c\u8054\u5408\u524d\u4e00\u5e27\u7684\u52a8\u4f5c\u6765\u63a7\u5236\uff08\u5373\u9884\u6d4b\uff09\u4e0b\u4e00\u4e2a\u52a8\u4f5c\uff1b \u5305\u542b\u4e00\u4e2a encoder \u548c\u4e00\u4e2a decoder\uff1b \\(X_i\\) \u8868\u793a\u7b2c \\(i\\) \u65f6\u523b\u7684\u72b6\u6001\uff0c\\(Z\\) \u4e3a\u751f\u6210\u7684\u6f5c\u5411\u91cf\uff0c\\(I\\) \u4e3a\u4ea4\u4e92\u5bf9\u8c61(interaction objects)\uff08\u4ee5\u4eba\u7269\u4e3a\u539f\u70b9\u7684\u4f53\u7d20\u7a7a\u95f4\u8868\u8fbe\uff09\uff1b encoder \u5305\u542b Interaction Encoder \u548c State Encoder\uff0c\u5206\u522b\u5c06 \\(I\\) \u548c \\(X\\) \u7f16\u7801\uff08\u4f7f\u7528 3 \u4e2a FC\uff09\u4e3a\u4f4e\u7ef4\u5ea6\u5411\u91cf\uff0c\u518d\u62fc\u63a5\u8d77\u6765\u8f93\u5165\u5230\u4e24\u4e2a\u5b8c\u5168\u76f8\u540c\u7684 FC \u4e2d\u4ee5\u9884\u6d4b \\(\\mu\\) \u548c \\(\\sigma\\) \u5373\u4e00\u4e2a\u6f5c\u5d4c\u5165\u7a7a\u95f4(latent embedding space)\uff1b \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u4ece\u4ee5\u4e0a\u8ff0\u7ed3\u679c\u4e3a\u53c2\u6570\u7684\u9ad8\u65af\u5206\u5e03\u4e2d\u91c7\u6837\u51fa\u6f5c\u5411\u91cf \\(Z\\) \u4f5c\u4e3a decoder \u7684\u8f93\u5165\uff1b \u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\u8fd9\u91cc\u7684 \\(j^r_i\\) \u662f 6d \u7684\uff1f\uff08\u5b9e\u9645\u4e0a\u662f 9d \u65cb\u8f6c\u77e9\u9635\u4e2d\u4f1a\u53d8\u5143\u6709 6 \u4e2a\uff0c\u901a\u8fc7\u8fd9\u4e2a 6d \u7684\u5411\u91cf\u80fd\u591f\u8fd8\u539f\u51fa\u8fd9\u4e2a\u77e9\u9635\uff0c\u800c\u81f3\u4e8e\u4e3a\u4ec0\u4e48\u7528\u8fd9\u4e2a 6d \u5185\u5bb9\u800c\u975e\u89d2\u5ea6\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff0c\u89d2\u5ea6\u5177\u6709\u7a81\u53d8\u4e0d\u8fde\u7eed\uff1a\\(2pi = 0\\)\uff0c\u6240\u4ee5\u90fd\u4e0d\u600e\u4e48\u7528\u4e86\uff09 decoder \u662f\u4e00\u4e2a MoE\uff0c\u6709 Prediction Network \u548c Gating Network \u4e24\u4e2a\u90e8\u5206\uff0c\u524d\u8005\u8d1f\u8d23\u751f\u6210\u9884\u6d4b\u7ed3\u679c\uff0c\u540e\u8005\u8d1f\u8d23\u751f\u6210\u5404\u4e2a\u4e13\u5bb6\u7f51\u7edc\u7684\u7ed3\u679c\u5408\u6210\u8fc7\u7a0b\u4e2d\u7684\u6743\u91cd\uff1b \u4f7f\u7528\u7684 loss \u4e3a \\(||\\hat{X_i} - X_i||^2_2 + \\beta_1\\mathop{KL}(Q(Z|X_i, X_{i-1}, I) || p(Z))\\)\uff1b \u7279\u522b\u6ce8\u610f\uff0c\u5728\u6d4b\u8bd5\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4ec5\u4ec5\u4ece\u6807\u51c6\u6b63\u6001\u5206\u5e03\u4e2d\u91c7\u6837\u6f5c\u5411\u91cf\uff1b \u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\uff1f GoalNet
\uff1a\u7528\u6765\u751f\u6210\u4ea4\u4e92\u70b9\u548c\u4ea4\u4e92\u65b9\u5411(contact points and orientations)\uff0c\u5373\u76ee\u6807(goals)\uff1b \u8be5\u6a21\u5757\u8ba9 SAMP \u80fd\u591f\u9002\u5e94\u4e0d\u540c\u7684\u76ee\u6807\u51e0\u4f55\u4f53\uff1b \u540c\u6837\u5305\u542b\u4e00\u4e2a encoder \u548c\u4e00\u4e2a decoder\uff1b \\(I\\) \u4e3a\u4ea4\u4e92\u5bf9\u8c61(interaction objects)\uff08\u4ee5\u7269\u4f53\u81ea\u8eab\u4e3a\u539f\u70b9\u7684\u4f53\u7d20\u7a7a\u95f4\u8868\u8fbe\uff09\uff0c\\(\\{g^p, g^d\\}\\) \u5206\u522b\u4e3a\u76ee\u6807(goal)\u7684\u4f4d\u7f6e\u548c\u65b9\u5411\uff0c\\(Z_{goal}\\) \u4e3a\u6f5c\u5411\u91cf\uff1b \u4f7f\u7528\u7684 loss \u4e3a \\(||\\hat{g}^p - g^p||^2_2 + ||\\hat{g}^d - g^d||^2_2 + \\beta_2 \\mathop{KL}(Q(Z_{goal}|g^p, g^d, I) || p(Z_{goal}))\\)\uff1b Path Planning Module
\uff1a\u4f7f\u7528 A* \u5bfb\u8def\u4ee5\u907f\u969c(obstacles)\uff1b \u751f\u6210\u7684\u8def\u7ebf\u4e2d\u5c06\u4f1a\u6709\u8bb8\u591a\u8def\u70b9(way-points)\u4f5c\u4e3a\u8fc7\u7a0b\u4e2d\u7684\u76ee\u6807\u70b9(goals)\uff1b explicit A*\uff1b \u6240\u8c13\u7684\u201c\u8def\u5f84\u201d\uff0c\u5177\u4f53\u6307\u7684\u662f\u4e00\u7cfb\u5217\u8def\u70b9(way point)\uff0c\u901a\u8fc7\u8fd9\u4e9b\u201c\u5c0f\u76ee\u6807\u201d\uff0c\u6765\u4e00\u6b65\u6b65\u5f15\u5bfc\u865a\u62df\u4eba\u5230\u8fbe\u76ee\u6807\u524d\uff0c\u5728\u6700\u540e\u4e00\u4e2a\u8def\u70b9\u8fdb\u884c\u76ee\u6807\u52a8\u4f5c\u7684\u751f\u6210\uff1b \u8fd9\u4e00\u65b9\u9762\u4e0e NSM \u4f7f\u7528 sensor \u68c0\u6d4b\u4e0d\u540c\uff0c\u66f4\u52a0\u9ad8\u6548\uff1b \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
\u95ee\u9898\uff1atrajectory \u548c path \u548c pose \u7684\u533a\u522b\uff1f\u662f\u6307\u5305\u62ec\u4e86\u52a8\u4f5c\u548c\u884c\u52a8\u8def\u7ebf\u7684\u8f68\u8ff9\u5417\uff1f \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
\u6587\u7ae0\u9898\u76ee\uff1aTRACE: 5D Temporal Regression of Avatars with Dynamic Cameras in 3D Environments \u4f5c\u8005\uff1aAuthors:Yu Sun, Qian Bao, Wu Liu, Tao Mei, Michael J. Black \u9879\u76ee\u4e3b\u9875\uff1a\ud83d\udd17 \u8bba\u6587\uff1a\ud83d\udd17 \u4ee3\u7801\uff1a\ud83d\udd17 "},{"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":" \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 \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 \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 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 \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 \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 \u95ee\u9898\uff1aKalman filter \u597d\u50cf\u548c\u6ee4\u6ce2\u6709\u5173\uff1f\u4e3a\u4ec0\u4e48\u8bf4\u662f temporal priors\uff1f \u4f7f\u5e73\u6ed1\u3002 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 \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":" \u63d0\u4f9b\u4e86 5D \u7684\u8868\u8fbe\u65b9\u5f0f\uff0c\u62bd\u8c61\u6765\u8bf4\u9700\u8981\u5305\u62ec\uff1a\u65f6(1)\u7a7a(3)\u5ea7\u6807 + \u4e3b\u4f53\u7279\u5f81(1\uff0c\u62bd\u8c61\u4e00\u70b9\u6765\u770b)\uff1b end2end \u5e76\u4e14 one stage \u7684\u65b9\u6cd5\uff1b \u53d7\u5230 BEV \u542f\u53d1\uff0c\u5f15\u5165\u4e86\u4e86\u4e00\u79cd\u9e1f\u77b0\u89c6\u89d2\u7684 2D map \u6765\u63a8\u7406 3D \u4e2d\u7684 Human\u3002\u8fd9\u4e2a map \u548c\u4e00\u4e2a\u4ee5\u56fe\u7247\u4e3a\u4e2d\u5fc3\u7684 map \u4e00\u8d77\u7528\u6765\u63a8\u7406 Human \u7684 3D \u5ea7\u6807\u3002\u7c7b\u4f3c\u7684\u8fd8\u6709\u4e00\u5806\u5176\u4ed6\u7684 map\uff1b \u4e00\u4e2a memory unit\uff0c\u6765\u505a\u4e00\u4e9b long-term \u7684\u4e8b\u60c5\uff0c\u6bd4\u5982\u5bf9\u906e\u6321\u751a\u81f3\u6682\u65f6\u5931\u914d\u7684\u9c81\u68d2\u7684\u8ffd\u8e2a\uff1b \u4e00\u4e2a\u4e3b\u8981\u7528\u5168\u666f\u89c6\u9891\u6a21\u62df DC-video \u7684\u6570\u636e\u96c6\uff1b "},{"location":"pape_read/TRACE/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"\u53c2\u8003\u6d41\u7a0b\u56fe\u505a\u89e3\u91ca\u3002
\u8f93\u5165\u7684 Video \u6309\u5e27\u8f93\u5165\uff0c\u5373\u8f93\u5165 N \u5f20\u56fe\u7247\uff1b\u540c\u65f6 user \u6307\u5b9a\u9700\u8981\u8ffd\u8e2a\u7684\u4eba\u6570 K\uff1b \u968f\u540e\uff0c\u56fe\u7247\u5e8f\u5217\u5206\u522b\u901a\u8fc7 Image backbone \u548c Motion backbone \u5f97\u5230\u5355\u5e27\u7684\u7279\u5f81 map \\(F_i\\) \u548c\u5149\u6d41 map \\(O_i\\)\uff1b Image backbone(HRNet-32) \u7ebf\u91cc\uff0c\u5229\u7528 \\(F_{i-1}\\) \u548c \\(F_{i}\\)\uff0c\u4ee5\u53ca\u4e0a\u4e00\u4e2a\u65f6\u5e8f\u7279\u5f81\u4f20\u64ad\u6a21(temporal feature propagation module, ConvGRU)\u5757\u5f97\u5230\u7684 \\(H_{i-1}\\)\uff0c\u9884\u6d4b\u8fd9\u4e00\u5e27\u7684\u65f6\u5e8f\u7279\u5f81\uff0c\u5e76\u5f97\u5230\u7ecf\u8fc7\u6a21\u7cca\u7684\u2014\u2014\u5305\u542b\u65f6\u5e8f\u4fe1\u606f\u7684\u7279\u5f81 map \\(F_i'\\)\uff1b \u95ee\u9898\uff1a\u8fd9\u91cc\u7684 ConvGRU \u76f8\u5173\u7684\u4e0d\u662f\u5f88\u6e05\u695a\uff0c\u6bd4\u5982 \\(H_i\\) \u662f\u4ec0\u4e48\uff1f \u6682\u65f6\u8df3\u8fc7\u3002 Motion backbone(RAFT) \u8ba1\u7b97\u5149\u6d41\uff1b \u5728\u5b8c\u6210\u65f6\u5e8f\u7279\u5f81\u63d0\u53d6(temporal feature extraction)\u4ee5\u540e\uff0c\u662f\u4e00\u7cfb\u5217\u7684 head network\uff0c\u5b83\u4eec\u5e76\u4e0d\u5b8c\u5168\u5e73\u884c\uff0c\u90e8\u5206 branch \u548c\u5176\u5b83 branch \u6709\u5148\u540e\u8981\u6c42\uff0c\u4f46\u662f\u65e2\u7136\u56fe\u90fd\u8fd9\u4e48\u753b\u4e86\uff0c\u8fd9\u91cc\u5c31\u5f53\u5e73\u884c\u7684\u6a21\u5757\u6765\u8bb2\uff1b Detection \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u4e3a\u8f93\u5165\uff1b \u76f8\u673a\u5ea7\u6807\u7cfb\uff1b \u4f7f\u7528\u6b63\u89c6\u548c\u4fef\u89c6\u4e24\u4e2a\u65b9\u5411\u7684 view maps \u5408\u6210\u9884\u6d4b\uff08\u6765\u5219 BEV\uff09\uff0c\u5f97\u5230\u4e00\u4e2a 3D \u4e2d\u5fc3 map(3D Center map) \\(M_C^{3D}\\in \\mathrm{R}^{1\\times D\\times H\\times W}\\) \u548c\u4e00\u4e2a 3D \u5b9a\u4f4d map(3D Localization map) \\(M_{L}^{3D} \\in \\mathrm{R}^{1\\times D\\times H\\times W}\\)\uff1b \u4ece \\(M_C^{3D}\\) \u4e2d\u5f97\u5230 K \u4e2a\u5bf9\u8c61\u7684 3D \u4e2d\u5fc3 \\(\\tilde t_{i}\\) \u53ca\u5176\u7f6e\u4fe1\u5ea6 \\(c_i\\)\uff0c\u7136\u540e\u4ece \\(M_{L}^{3D}\\) \u4e2d\u5728 \\(\\tilde t_{i}\\) \u5904\u91c7\u6837\u4ece \\(\\tilde t_{i}\\) \u6307\u5411\u7cbe\u786e\u4f4d\u7f6e\u7684\u504f\u79fb\u5411\u91cf \\(\\Delta t_i\\)\uff0c\u4e8e\u662f\u5f97\u5230\u7cbe\u786e\u7684\u4f4d\u7f6e\u4e3a \\(t_i = \\tilde{t}_i + \\Delta t\\)\uff1b \u95ee\u9898\uff1a\u4e3a\u5565\u8981\u4e24\u6b65\uff0c\u4e0d\u80fd\u76f4\u63a5\u5f97\u5230\u7cbe\u786e\u4f4d\u7f6e\u5417\uff1f \u9700\u8981\u5b9e\u9a8c\u8bc1\u660e\u3002 Tracking \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u548c\u5149\u6d41 \\(O_i\\) \u4e3a\u8f93\u5165\uff1b \u76f8\u673a\u5ea7\u6807\u7cfb\uff1b \u4f7f\u7528 \\(F_i'\\) \u548c \\(O_i\\) \u9884\u6d4b 3D \u8fd0\u52a8\u504f\u79fb map(3D Motion Offset map) \\(M^{3D}_{M} \\in \\mathrm{R}^{3\\times D\\times H\\times W}\\)\uff0c\u6765\u63a8\u7406\u4eba\u5728 3D \u7a7a\u95f4\u4e2d\u7684\u4f4d\u7f6e\u504f\u79fb \\(\\Delta m_i\\)\uff0c\u8fd9\u4e2a\u504f\u79fb\u53ea\u662f\u7528\u6765\u505a tracking \u7684\uff1b \u5229\u7528 \\(\\Delta m_i\\)\uff0c\\(t_i\\) \u548c \\(c_i\\)\uff0c\u5728 Memory unit \u7684\u4f5c\u7528\u4e0b\u5b9e\u73b0\u8ffd\u8e2a\uff1b Memory unit \u7684\u5de5\u4f5c\u6d41\u7a0b\u5206\u4e09\u4e2a\u6b65\u9aa4\uff1a \u521d\u59cb\u5316\uff1b \u5339\u914d\uff1b \u66f4\u65b0\uff1b Mesh \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u548c\u5149\u6d41 \\(O_i\\) \u4e3a\u8f93\u5165\uff1b \u5f97\u5230 SMPL \u7ed3\u679c\uff1b World \u6a21\u5757\uff0c\u4ee5\u65f6\u5e8f\u56fe\u50cf\u7279\u5f81 \\(F_i'\\) \u548c\u5149\u6d41 \\(O_i\\) \u4e3a\u8f93\u5165\uff1b \u5373\u4e4b\u524d\u63d0\u5230\u7684\u4f7f\u7528 pose \u6765\u4f30\u8ba1\u5168\u5c40\u7684\u52a8\u4f5c\uff1b "},{"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
\u5b98\u65b9\u6587\u6863 \ud83d\udd17 \u7b14\u8bb0 \ud83d\udd17 \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.pyfrom 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.yamldriver: mysql\nuser: omry\npassword: secret\n
db/postgresql.yamldriver: postgresql\nuser: postgres_user\npassword: drowssap\ntimeout: 10\n
my_app.pyfrom 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
\u5982\u679c\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u5219 +A=B
\u8868\u793a\u6307\u5b9a A group \u91cc\u7684 b.yaml
\u9879\uff1b \u5982\u679c\u4e0d\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u5219 +A=B
\u8868\u793a\u589e\u52a0\u4e00\u4e2a field\uff0c\u5176 key \u4e3a A\uff0cvalue \u4e3a B\uff1b \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:
If multiple configs define the same value, the last one wins. If multiple configs contribute to the same dictionary, the result is the combined dictionary. \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.yamldefaults:\n- group1: option1\n- group1/group2: option1_1\n
group1/option1.yamldefaults:\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
\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 \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
PyTorch \u4e3b\u8981\u6709\u4e24\u4e2a\u7528\u9014\uff1a \u80fd\u591f\u4f7f\u7528 GPU \u52a0\u901f\u7684 NumPy \u66ff\u4ee3\u54c1\uff1b \u5185\u7f6e\u7684\u81ea\u52a8\u5fae\u5206\u5e93\u7b49\u5bf9\u795e\u7ecf\u7f51\u7edc\u7684\u5b9e\u73b0\u4ea7\u751f\u8f83\u5927\u7684\u5e2e\u52a9\uff1b \u53c2\u8003\u8d44\u6599 PyTorch \u5b98\u7f51\uff1a\ud83d\udd17 A 60 MINUTE BLITZ\uff1a\ud83d\udd17 *\u672c\u6587\u4e3b\u8981\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u601d\u8def\u6765\uff1b PyTorch \u5b98\u65b9\u6559\u7a0b\u4e2d\u6587\u7248\uff1a\ud83d\udd17 PyTorch\u7b80\u660e\u6559\u7a0b\uff1a\ud83d\udd17 "},{"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
\u4e00\u822c\u6765\u8bf4(\u4e0d\u8003\u8651const+reference)\u80fd\u521b\u5efa\u7684\u5f15\u7528\u7684\u5fc5\u987b\u662f\u4e2a\u53d8\u91cf\uff0c\u800c\u4e0d\u80fd\u662f\u4e2a\u8868\u8fbe\u5f0f\u3001\u5e38\u91cf\u3002 \u6362\u53e5\u8bdd\u8bf4\uff0c\u53ea\u80fd\u7ed9\u5de6\u503c(left value)\u521b\u5efa\u5f15\u7528 \u7279\u522b\u7684\uff1a 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
\u5f15\u7528\u5728\u521b\u5efa\u7684\u65f6\u5019\u5fc5\u987b\u521d\u59cb\u5316\uff0c\u5373int &x;
\u9519\u8bef\uff1bint &x = y;
\u6b63\u786e\u3002 Bindings\u4e00\u65e6\u5efa\u7acb\uff0c\u65e0\u6cd5\u53d6\u6d88 reference\u672c\u8d28\u4e0a\u5c31\u662f\u53d7\u9650\u7684pointer reference\u4e0d\u5b58\u5728reference reference\u4e0d\u5b58\u5728pointer \u5b9a\u4e49int *p = &x;
int&* ref = ...;
\u975e\u6cd5\uff0cref
\u4e0d\u80fd\u662f\u4e00\u4e2a\u5f15\u7528\u7684\u6307\u9488 int*& ref = p;
\u5408\u6cd5\uff0cref
\u662f\u4e00\u4e2a\u6307\u9488\u7684\u5f15\u7528 \u4e0d\u5b58\u5728reference\u6570\u7ec4 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
int &refA = A;
\u975e\u6cd5 const int &refA = A;
\u5408\u6cd5 const int &refA = 1;
\u5408\u6cd5 \u51fd\u6570\u4f20\u53c2\u540c\u7406 "},{"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":" <Class Name>::<Function Name>
\u8868\u793a\u8fd9\u4e2a <Function Name>
\u662f\u4e0d\u81ea\u7531\u7684\uff0c\u5c5e\u4e8e <Class Name>
\u7684\uff1b ::<Function Name>
\u8868\u793a\u8fd9\u4e2a <Function Name>
\u662f\u5168\u5c40\u53d8\u91cf\u4e2d\u7684\u81ea\u7531\u51fd\u6570\uff08\u53d8\u91cf\u540c\u7406\uff09\uff1b #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
\u7c7b\u7684\u9759\u6001\u53d8\u91cf\u5c5e\u4e8e\u7c7b\u4e0d\u5c5e\u4e8e\u5b9e\u4f8b\uff0c\u4e0d\u80fd\u901a\u8fc7\u6b63\u5e38\u7684\u65b9\u5f0f\u521d\u59cb\u5316\uff0c\u53ef\u4ee5\u7528\u8fc7\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26\u5728\u5168\u5c40\u521d\u59cb\u5316 \u5b9e\u9645\u4e0a\uff0c\u7f16\u8bd1\u5668\u5c06\u5bf9\u8c61\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u81ea\u52a8\u8f6c\u6362\u6210\u4e86\u7c7b\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u3002\u56e0\u6b64\uff0c\u5efa\u8bae\u59cb\u7ec8\u4f7f\u7528className::staticVar
\u8bbf\u95ee\u9759\u6001\u53d8\u91cf_(xxjj\u5728\u8fd9\u91cc\u8bf4\u7684)_ "},{"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
overload\u4e0d\u652f\u6301\u81ea\u52a8\u7c7b\u578b\u8f6c\u6362 "},{"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);
\u6b64\u65f6\u8c03\u7528fun()
\u53ef\u4ee5\u7701\u7565\u5b58\u5728\u9ed8\u8ba4\u53c2\u6570\u7684\u53c2\u6570 \u4f46\u662f\u4e0d\u5b58\u5728\u9ed8\u8ba4\u503c\u7684\u53c2\u6570\u5fc5\u987b\u5728\u5b58\u5728\u9ed8\u8ba4\u503c\u7684\u53c2\u6570\u524d\u9762 void fun(int x, int a = 0);
\u5408\u6cd5 void fun(int x = 0, int a);
\u975e\u6cd5 \u5982\u679c\u540c\u65f6\u5b58\u5728\u51fd\u6570\u58f0\u660e\u548c\u51fd\u6570body\uff0c\u5219\u5728\u8fd9\u4e24\u90e8\u5206\u4e2dDefault Argument\u53ea\u80fd\u5728\u5176\u4e2d\u4e00\u4e2a // \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
inline
\u4ec5\u4ec5\u662f\u5bf9\u7f16\u8bd1\u5668\u7684\u4e00\u4e2a\u5efa\u8bae \ud83d\udd17\u5f15\u7528\u4e00\u4e0bxxjj\u7684\u6587\u7ae0 \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cinline
\u662f\u5728\u6bcf\u4e00\u4e2a\u7f16\u8bd1\u5355\u5143\u4e2d\u8fdb\u884c\u7684\uff0c\u6240\u4ee5\u8fd9\u5c31\u5bfc\u81f4\u4e86\u5185\u8054\u51fd\u6570\u7684\u539f\u578b\u5e94\u5f53\u80fd\u76f4\u63a5\u88ab\u8c03\u7528\u8be5\u51fd\u6570\u7684\u6587\u4ef6\u8bbf\u95ee\u5230\u3002 eg. \u5728a.cpp
\u4e2d\u8c03\u7528f();
\u5e76#include \"b.h\"
\u5728b.h
\u4e2d\u58f0\u660einline void f();
\u5728b.cpp
\u4e2d\u5199\u660ef()
\u7684body \u7ed3\u679c\u5c31\u662f\u4f1a\u7f16\u8bd1\u9519\u8bef\u2014\u2014\u9700\u8981\u5c06f()
\u7684body\u653e\u5230a.cpp
\u6216\u8005b.h
\u4e2d\u624d\u53ef\u4ee5\u2014\u2014\u56e0\u4e3a\u5728\u7f16\u8bd1\u7684\u65f6\u5019a.cpp
\u4ec5\u548cb.h
\u4e00\u8d77\u7f16\u8bd1\uff0c\u5e76\u4e0d\u77e5\u9053f()
\u7684body\u5728\u54ea\u91cc\uff0c\u65e0\u6cd5\u8fdb\u884c\u201c\u5185\u8054\u201d inline
\u4e0e \u5b8f \u5f88\u76f8\u4f3c\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u533a\u522b\uff1a
\u505a\u7684\u4e8b\u60c5\u662f\u7c7b\u4f3c\u7684\uff0c\u4f46\u7528\u5b8f\u65e0\u6cd5\u5b9e\u73b0\u9690\u5f0f\u7c7b\u578b\u8f6c\u5316 \u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4inline
\u53ea\u662f\u4e2a\u5efa\u8bae\uff0c\u7f16\u8bd1\u5668\u672a\u5fc5\u4f1a\u5b9e\u73b0 \u5728\u4e00\u4e2a\u7c7b\u91cc\u5b9a\u4e49body\u7684\u51fd\u6570\uff0c\u5b83\u9ed8\u8ba4\u662finline
\u51fd\u6570 \u5982\u679c\u5728\u7c7b\u91cc\u6ca1\u6709\u5b9a\u4e49body\uff0c\u90a3\u4e48\u8be5\u51fd\u6570\u662f\u5185\u8054\u51fd\u6570\u5f53\u4e14\u4ec5\u5f53\u524d\u9762\u6709inline
\u5173\u952e\u8bcd "},{"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
char * const p;
\u4fee\u9970\u7684\u662fp
const char *p;
\u4fee\u9970\u7684\u662f*p
char const *p;
\u4fee\u9970\u7684\u662f*p
const char * const p;``*p
\u548cp
\u90fd\u88ab\u4fee\u9970 const
\u51fa\u73b0\u5728*
\u5de6\u4fa7\uff0c\u4fee\u9970\u7684\u662f*p
const
\u51fa\u73b0\u5728*
\u53f3\u4fa7\uff0c\u4fee\u9970\u7684\u662fp
\uff08\u82e5const char *p = &ch;
\uff0c\u867d\u7136\u901a\u8fc7*p
\u65e0\u6cd5\u66f4\u6539\u6307\uff0c\u4f46ch
\u4ecd\u7136\u53ef\u4ee5\u4fee\u6539\uff0c\u8fdb\u4e00\u6b65\u4f53\u73b0\u8fd9\u662f\u4e2a\u7f16\u8bd1\u65f6\u523b\u884c\u4e3a\uff09 \u5728\u8fd9\u4e9b\u6027\u8d28\u4e0b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e00\u4e2a\u975econst
\u7684\u53d8\u91cf\u8d4b\u503c\u7ed9const
\u53d8\u91cf\uff08\u7279\u522b\u662f\u51fd\u6570\u4f20\u53c2\uff09\uff0c\u6765\u63a7\u5236\u6307\u9488\u7684\u8bfb\u5199\u6743\u9650\uff08\u53ef\u4ee5\u7528\u6765\u51cf\u5c11\u4ee3\u7801\u5199\u9519\u7684\u60c5\u51b5\uff09 \u4e00\u4e2a\u88abconst
\u4fee\u9970\u8fc7\u7684\u5bf9\u8c61\u7684\u6210\u5458\u51fd\u6570\u53ea\u6709\u5728\u8be5\u51fd\u6570\u4e5f\u88abconst
\u4fee\u9970\u8fc7\u4e14\u7ecf\u8fc7\u7f16\u8bd1\u5668\u68c0\u6d4b\u786e\u5b9e\u4e0d\u4fee\u6539\u6210\u5458\u53d8\u91cf\u7684\u60c5\u51b5\u4e0b\u624d\u80fd\u6267\u884c int A::fun() const;
\u548cint A::fun();
\u53ef\u4ee5\u6784\u6210overload\u5173\u7cfb\uff0c\u56e0\u4e3a\u8fd9\u91cc\u7684const
\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u9690\u85cf\u7684A *this
\u88abconst
\u4fee\u9970\uff0c\u53c2\u6570\u8868\u4e0d\u540c\uff0c\u7b26\u5408overload\u6761\u4ef6 \u5f53\u4e0a\u8ff0\u4e24\u4e2a\u51fd\u6570\u90fd\u5b58\u5728\u65f6\uff0c\u5f53\u4e14\u4ec5\u5f53\u5bf9\u8c61\u88abconst
\u4fee\u9970\u624d\u4f1a\u8c03\u7528\u524d\u8005 \u5982\u679c\u6210\u5458\u53d8\u91cf\u662fconst
\uff0c\u90a3\u5fc5\u987b\u5b58\u5728\u521d\u59cb\u5316\u65b9\u6848 "},{"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
\u7c7b\u7684\u9759\u6001\u53d8\u91cf\u5c5e\u4e8e\u7c7b\u4e0d\u5c5e\u4e8e\u5b9e\u4f8b\uff0c\u4e0d\u80fd\u901a\u8fc7\u6b63\u5e38\u7684\u65b9\u5f0f\u521d\u59cb\u5316\uff0c\u53ef\u4ee5\u7528\u8fc7\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26\u5728\u5168\u5c40\u521d\u59cb\u5316 \u5b9e\u9645\u4e0a\uff0c\u7f16\u8bd1\u5668\u5c06\u5bf9\u8c61\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u81ea\u52a8\u8f6c\u6362\u6210\u4e86\u7c7b\u5bf9\u9759\u6001\u53d8\u91cf\u7684\u8bbf\u95ee\u3002\u56e0\u6b64\uff0c\u5efa\u8bae\u59cb\u7ec8\u4f7f\u7528className::staticVar
\u8bbf\u95ee\u9759\u6001\u53d8\u91cf_(xxjj\u5728\u8fd9\u91cc\u8bf4\u7684)_ \u7c7b\u7684\u9759\u6001\u51fd\u6570\u4e0d\u518d\u5177\u6709this
\u6307\u9488\uff0c\u4e5f\u4e0d\u80fd\u76f4\u63a5\u8bbf\u95ee\u975e\u9759\u6001\u6210\u5458\u53d8\u91cf\u6216\u8005\u975e\u9759\u6001\u6210\u5458\u51fd\u6570 \u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u8981\u5728class
\u91cc\u58f0\u660estatic
\u53d8\u91cf/\u51fd\u6570\uff0c\u5219\u53ea\u5728.h
\u6587\u4ef6\u4e2d\u51fa\u73b0\u5173\u952e\u5b57\uff0c\u4e0d\u8981\u5728.cpp
\u4e2d\u51fa\u73b0 "},{"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>();
using namespace xxx;
\u540e\u53ef\u4ee5\u7701\u7565<Space Name>::
\uff0c\u4f46\u662f\u8981\u6ce8\u610f\u6b67\u4e49\u95ee\u9898 using xxx::yyy;
\u540e\u4ec5\u4ec5\u5bf9yyy
\u6765\u8bf4\u53ef\u4ee5\u7701\u7565<Space Name>::
\uff0c\u540c\u6837\u8981\u6ce8\u610f\u6b67\u4e49\u95ee\u9898 \u4e24\u4e2a\u547d\u540d\u7a7a\u95f4\u6709\u76f8\u540c\u51fd\u6570/\u53d8\u91cf\u7684\u65f6\u5019\uff0c\u9700\u8981\u5199\u660e\u547d\u540d\u7a7a\u95f4 namespace x = y;
\u8868\u793a\u53ef\u4ee5\u7528x
\u6765\u8868\u793a\u547d\u540d\u7a7a\u95f4y
\uff0c\u4f46\u662f\u5728\u6b64\u524dy
\u5fc5\u987b\u5df2\u7ecf\u5b9a\u4e49 namespace
\u91cc\u4e5f\u53ef\u4ee5\u6709namespace
\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a \u7ec4\u5408 "},{"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
\u9aa8\u67b6\u4fe1\u606f(header section)\uff1a\u5b9a\u4e49\u4e86\u9aa8\u67b6\u7684\u7ec4\u7ec7\u7ed3\u6784\uff0c\u6307\u5bfc\u5982\u4f55\u89e3\u6790\u6570\u636e\u5757\u3002 \u6570\u636e\u5757(data section)\uff1a\u5305\u542b\u4e86\u6bcf\u4e00\u5e27\u5404\u90e8\u5206\u7684\u6570\u636e\u4fe1\u606f\u3002 \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
OFFSET
\u8868\u793a\u76f8\u5bf9\u4e0e\u7236\u8282\u70b9\uff0c\u8be5\u8282\u70b9\u7684\u504f\u79fb\uff1b \u5bf9\u4e8e \u6839\u8282\u70b9 \u6765\u8bf4\uff0c\u5b83\u4e00\u822c\u662f0 0 0
\uff1b \u00b7CHANNELS
\u540e\u6709\u4e24\u4e2a\u90e8\u5206\uff0c\u9996\u5148\u662f\u4e00\u4e2a\u6570\u5b57\u8868\u793a\u540e\u9762\u6709\u51e0\u4e2a\u901a\u9053\u3002 \u4e00\u822c\u6765\u8bf4\uff0c\u6839\u8282\u70b9 \u4f1a\u6709 6 \u4e2a\u901a\u9053\uff0c\u5982\u4e0a\u793a\u4f8b\u6709Xposition Yposition Zposition Zrotation Yrotation Xrotation
\uff0c\u5206\u522b\u4ee3\u8868\u5728data section
\u4e2d\uff0c\u5e27\u5e8f\u5217\u7684\u6570\u636e\u6309\u8fd9\u6837\u7684\u65b9\u5f0f\u5b58\u50a8\uff0c\u524d\u4e09\u4e2a\u4ee3\u8868\u7684\u662f \u4f4d\u79fb \u4e0b\u6bcf\u4e2a\u5206\u91cf\u7684\u987a\u5e8f\uff08\u6b64\u5904\u8868\u793a\uff1a\u4f9d\u6b21\u4e3a x \u5750\u6807\uff0c y \u5750\u6807\uff0c z \u5750\u6807\uff0c\u4e00\u822c\u53ea\u6709\u6839\u8282\u70b9\u6709\u8fd9\u4e09\u4e2a\u901a\u9053\uff0c\u7528\u6765\u8868\u793a\u9aa8\u67b6\u7684\u4f4d\u79fb\uff09\uff0c\u540e\u4e09\u4e2a\u4ee3\u8868\u7684\u662f \u65cb\u8f6c\u89d2\u5ea6 \u987a\u5e8f\uff1b \u800c\u5bf9\u4e8e \u975e\u6839\u8282\u70b9\uff0c\u4e00\u822c\u6709 3 \u4e2a\u901a\u9053\uff0c\u4ee3\u8868\u7684 \u65cb\u8f6c\u89d2\u5ea6 \u987a\u5e8f\uff1b \u6ce8\u610f\uff0c\u8fd9\u91cc\u4f7f\u7528\u7684 \u89d2\u5ea6\u5236 \u800c\u975e\u5f27\u5ea6\u5236\uff1b \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
\u5728\u8fd9\u5f20\u56fe\u4e2d\uff0cNeck``LeftCollar``RightCollar
\u662fChest
\u7684\u5b50\u8282\u70b9\uff0c\u5219Neck``LeftCollar``RightCollar
\u7684\u76f8\u5bf9\u4f4d\u7f6e\u5e94\u5f53\u4e0d\u53d8\uff0c\u4e4b\u540e\u7684\u53d8\u6362\u4ec5\u4ec5\u901a\u8fc7\u5b83\u4eec\u6574\u4f53\u76f8\u5bf9\u4e8eChest
\u7684\u65cb\u8f6c\u5b9e\u73b0\u3002 \u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a
ROOT
\u548cJOINT
\u5728\u8bed\u6cd5\u4e0a\u57fa\u672c\u4e00\u81f4\uff0c \u53ea\u4e0d\u8fc7\u7b2c\u4e00\u4e2a\u51fa\u73b0\u7684\u8282\u70b9\u9700\u8981\u7528ROOT
\u7d22\u5f15\uff0c\u4e14\u5b83\u67096\u4e2a\u901a\u9053\uff1b \u800c\u4e4b\u540e\u7684\u5b50\u8282\u70b9\u901a\u8fc7JOINT
\u7d22\u5f15\uff0c\u4e14\u67093\u4e2a\u901a\u9053\u3002 \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
\u9aa8\u67b6\u662f\u6709\u82e5\u5e72\u201c\u9aa8\u68d2\u201d\u7ec4\u6210\u7684\uff0c\u8fd9\u4e2a\u201c\u9aa8\u68d2\u201d\u79f0\u4e3asegment
\uff0c\u800c\u5b9a\u4e49\u4e00\u4e2asegment
\u9700\u8981\u4e24\u4e2a\u7aef\u70b9\uff0c\u800cEnd Site
\u5c31\u662f\u8fd9\u4e2asegment
\u94fe\u7684\u672b\u7aef\uff0c\u5b83\u4e0d\u5177\u5907\u65cb\u8f6c\u4fe1\u606f\uff0c\u56e0\u4e3a\u5b83\u6ca1\u6709\u5b50\u8282\u70b9\uff0c\u4ec5\u4ec5\u7528\u6765\u901a\u8fc7\u5750\u6807\u8868\u8fbe\u6700\u540e\u4e00\u4e2asegment
\u7684\u957f\u5ea6\u3002 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":" https://en.wikipedia.org/wiki/Biovision_Hierarchy https://research.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/BVH.html https://blog.csdn.net/u012336923/article/details/50972968 https://blog.csdn.net/u012336923/article/details/50979894 https://zhuanlan.zhihu.com/p/71818887 https://www.4k8k.xyz/article/one_2_one/97963901 https://www.youizone.com/2015/06/04/bvh-files.html "},{"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
Colab URL: \ud83d\udd17 A&Q: \ud83d\udd17 \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
\u5728\u6587\u672c\u5355\u5143\u4e2d\uff0c\u4f60\u53ef\u7528\u96c6\u6210\\(\\LaTeX\\)\u3001HTML
\u3001\u5bcc\u6587\u672c\u3001Markdown \u7b49\uff1b \u800c\u5bf9\u4e8e\u4ee3\u7801\u5355\u5143\uff0c\u4f60\u5219\u53ef\u4ee5\u76f4\u63a5\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2aPython
\u89e3\u91ca\u5668\uff1a
\u540c\u65f6\uff0c\u5728\u4e00\u884c\u7684\u6700\u524d\u9762\u52a0\u4e0a!
\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u7ec8\u7aef\u547d\u4ee4 \u4f8b\u5982\u5728 \u4ee3\u7801\u5355\u5143 \u4e2d\u8f93\u5165!pwd
\u5c31\u7b49\u4ef7\u4e8e\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165pwd
\u4f46\u5728 \u4ee3\u7801\u5355\u5143 \u4e2d\u8f93\u5165pwd
\u5219\u4f1a\u62a5\u9519\uff0c\u56e0\u4e3a\u8fd9\u4e0d\u662f\u4e00\u4e2aPython
\u547d\u4ee4 \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
\u6570\u636e\u79d1\u5b66: \ud83d\udd17 \u673a\u5668\u5b66\u4e60: \ud83d\udd17 "},{"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":" https://zhuanlan.zhihu.com/p/387509768 https://itiandong.com/2021/colab-tips/ "},{"location":"tech_accu/tool/Colab/#\u5176\u4ed6\u8d44\u6599","title":"\u5176\u4ed6\u8d44\u6599","text":" https://jishuin.proginn.com/p/763bfbd316dc "},{"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
Workflow Commands Commits Convention\uff08\u8ba1\u5212\u4e2d\uff09 Lazy Git\uff08\u8ba1\u5212\u4e2d\uff09 "},{"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":" .gitignore
\u6587\u4ef6 \u8054\u7cfbgit rm --cached <file>
\u201c\u8ffd\u8e2a\u201d\u7684\u6982\u5ff5 HEAD
git stash "},{"location":"tech_accu/tool/Git/Commands/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":" https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html https://www.cnblogs.com/lance-ehf/p/3871643.html https://blog.csdn.net/Lakers2015/article/details/111318801 "},{"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
Git Workflow Github Workflow Gitlab Workflow \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":" \u8fd9\u91cc\u7684 Workflow \u4e0e Github Action \u4e2d\u7684 Workflow \u6709\u533a\u522b\uff01 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
\u521b\u5efa\u5206\u652f (create a branch or fork)\uff1b \u5728\u5206\u652f\u4e2d\u8fdb\u884c\u5f00\u53d1\u5e76\u5b8c\u6210\u63d0\u4ea4 (add commits)\uff1b \u53d1\u9001 Pull Request (open a pull request)\uff1b \u4eba\u5de5\u5ba1\u6838\u4ee3\u7801\u3001\u6c9f\u901a\u4ea4\u6d41\uff0c\u4ee5\u53ca\u5fc5\u8981\u7684\u6d4b\u8bd5 (discuss and review)\uff1b \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":" https://nvie.com/posts/a-successful-git-branching-model/ https://www.ruanyifeng.com/blog/2015/12/git-workflow.html https://gitbook.tw/chapters/gitflow/why-need-git-flow https://medium.com/i-think-so-i-live/git\u4e0a\u7684\u4e09\u7a2e\u5de5\u4f5c\u6d41\u7a0b-10f4f915167e https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md https://about.gitlab.com/topics/version-control/what-is-git-workflow/ "},{"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
\u5982\u679c\u60a8\u662f Linux/MacOS \u7528\u6237\uff0c\u90a3\u4e48\u60a8\u7684\u7cfb\u7edf\u4e00\u822c\u90fd\u4f1a\u81ea\u5e26 Terminal \u7a0b\u5e8f\uff0c\u76f4\u63a5\u6253\u5f00\u5e76\u8f93\u5165 bash \u4ee5\u542f\u7528 bash\uff1b \u5982\u679c\u60a8\u662f Windows \u7528\u6237\uff0c\u90a3\u4e48\u60a8\u53ef\u4ee5\u9009\u62e9\u76f4\u63a5\u4e0b\u8f7d Git Bash\uff1b \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
\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u9f20\u6807\u6eda\u8f6e/\u624b\u52bf\u7ffb\u9875/\u56de\u8f66\u7b49\u9014\u5f84\u53ef\u4ee5\u67e5\u770b\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\uff0c\u6309\u4e0b q
\u79bb\u5f00\u624b\u518c\u9875\u9762\u3002 \u6b64\u5916\uff0cuser manual \u7684\u5185\u5bb9\u53ef\u80fd\u4f1a\u6839\u636e\u4f7f\u7528\u7684 Shell \u4e0d\u540c\u800c\u4e0d\u540c\uff0c\u751a\u81f3\u5728\u4e00\u4e9b Shell \u90fd\u4e0d\u4e00\u5b9a\u6709 user manual\u3002 \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
.
\u8868\u793a\u5f53\u524d\u8def\u5f84\uff1b ..
\u8868\u793a\u4e0a\u7ea7\u8def\u5f84\uff08\u6307\u4e0a\u4e00\u4e2a\uff09 \uff1b \u6b64\u5916\uff0c\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e9b\u5feb\u6377\u65b9\u5f0f\uff1a
\u5982\u679c\u53ea\u6709 cd
\uff0c\u5219\u8fd4\u56de\u5bb6\u76ee\u5f55 ~
\uff08\u53ef\u4ee5\u53d1\u73b0 eg 4 \u548c eg 5 \u7b49\u4ef7\uff09\uff1b cd -
\u8fd4\u56de\u4e0a\u4e00\u6b21 cd
\u4e4b\u524d\u6240\u5728\u7684\u4f4d\u7f6e\uff1b cd ~username
\u5207\u6362\u5230\u76ee\u6807\u7528\u6237\u7684\u5bb6\u76ee\u5f55\uff1b "},{"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
\u6709\u65f6\uff0c\u6211\u4eec\u4f1a\u4e3a ls -l
\u8bbe\u7f6e\u4e00\u4e2a alias\uff0c\u5373 alias ll=\"ls -l\"
\uff0c\u8fd9\u6837\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u66f4\u65b9\u4fbf\u7684 ll
\u4e86\u3002 \u5176\u4e2d\uff0c l
\u4e2d\u7684\u5177\u4f53\u683c\u5f0f\u5982\u4e0b\uff1a -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
\u5173\u4e8e\u8fd9\u90e8\u5206\u5177\u4f53\u90e8\u5206\u5b57\u6bb5\u7684\u5177\u4f53\u89e3\u91ca\uff0c\u8bf7\u53c2\u8003\u76f8\u5173\u8d44\u6599\uff0c\u4e0d\u5c5e\u4e8e\u672c\u6587\u7684\u8303\u7574\u3002 "},{"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
\u800c\u5b9e\u9645\u4e0a cat
\u547d\u4ee4\u6700\u91cd\u8981\u7684\u4f5c\u7528\u5e76\u4e0d\u662f \u663e\u793a \u6587\u4ef6\u5185\u5bb9\uff0c\u4ed4\u7ec6\u89c2\u5bdf\u63cf\u8ff0\uff0c\u5b83\u7684\u4f5c\u7528\u662f \u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u6d41\uff0c\u5176\u4f5c\u7528\u5728\u4e4b\u540e\u4ecb\u7ecd\u4e86\u91cd\u5b9a\u5411\u4e4b\u540e\u4f1a\u51f8\u663e\u51fa\u6765\u3002 "},{"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
\u9f20\u6807\u6eda\u8f6e / \u89e6\u63a7\u677f\u624b\u52bf\uff1a\u7ffb\u9875\u6d4f\u89c8\uff1b [space]
/ PageDown
\uff1a\u5f80\u540e\u7ffb\u4e00\u9875\uff1b b
/ PageUp
\uff1a\u5f80\u524d\u7ffb\u4e00\u9875\uff1b shift
+ g
\uff08\u8f93\u5165 G
\uff09\uff1a\u8df3\u8f6c\u7684\u6587\u672b\uff1b 1,\u00a0shift
+ g
\uff08\u8f93\u5165 1G
\uff09\uff1a\u8df3\u8f6c\u5230\u6587\u9996\uff1b /{something}
, Enter
\uff1a\u641c\u7d22 {something}
\uff0c\u7c7b\u4f3c\u4e8e\u5e38\u89c1\u8f6f\u4ef6\u7684 Ctrl
+ f
\uff1b n
\uff1a\u91cd\u590d\u4e0a\u4e00\u6b21\u641c\u7d22\u64cd\u4f5c\uff0c\u9002\u5408\u5728\u641c\u7d22\u5185\u5bb9\u6709\u591a\u4e2a\u7684\u65f6\u5019\uff0c\u8df3\u8f6c\u5230\u4e0b\u4e00\u4e2a\u641c\u7d22\u7ed3\u679c\uff1b h
\uff1a\u5e2e\u52a9\u624b\u518c\uff1b q
\uff1a\u9000\u51fa\uff1b "},{"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
shell - What does \u201csh a.sh <&0 >&0\u201d mean? - Unix & Linux Stack Exchange 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
Copy from the top answer from: https://unix.stackexchange.com/questions/84620/what-does-sh-a-sh-0-0-mean "},{"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
./script.sh
\uff08\u9700\u8981\u811a\u672c\u5177\u6709\u53ef\u6267\u884c\u6743\u9650\uff09 source script.sh
bash script.sh
/ sh script.sh
/ ... \u4ed6\u4eec\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a
\u4f7f\u7528 bash script.sh
/ sh script.sh
/ ... \u7684\u65b9\u5f0f\u6267\u884c\u811a\u672c\uff0c\u4e3b\u8fdb\u7a0b\u4f1a\u4f11\u7720\uff0c\u5e76\u5f00\u59cb\u4e00\u4e2a\u65b0\u8fdb\u7a0b\u6765\u6267\u884c\u811a\u672c\u5185\u5bb9\uff1b \u4f7f\u7528 source script.sh
\u7684\u65b9\u5f0f\u6267\u884c\u811a\u672c\uff0c\u811a\u672c\u5185\u5bb9\u4f1a\u5728\u4e3b\u8fdb\u7a0b\u8fdb\u884c\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u5728\u66f4\u65b0\u5b8c .bashrc
\u8fd9\u79cd\u6587\u4ef6\u4ee5\u540e\u4f1a\u4f7f\u7528 source
\u6765\u6267\u884c\u5b83\u4ee5\u6c42\u6548\u679c\u9a6c\u4e0a\u88ab\u52a0\u8f7d\u51fa\u6765\uff1b "},{"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
\u5047\u8bbe script.sh
\u7684\u5185\u5bb9\u5982\u4e0b #! /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
\u5219\u5982\u4e0b\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a $ ./foo.sh a b c d e f g h i j\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
\u5047\u8bbe script.sh
\u7684\u5185\u5bb9\u5982\u4e0b #! /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
\u5219\u5982\u4e0b\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a $ ./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
\u5047\u8bbe file
\u7684\u5185\u5bb9\u5982\u4e0b A\nB\nC\n
\u6267\u884c\u4e0b\u5217\u8bed\u53e5 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
Linux \u547d\u4ee4\u5927\u5168 "},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u8d44\u6599","title":"\u76f8\u5173\u8d44\u6599","text":" Shell (computing) - Wikipedia Terminal emulator - Wikipedia Introducing the Shell \u2013 Introduction to the Command Line for Genomics (datacarpentry.org) LinuxCommand.org: Learning the shell. \u8bfe\u7a0b\u6982\u89c8\u4e0e shell \u00b7 the missing semester of your cs education (missing-semester-cn.github.io) man command in Linux with Examples - GeeksforGeeks Shell commands \u2014 Linux command line for you and me 0.1 documentation (lym.readthedocs.io) "},{"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.gz b/sitemap.xml.gz
index 6549c067..ec7aa059 100644
Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ