diff --git a/cour_note/D3QD_OperatingSystem/Unit2-Part1/index.html b/cour_note/D3QD_OperatingSystem/Unit2-Part1/index.html index 4d6899ba..945cb97f 100644 --- a/cour_note/D3QD_OperatingSystem/Unit2-Part1/index.html +++ b/cour_note/D3QD_OperatingSystem/Unit2-Part1/index.html @@ -1303,7 +1303,7 @@

U2 Part 1: 同步工具 | Synchronization Tools

-

约 7935 个字 216 行代码 预计阅读时间 29 分钟

+

约 7970 个字 216 行代码 预计阅读时间 29 分钟

引入

@@ -2075,6 +2075,7 @@

避免忙等待避免忙等待这一节中提到的这种。


    @@ -2097,7 +2098,7 @@

    避免忙等待2023年11月23日 10:05:05 + 2023年11月23日 17:15:47
    创建日期: 2023年10月5日 18:01:43 diff --git a/cour_note/D3QD_OperatingSystem/Unit2-Part3/index.html b/cour_note/D3QD_OperatingSystem/Unit2-Part3/index.html index 79c6166e..be68347b 100644 --- a/cour_note/D3QD_OperatingSystem/Unit2-Part3/index.html +++ b/cour_note/D3QD_OperatingSystem/Unit2-Part3/index.html @@ -1293,7 +1293,7 @@

    U2 Part 3: 死锁 | Deadlocks

    -

    约 5215 个字 预计阅读时间 17 分钟

    +

    约 5209 个字 预计阅读时间 17 分钟

    引入

    @@ -1329,11 +1329,8 @@

    资源分配图

    静态

    -

    资源分配图是一种有两类节点的有向图,我们用圆节点 \(T_i\) 表示进程/线程,用方节点 \(R_j\) 表示资源,方节点中的实心点表示一个资源类别的一个实例。同时,我们称从进程/线程指向资源类别的有向边为请求边(request edge),表示进程/线程 \(T_i\) 正在等待这种资源;称从资源实例指向进程/线程的有向边为分配边(allocation edge),表示资源 \(R_j\) 被分配给进程/线程 \(T_i\),即目前进程/线程 \(T_i\) 持有一个(一条边表示一个)资源 \(R_j\) 的实例,例如下图:

    -

    -
    - Resource allocation graph. -

    +

    +

    资源分配图是一种有两类节点的有向图,我们用圆节点 \(T_i\) 表示进程/线程,用方节点 \(R_j\) 表示资源,方节点中的实心点表示一个资源类别的一个实例。同时,我们称从进程/线程指向资源类别的有向边为请求边(request edge),表示进程/线程 \(T_i\) 正在等待这种资源;称从资源实例指向进程/线程的有向边为分配边(assignment edge),表示资源 \(R_j\) 被分配给进程/线程 \(T_i\),即目前进程/线程 \(T_i\) 持有一个(一条边表示一个)资源 \(R_j\) 的实例,例如下图:

    @@ -1385,7 +1382,7 @@

    安全状态与不安全状态死锁的条件

    要想死锁出现,下面四个条件必须同时满足

      -
    1. 互斥(mutual exclusion):死锁中至少有一个资源必须是非共享的,即一次只能被一个进程/线程使用;

    我们在上面也说了:「该算法只适用于每个资源类别中都只有一个实例的情况」,那么如何解除这个限制呢?该问题我们早在资源分配图小节就已经讨论,我们使用安全状态与不安全状态来描述一个约束较强的、不会产生死锁的状态。

    银行家算法

    前置安全状态与不安全状态

    -

    银行家算法(Banker's algorithm)弥补了资源分配图算法只适用于每个资源类别中都只有一个实例的情况的缺陷,它支持每个资源类别不止一个的情况,但是效率不如分配图算法。类似于资源分配图算法需要在最开始给出所有 claim edge,银行家算法要求没个进程/线程给出执行过程中所需要的各类资源的最大量,同时维护一些数据以动态地计算安全状态。High level 地来讲,就是需要动态地检测某个资源申请是否会导致系统进入不安全状态,如果会导致系统进入不安全状态,则等待资源足够再分配。

    +

    银行家算法(Banker's algorithm)弥补了资源分配图算法只适用于每个资源类别中都只有一个实例的情况的缺陷,它支持每个资源类别不止一个的情况,但是效率不如分配图算法。类似于资源分配图算法需要在最开始给出所有 claim edge,银行家算法要求每个进程/线程给出执行过程中所需要的各类资源的最大量,同时维护一些数据以动态地计算安全状态。High level 地来讲,就是需要动态地检测某个资源申请是否会导致系统进入不安全状态,如果会导致系统进入不安全状态,则等待资源足够再分配。

    更具体的来说,需要维护这些东西(假设问题中有 n 个进程/线程和 m 种资源):

    @@ -1544,7 +1547,7 @@

    资源请求算法 -

    limitations

    +

    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.

    @@ -1559,11 +1562,7 @@

    面向单实例资源资源分配图的化简,该算法只能解决每个资源类别中只有一个实例的情况。

    资源分配图一节中我们知道,对于每个资源类别中只有一个实例的情况,只要有环就会有死锁,而只要能检测这个环,就能检测死锁。而实际的资源分配图中资源和进程/线程的节点从是成对出现在环中,而 wait-for graph 则是抓住主要矛盾,只保留进程/线程的节点(请读者思考为什么可以这样)以减小点的数量,提高效率。

    我们将资源分配图一节中的资源分配图改为等待图,即为:

    -
    -
    <center> ![](img/26.png) </center>
    -Wait-for graph.
    -
    -
    +

    通过动态地维护这个 wait-for graph 和定期调用一个环检测算法,来实现死锁检测。

    显而易见的,就算抛开它只支持每个资源类别仅能有一个实例的缺点,频繁地维护图和定期调用环检测算法,都会带来较大的开销。所以,该方法其实表现并不理想。

    面向多实例资源

    @@ -1604,7 +1603,7 @@

    死锁解除 最后更新: - 2023年11月22日 11:09:32 + 2023年11月23日 17:15:47
    创建日期: 2023年11月16日 11:17:25 diff --git a/index.html b/index.html index af304a4f..0d9eeaa6 100644 --- a/index.html +++ b/index.html @@ -1124,7 +1124,7 @@

    欢迎!

    站点统计

    -本站目前共 96 页,累计 194559 字! +本站目前共 96 页,累计 194588 字!

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

\u7ea6 108 \u4e2a\u5b57

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

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

\u63a8\u8350\u9605\u8bfb

\u7ad9\u70b9\u7edf\u8ba1

\u672c\u7ad9\u76ee\u524d\u5171 96 \u9875\uff0c\u7d2f\u8ba1 194559 \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 177 \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

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

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

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

\u7ea6 20 \u4e2a\u5b57

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

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

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

\u8bfe\u7a0b\u4fe1\u606f

Notes

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

x 0 1 P 1-p p

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u5982\u679c\uff1a

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u5747\u5300\u5206\u5e03

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

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

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

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

\u6b63\u6001\u5206\u5e03

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

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

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

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

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

\u5982\u679c\u5bf9\u4e8e\u4efb\u610f\u7684\u4e24\u4e2a\u5b9e\u6570\u96c6\u5408\\(D_1,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,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,Y\\)\u72ec\u7acb\u3002

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

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

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

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

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

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

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

\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\uff08Mathematical Expectation\uff09\u6216\u5747\u503c\uff08Mean\uff09\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\\)\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

\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\\)

\u5bf9\u4e8e\u968f\u673a\u53d8\u91cf\u51fd\u6570\uff0c\u53ea\u9700\u8981\u5c06\u5b9a\u4e49\u4e2d\\(x_i\\)\u6362\u4e3a\\(g(x_i)\\)\u5373\u53ef\uff0c\u5f53\u7136\u9700\u8981\u4fdd\u8bc1\u671f\u671b\u5b58\u5728\u3002\u800c\u9664\u4e86\u5b9a\u4e49\u8ba1\u7b97\uff0c\u4e5f\u6709\u4e00\u4e9b\u6027\u8d28\u53ef\u4ee5\u7b80\u5316\u8ba1\u7b97\u3002

\u6570\u5b66\u671f\u671b\u7684\u6027\u8d28\uff1a

  1. \u82e5\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(E(C) = C\\)\uff1b
  2. \u8bbe\\(X\\)\u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(E(C\u30fbX)=C\u30fbE(X)\\)\uff1b
  3. \u8bbe\\(X,Y\\)\u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219\\(E(X+Y)=E(X)+E(Y)\\)\uff1b
  4. \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(\\sum^n_i{c_i\u30fbX_i})=\\sum^n_i c_i\u30fbE(X_i)\\)\uff1b
  5. \u4e0a\u8ff0\u4e09\u6761\u5408\u5e76\u8d77\u6765\u5c31\u662f\\(E(aX+bY+c)=aE(X)+bE(Y)+c\\)\uff1b
  6. \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
  7. \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u968f\u673a\u53d8\u91cf\uff1a\\(E(\\prod_i^nX_i)=\\prod_i^nE(X_i)\\)\uff1b

\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)=E\\{[X-E(X)]^2\\}\\)\u3002\u8bb0\\(\\delta(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\u5b58\u5728\u3002

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

\u800c\u5176\u8ba1\u7b97\u65b9\u6cd5\u53ef\u4ee5\u5229\u7528\u671f\u671b\u7684\u6027\u8d28\uff0c\u8bb0\\(g(X)=(X-E(X))^2\\)\uff0c\u7136\u540e\u8ba1\u7b97\\(E(g(X))\\)\u3002\u5177\u4f53\u7684\uff1a

\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}\\)

\u65b9\u5dee\u7684\u6027\u8d28\uff1a

  1. \u82e5\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(Var(C) = 0\\)\uff1b
  2. \u8bbe\\(X\\)\u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(Var(C\u30fbX)=C^2\u30fbVar(X)\\)\uff1b
  3. \u8bbe\\(X,Y\\)\u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219\\(Var(X\\pm Y)=Var(X)+Var(Y)\\pm2E\\{[X-E(X)][Y-E(Y)]\\}\\\\=Var(X)+Var(Y)\\pm 2Cov(X,Y)\\)\uff1b
  4. \u7279\u522b\u7684\uff0c\u5982\u679c\\(X,Y\\)\u76f8\u4e92\u72ec\u7acb\uff0c\u5219\\(Var(X\\pm Y)=Var(X)+Var(Y)\\)\uff1b
  5. \u8fdb\u4e00\u6b65\u7684\uff0c\u5982\u679c\\(X_i\\;(i=1,2,...,n)\\)\u5f7c\u6b64\u72ec\u7acb\uff0c\u5219\\(Var(c_1X_1\\pm c_2X_2\\pm...\\pm c_nX_n)=c_1^2Var(X_1)+c_2^2Var(X_2)+...+c_n^2Var(X_n)\\)
  6. \u4e0a\u8ff0\u4e09\u6761\u5408\u5e76\u8d77\u6765\u5c31\u662f\\(Var(aX+bY+c)=a^2Var(X)+b^2Var(Y)\\)\uff1b
  7. \\(Var(X)\\leq E((X-c)^2)\\)\uff0c\u5e76\u4e14\u5f53\u4e14\u4ec5\u5f53\\(E(X)=c\\)\u65f6\u7b49\u53f7\u6210\u7acb\uff1b
  8. \\(Var(X)=0 \\;\\;\\;\\;\\;\\Leftrightarrow \\;\\;\\;\\;\\;P(X=c)=1 \\;\\;\\;and\\;\\;\\;c=E(X)\\)\uff1b

\u53d8\u5f02\u7cfb\u6570\u53c8\u53eb\u201c\u6807\u51c6\u5dee\u7387\u201d\uff0c\u662f\u8861\u91cf\u8d44\u6599\u4e2d\u5404\u89c2\u6d4b\u503c\u53d8\u5f02\u7a0b\u5ea6\u7684\u53e6\u5916\u4e00\u4e2a\u6570\u5b57\u7279\u5f81\u3002\u53d8\u5f02\u7cfb\u6570\\(Cv(X)=\\frac{\\sqrt{Var(X)}}{E(X)}\\)\u540c\u6837\u63cf\u8ff0\u79bb\u6563\u7a0b\u5ea6\uff0c\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

\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)}}\\)

\u534f\u65b9\u5dee\u7684\u6027\u8d28\uff1a

  1. \\(Cov(X,Y)=Cov(Y,X)\\)\uff1b
  2. \\(Cov(X,Y)=E(XY)-E(X)E(Y)\\)\uff1b
  3. \\(Cov(aX,bY)=abCov(X,Y)\\;,\\;\\;a,b\\in\\R\\)\uff1b
  4. \\(Cov(X+Y,Z)=Cov(X,Z)+Cov(Y,Z)\\)\uff1b
  5. \\(Cov(X,X)=Var(X)\\)\uff1b
  6. \\(Cov(c,Y)=E(cY)-E(c)E(Y)=0\\;,\\;\\;c\\in\\R\\)\uff1b
  7. \\(Cov(X+Y,X-Y)=Cov(X,X)-Cov(Y,Y)=Var(X)-Var(Y)\\)\uff1b
  8. \\(Cov(X^*,Y^*)=Cov(\\frac{X-E(X)}{\\sqrt{Var(X)}},\\frac{Y-E(Y)}{\\sqrt{Var(Y)}})=\\frac{Cov(X,Y)}{\\sqrt{Var(X)}\\sqrt{Var(Y)}}=\\rho_{_{XY}}\\)\uff1b
  9. \\(Cov(aX+bY,cX+dY)=acVar(X)+bdVar(Y)+(ad+bc)Cov(X,Y)\\)\uff1b
  10. \\(D(aX+bY)=a^2Var(X)+b^2Var(Y)+2abCov(X,Y)\\)\uff1b

\u76f8\u5173\u7cfb\u6570\u7684\u6027\u8d28

  1. \\(|\\rho_{_{XY}}|\\leq 1\\)\uff1b
  2. \\(|\\rho_{_{XY}}|=1 \\;\\;\\; \\Leftrightarrow \\;\\;\\; \\exists a,b\\in \\R,\\;s.t.\\;P(Y=a+bX)=1|\\)\uff1b
  3. \\(\\rho_{_{XY}}=1\\)\u65f6\uff0c\\(b>0\\)\uff1b
  4. \\(\\rho_{_{XY}}=-1\\)\u65f6\uff0c\\(b<0\\)\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\uff1a

\\(X,Y\\text{\u4e92\u76f8\u72ec\u7acb} \\;\\; \\Rightarrow \\;\\; X,Y\\text{\u4e0d\u76f8\u5173}\\\\ X,Y\\text{\u4e0d\u72ec\u7acb}\\;\\;\\Leftarrow \\;\\;X,Y\\text{\u76f8\u5173}\\)

\u591a\u5143\u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81\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\u3002\u5b83\u662f\u4e00\u4e2a\u5bf9\u79f0\u7684\u975e\u8d1f\u5b9a\u77e9\u9635\u3002

\\(n\\)\u7ef4\u6b63\u6001\u53d8\u91cf\u91cd\u8981\u6027\u8d28

  1. \\(n\\)\u7ef4\u6b63\u6001\u53d8\u91cf\\((X_1,X_2,...,X_n)\\)\u7684\u6bcf\u4e00\u4e2a\u5206\u91cf\\(X_i\\)\u90fd\u662f\u6b63\u6001\u53d8\u91cf\uff1b
  2. \u53cd\u4e4b\uff0c\u5982\u679c\\(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
  3. \\(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\u8bbe\u4e0d\u5168\u4e3a\\(0\\)\u7684\\(l_i\\)\u5e38\u6570\uff0c\u5747\u6709\\(\\sum_i^n l_iX_i\\)\u670d\u4ece\u4e00\u7ef4\u6b63\u6001\u5206\u5e03\uff1b
  4. \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\uff1b
  5. \u82e5\\((X_1,X_2,...,X_n)\\)\u670d\u4ece\\(n\\)\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u5219\\(X_i\\)\u4e92\u76f8\u72ec\u7acb\u7684\u5145\u8981\u6761\u4ef6\u662f\\(X_i\\)\u4e24\u4e24\u4e0d\u76f8\u5173\uff1b
"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/","title":"[5.x] \u5927\u6570\u5b9a\u5f8b\u53ca\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","text":"

\u7ea6 1172 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

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

\u4f9d\u6982\u7387\u6536\u655b\u8bbe\\(\\{Y_n,n\\geq1\\}\\)\u4e3a\u4e00\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\\(c\\)\u4e3a\u4e00\u5e38\u6570\u3002\u82e5\\(\\forall\\varepsilon>0\\;\\;\\;s.t. \\;\\;\\lim_{n\\to+\\infty}P\\{|Y_n-c|\\geq\\varepsilon\\}=0\\)\uff0c\u5219\u79f0\\(\\{Y_n,n\\geq1\\}\\)\u4f9d\u6982\u7387\u6536\u655b(Convergence in Probability)\u4e8e\\(c\\)\uff0c\u8bb0\u505a\\(Y_n\\xrightarrow{P} c\\;,\\;\\;n\\to+\\infty\\)\u3002\u7b49\u4ef7\u7684\uff0c\u4e5f\u53ef\u4ee5\u5c06\u6761\u4ef6\u5199\u6210\\(\\forall\\varepsilon>0\\;\\;\\;s.t. \\;\\;\\lim_{n\\to+\\infty}P\\{|Y_n-c|<\\varepsilon\\}=1\\)\u3002

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

  1. \\(\\left\\{ \\begin{aligned} X_n\\xrightarrow{P} a\\\\ Y_n\\xrightarrow{P} b \\end{aligned} \\right. \\;\\;,\\;\\;n\\to+\\infty\\;\\;,\\;\\;a,b\\in\\mathbf{R}\\)\uff1b
  2. \u4e8c\u5143\u51fd\u6570\\(g(x,y)\\)\u5728\u70b9\\((a,b)\\)\u8fde\u7eed\uff08\u4f8b\u5982\u56db\u5219\u8fd0\u7b97\uff09\uff1b

\u5219\u6709\uff1a

\u8be5\u6027\u8d28\u5373\u4f9d\u6982\u7387\u6536\u655b\u53ef\u4ee5\u5728\u53cc\u76ee\u8fd0\u7b97\u7b26\u4e2d\u8fdb\u884c\u4e0b\u653e\u3002

\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\u5219\\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a\\(P \\{ |Y| \\geq \\varepsilon \\}\\leq \\frac{E(|Y|^k)}{\\varepsilon^k}\\;\\; or \\;\\; P\\{|Y| < \\varepsilon \\} \\geq 1 - \\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\u662f\u9a6c\u5c14\u53ef\u592b\u4e0d\u7b49\u5f0f\u7684\u63a8\u8bba\u82e5\u968f\u673a\u53d8\u91cf\\(X\\)\u7684\u6570\u5b66\u671f\u671b\u548c\u65b9\u5dee\u5b58\u5728\uff0c\u5206\u522b\u8bb0\\(E(X)=\\mu\\;,\\; Var(X) = \\sigma^2\\)\uff0c\u5219\\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a\\(P\\{ |X-\\mu|\\geq \\varepsilon \\} \\leq \\frac{\\sigma^2}{\\varepsilon^2}\\;\\;or\\;\\;P\\{ |X-\\mu|< \\varepsilon \\} \\geq1- \\frac{\\sigma^2}{\\varepsilon^2}\\) \u53ef\u4ee5\u8bb0\u5fc6\u4e3a\\(P\\{ \\sigma^2\\geq \\varepsilon^2 \\} \\leq \\frac{\\sigma^2}{\\varepsilon^2}\\;\\;or\\;\\;P\\{ \\sigma^2< \\varepsilon^2 \\} \\geq1- \\frac{\\sigma^2}{\\varepsilon^2}\\)

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u5927\u6570\u5b9a\u7406","title":"\u5927\u6570\u5b9a\u7406","text":"

\u5927\u6570\u5b9a\u7406\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\\(\\forall \\varepsilon > 0\\)\uff0c\u6709;\\(\\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|\\geq \\varepsilon\\}=0 \\;\\; or \\;\\; \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|< \\varepsilon\\}=1\\) \u5373\uff1a\\((\\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\u89c2\u5bdf\u5230\u5982\u679c\u4ee4\\(Z_n=\\frac{1}{n}\\sum_{i=1}^{n}Y_i\\)\uff0c\u5219\u8868\u8fbe\u5f0f\u7684\u542b\u4e49\u4e3a\\(Z_n\\xrightarrow{P}c\\;\\;,\\;\\;n\\to+\\infty\\)\uff0c\u5373\u5927\u6570\u5b9a\u5f8b\u4e5f\u53ef\u4ee5\u8868\u8ff0\u4e3a\uff1a

\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\\)

\u4f2f\u52aa\u5229(Bernoulli)\u5927\u6570\u5b9a\u5f8b\u8bbe\\(n_A\\)\u8868\u793a\\(n\\)\u91cd\u8d1d\u52aa\u529b\u5b9e\u9a8c\u4e2d\u4e8b\u4ef6\\(A\\)\u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0\\(P(A)=p\\)\uff0c\u5219\\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a\\(\\lim_{n\\to+\\infty}P\\{|\\frac{n_A}{n}-p|\\geq \\varepsilon\\}=0\\)

\u8f9b\u94a6(Khinchin)\u5927\u6570\u5b9a\u5f8b*\u5373\u4f7f\u968f\u673a\u53d8\u91cf\u7684\u65b9\u5dee\u4e0d\u5b58\u5728\uff0c\u671f\u671b\u5b58\u5728\u5373\u53ef\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\\(\\forall\\varepsilon>0\\)\uff0c\u6709\uff1a\\(\\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}X_i-\\mu|\\geq \\varepsilon\\}=0\\;\\;\\;or\\;\\;\\;\\frac{1}{n}\\sum_{i=1}^{n}X_i\\xrightarrow{P}\\mu\\;\\;,\\;\\;n\\to+\\infty\\)

\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\\(\\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\\;\\;\\;or\\;\\;\\;\\frac{1}{n}\\sum_{i=1}^{n}h(X_i)\\xrightarrow{P}a\\;\\;,\\;\\;n\\to+\\infty \\\\ where\\;\\;\\;a=E(|h(X_1)|)\\)

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

\u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8bbe\\(\\{X_i,i\\geq 1\\}\\)\u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14\\(E(X_i)=\\mu\\;\\;,\\;\\;Var(X_i)=\\sigma^2\\;\\;(\\sigma>0)\\)\uff0c\u5219\\(\\forall x\\in \\mathbf{R}\\)\uff0c\u6709\uff1a

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

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

\\[ \\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} \\]

\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5199\u6210\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":"

\u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u6709\u5982\u4e0b\u63a8\u8bba\uff1a\u68e3\u83ab\u5f17-\u62c9\u666e\u62c9\u65af\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8bbe\\(n_A\\)\u8868\u793a\\(n\\)\u91cd\u8d1d\u52aa\u529b\u5b9e\u9a8c\u4e2d\u4e8b\u4ef6\\(A\\)\u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0\\(P(A)=p\\)\uff0c\u5219

\\[ \\forall x\\in\\mathbf{R}$\uff0c\u6709\uff1a<br />$\\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) \\]"},{"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_{+\\infty}\\frac{1}{B_n^{2+\\varepsilon}}\\sum_{i=1}^{n}E|X_i-\\mu_i|^{2+\\varepsilon}=0\\;\\;\\;where\\;\\;\\;B_n^{2}=\\sum_{i=1}^{n}\\sigma_i^2\\) \u5219\uff1a

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/","title":"[6.x] \u7edf\u8ba1\u91cf\u4e0e\u62bd\u6837\u5206\u5e03","text":"

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

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

\u603b\u4f53(Population)\u4e2a\u4f53(Individual)\u603b\u4f53\u5bb9\u91cf\u6709\u9650\u603b\u4f53(Finite Population)\u65e0\u9650\u603b\u4f53(Infinite Population)\u6837\u672c(Sample)

\u6837\u672c\u5bb9\u91cf\u968f\u673a\u6837\u672c(Random Sample)\u7b80\u5355\u968f\u673a\u6837\u672c(Simple Random Sample)\u6837\u672c\u503c / \u89c2\u5bdf\u503c\u6837\u672c\u7684\u8054\u5408\u5206\u5e03\u51fd\u6570\uff1a\\(F(x_1,x_2,...,x_n)=\\prod_{i=1}^{n} F(x_i).\\)

\u5b9a\u4e49\u8bbe\u603b\u4f53\\(X\\)\u662f\u5177\u6709\u5206\u5e03\u51fd\u6570\\(F(\u00b7)\\)\u7684\u968f\u673a\u53d8\u91cf\uff0c\\(X_1,X_2,...,X_n\\)\u662f\u6765\u81ea\u603b\u4f53\\(X\\)\u7684\u968f\u673a\u6837\u672c\uff0c\u82e5\u6ee1\u8db3\uff1a

  1. \\(X_1,X_2,...,X_n\\)\u662f\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff1b
  2. \u6bcf\u4e00\u4e2a\\(X_i\\)\u4e0e\\(X\\)\u6709\u76f8\u540c\u7684\u5206\u5e03\u51fd\u6570\uff1b

\u5219\u79f0\\(X_1,X_2,...,X_n\\)\u4e3a\u53d6\u81ea\u603b\u4f53\\(X\\)\u7684\u7b80\u5355\u968f\u673a\u6837\u672c\u3002

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

\u7edf\u8ba1\u91cf(Statistic)\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\u6837\u672c\\(X_1,X_2,...,X_n\\)\u7684\u51fd\u6570\uff0c\u82e5\\(g\\)\u4e2d\u4e0d\u542b\u672a\u77e5\u53c2\u6570\uff0c\u5219\u79f0\\(g(X_1,X_2,...,X_n)\\)\u662f\u4e00\u7edf\u8ba1\u91cf\u3002

\u5982\u4e0b\u4e3a\u51e0\u79cd\u5e38\u89c1\u7684\u91cd\u8981\u7edf\u8ba1\u91cf\uff1a

  1. \u6837\u672c\u5747\u503c\uff08\u5e38\u4f5c\u4e3a\u603b\u4f53\u503c\\(\\mu\\)\u7684\u4f30\u8ba1\uff09

\\(\\overline{X}=\\frac{1}{n}\\sum_{i=1}^{n}X_i\\) \\(E(\\overline x)=\\mu\\;\\;,\\;\\;Var(\\overline x)=\\sigma^2/n\\)

\\[ S^2=\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2=\\frac{1}{n-1}(\\sum_{i=1}^{n}X_i^2-n\\overline{X}^2) \\] \\[ E(S^2)=\\sigma^2 \\]

\\(\\sum(x_i-\\overline x)^2=\\sum x_i^2-\\frac{(\\sum x_i)^2}{n}=\\sum x_i^2-n\\overline x^2\\)

  1. \u6837\u672c\u6807\u51c6\u5dee

\\(S=\\sqrt{S^2}=\\sqrt{\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2}\\)

  1. \u6837\u672c\\(k\\)\u9636\uff08\u539f\u70b9\uff09\u77e9\uff08\u5e38\u4f5c\u4e3a\u603b\u4f53\u539f\u70b9\u77e9\\(\\mu_k\\)\u7684\u4f30\u8ba1\uff09

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

  1. \u6837\u672c\\(k\\)\u9636\u4e2d\u5fc3\u8ddd\uff08\u5e38\u4f5c\u4e3a\u603b\u4f53\u4e2d\u5fc3\u77e9\\(\\nu_k\\)\u7684\u4f30\u8ba1\uff09\uff08\\(B_2\\)\u53ef\u4f5c\u4e3a\u603b\u4f53\u65b9\u5dee\\(\\sigma^2\\)\u7684\u6709\u504f\u4f30\u8ba1\uff09

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

\\(A_k=\\frac{1}{n}\\sum_{i=1}^{n}X_i^k\\xrightarrow{P}\\mu_k,\\;\\;k=1,2,...\\)

"},{"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\u6210\u4e3a\u62bd\u6837\u5206\u5e03(Sampling Distribution)\uff0c\u5728\u4f7f\u7528\u7edf\u8ba1\u91cf\u8fdb\u884c\u63a8\u65ad\u65f6\u9700\u8981\u77e5\u9053\u62bd\u6837\u5206\u5e03\u3002

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

\\(\\chi^2\\)\u5206\u5e03 / \u5361\u65b9\u5206\u5e03\u8bbe\\(X_1,X_2,...,X_n\\)\u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u670d\u4ece\\(N(0,1)\\)\u3002\u8bb0\\(Y=X_1^2+X_2^2+...+X_n^2\\)\uff0c\u5219\u79f0\\(Y\\)\u670d\u4ece\u81ea\u7531\u5ea6\u4e3a\\(n\\)\u7684\\(\\chi^2\\)\u5206\u5e03\uff0c\u8bb0\\(Y\\sim \\chi^2(n)\\)\u3002\\(\\chi^2\\)\u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\u4e3a\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,&other, \\end{aligned} \\right. \\]

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

  1. \\(\\chi^2\\)\u5206\u5e03\u53ef\u52a0\uff1a\u8bbe\\(Y_1 \\sim \\chi^2(m),\\;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
  2. \\(\\chi^2\\)\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u4e0e\u65b9\u5dee\uff1a\\(E(\\chi^2(n))=n,\\;Var(\\chi^2(n))=2n\\)\uff1b
  3. \\(\\chi^2\\)\u5206\u5e03\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)\\)*\u4fa7\uff09\\(\\alpha\\)\u5206\u4f4d\u6570*\u3002

  1. \u8bbe\\(X_1,X_2,...,X_n\\)\u4e3a\u6765\u81ea\u6b63\u6001\u603b\u4f53\\(N(\\mu,\\sigma^2)\\)\u7684\u7b80\u5355\u968f\u673a\u6837\u672c\uff0c\\(\\overline{X}\\)\u662f\u6837\u672c\u5747\u503c\uff0c\\(S^2\\)\u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a
  2. \\(\\overline X\\)\u4e0e\\(S^2\\)\u76f8\u4e92\u72ec\u7acb\uff1b
  3. \\(\\overline X\\sim N(\\mu,\\sigma^2/n)\\)\uff1b
  4. \\(\\frac{\\sum_{i=1}^n(X_i-\\overline X)^2}{\\sigma^2}=\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\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":"

\\(t\\)\u5206\u5e03 / \u5b66\u751f\u6c0f(Student)\u5206\u5e03\u8bbe\\(X\\sim N(0,1),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)\\)\uff0c\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a\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}\\) \\(t\\)\u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

  1. \\(t\\)\u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\\(f_t(x)\\)\u662f\u5076\u51fd\u6570\uff0c\u5173\u4e8e\\(y\\)\u8f74\u5bf9\u79f0\uff1b
  2. \u7531\\(t\\)\u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\u53ef\u4ee5\u5f97\u5230\uff1a\\(\\lim_{n\\to+\\infty}f_t(x)=\\frac{1}{\\sqrt{2\\pi}}e^{-{x^2}/{2}}\\)\uff1b
  3. \u5f53\\(n\\)\u8db3\u591f\u5927\u65f6\uff0c\\(t\\)\u5206\u5e03\u8fd1\u4f3c\u4e8e\u6807\u51c6\u6b63\u6001\u5206\u5e03\\(N(0,1)\\)\uff1b
  4. \\(t\\)\u5206\u5e03\u5206\u4f4d\u6570\uff0c\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u6b63\u6570\\(\\alpha,\\;\\;0<\\alpha<1\\)\uff0c\u79f0\u6ee1\u8db3\u6761\u4ef6\\(P\\{t>t_\\alpha(n)\\}=\\int_{t_\\alpha(n)}^{+\\infty}f_t(x)\\mathrm{d}x=\\alpha\\)\u7684\u70b9\\(t_\\alpha(n)\\)\u4e3a\\(t(n)\\)\u5206\u5e03\u7684\u4e0a\uff08\u4fa7\uff09\\(\\alpha\\)\u5206\u4f4d\u6570\uff1b

  1. \\(t^2\\sim F(1,n)\\)\uff1b
  2. \u81ea\u7531\u5ea6\u4e3a\\(1\\)\u7684\\(t\\)\u5206\u5e03\u5c31\u662f\u6807\u51c6\u67ef\u897f\u5206\u5e03\uff0c\u5176\u5747\u503c\u4e0d\u5b58\u5728\uff1b
  3. \\(n>1\\)\u65f6\\(t\\)\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u5b58\u5728\u4e14\u4e3a\\(0\\)\uff1b
  4. \\(n>2\\)\u65f6\\(t\\)\u5206\u5e03\u7684\u65b9\u5dee\u5b58\u5728\u4e14\u4e3a\\(\\frac{n}{n-2}\\)\uff1b
  5. \u5f53\u81ea\u7531\u5ea6\u6bd4\u8f83\u5927\u65f6\uff0c\\(t\\)\u5206\u5e03\u53ef\u4ee5\u7528\\(N(0,1)\\)\u5206\u5e03\u8fd1\u4f3c\uff1b

\u63a8\u8bba\uff1a

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

\\(F\\)\u5206\u5e03\u8bbe\\(U\\sim\\chi^2(n_1)\\)\uff0c\\(V\\sim \\chi^2(n_2)\\)\uff0c\u4e14\\(U\\)\u548c\\(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\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a \\(F\\)\u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

  1. \u5982\u679c\\(F\\sim F(n_1,n_2)\\)\uff0c\u5219\\(\\frac{1}{F}\\sim F(n_2,n_1)\\)\uff1b
  2. \u5982\u679c\\(X\\sim t(n)\\)\uff0c\u5219\\(X^2\\sim F(1,n)\\)\uff1b

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

  1. \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff1b
  2. \\(\\overline{X}\\)\u4e0e\\(S^2\\)\u76f8\u4e92\u72ec\u7acb\uff1b
  3. \\(\\frac{\\overline X - \\mu}{S/\\sqrt n}\\sim t(n-1)\\)\uff1b

\u8bbe\\(X_1,X_2,...,X_n\\)\u548c\\(Y_1,Y_2,...,Y_n\\)\u4e3a\u6765\u81ea\u6b63\u6001\u603b\u4f53\\(N(\\mu_1,\\sigma_1^2)\\)\u548c\\(N(\\mu_2,\\sigma_2^2)\\)\u7684\u4e24\u4e2a\u76f8\u4e92\u72ec\u7acb\u7684\u7b80\u5355\u968f\u673a\u6837\u672c\uff0c\\(\\overline{X},\\overline Y\\)\u662f\u6837\u672c\u5747\u503c\uff0c\\(S_1^2,S_2^2\\)\u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a

  1. \\(\\frac{S_1^2/\\sigma_1^2}{S_2^2/\\sigma^2_2}\\sim F(n_1-1,n_2-2)\\)\uff1b
  2. \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)\\) \u5176\u4e2d\\(S^2_\\omega=\\frac{(n_1-1)S_1^2+(n_2-n_1)S^2_2}{n_1+n_2-2}\\)

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/","title":"[7.x] \u53c2\u6570\u4f30\u8ba1","text":"

\u7ea6 1368 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \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\\)\u662f\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\u6784\u9020\u4e00\u4e2a\u9002\u5f53\u7684\u7edf\u8ba1\u91cf\\(\\hat{\\theta}(X_1,X_2,...,X_n)\\)\uff0c\u7528\u6765\u4f30\u8ba1\u672a\u77e5\u53c2\u6570\\(\\theta\\)\uff0c\u6211\u4eec\u79f0\\(\\hat{\\theta}(X_1,X_2,...,X_n)\\)\u4e3a\\(\\theta\\)\u7684\u4f30\u8ba1\u91cf\u3002\u5982\u679c\u628a\u5176\u4e2d\u7684\u6837\u672c\u503c\u7528\\(x_1,x_2,...,x_n\\)\u4ee3\u66ff\uff0c\u5219\u79f0\\(\\hat\\theta(x_1,x_2,...,x_n)\\)\u4e3a\\(\\theta\\)\u7684\u4e00\u4e2a\u4f30\u8ba1\u503c\u3002\u5728\u4e0d\u5bfc\u81f4\u6df7\u6dc6\u7684\u60c5\u51b5\u4e0b\uff0c\u4e24\u8005\u90fd\u53ef\u4ee5\u88ab\u79f0\u4e3a\u201c\u4f30\u8ba1\u201d\uff0c\u5e76\u90fd\u53ef\u4ee5\u7b80\u8bb0\u4e3a\\(\\hat\\theta\\)\u3002

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

\u505a\u9898\u6b65\u9aa4\uff1a

  1. \u5047\u8bbe\u6709\\(k\\)\u4e2a\u5f85\u6c42\u672a\u77e5\u53c2\u6570\uff1b
  2. \u5217\u5173\u4e8e\\(\\mu_1,\\mu_2,...,\\mu_k\\)\u7684\u65b9\u7a0b\u7ec4\uff1b
  3. \u4ece\u65b9\u7a0b\u7ec4\u4e2d\u89e3\u51fa\u8fd9\\(k\\)\u4e2a\u53c2\u6570\uff1b
  4. \u5982\u679c\u65b9\u7a0b\u4e2d\u5b58\u5728\u6052\u7b49\u5f0f\uff0c\u5219\u53ef\u4ee5\u987a\u5ef6\u6c42\\(\\mu_{k+1}\\)\uff1b
  5. \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":"

\u505a\u9898\u6b65\u9aa4\uff1a

  1. \u6784\u9020\u5bf9\u6570\u4f3c\u7136\u51fd\u6570(Likelihood Function)\\(L(\\theta)=\\ln p(x_1,...,x_n,\\theta)\\)\uff1b
  2. \u6c42\\(\\hat\\theta\\;\\;s.t.\\;\\;L(\\hat\\theta;x_1,x_2,...,x_n)=\\max_{\\theta\\in\\Theta}L(\\theta;x_1,x_2,...,x_n)\\)\uff1b
  3. \u89e3\u5bf9\u6570\u4f3c\u7136\u65b9\u7a0b(Log-likelihood Equation)\\(\\frac{\\mathrm{d}L(\\theta)}{\\mathrm{d}\\theta}=0\\)\uff0c\u68c0\u9a8c\u6781\u5927\u503c\u70b9\uff1b
  4. \u68c0\u9a8c\u7aef\u70b9\uff1b
  5. \u6c42\u6700\u5927\u503c\u70b9\uff1b

\u6027\u8d28\uff1a

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

\u8bbe\\(\\theta\\)\u662f\u603b\u4f53\\(X\\)\u7684\u5f85\u4f30\u53c2\u6570\uff0c\\(X_1,X_2,...,X_n\\) \u662f\u6765\u81ea\u603b\u4f53\\(X\\)\u7684\u6837\u672c\uff0c\u82e5\u4f30\u8ba1\u91cf\\(\\hat\\theta=\\hat\\theta(X_1,X_2,...,X_n)\\)\u7684\u6570\u5b66\u671f\u671b\u5b58\u5728\uff0c\u6ee1\u8db3\\(E(\\hat\\theta)=\\theta,\\;\\;\\forall\\theta\\in\\Theta\\)\uff0c\u5219\u79f0\\(\\hat\\theta\\)\u662f\\(\\theta\\)\u7684\u65e0\u504f\u4f30\u8ba1\u91cf\u6216\u65e0\u504f\u4f30\u8ba1(Unbiased Estimation)\u3002

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

\u8bbe\\(\\theta_1\\)\u548c\\(\\theta_2\\) \u662f\u53c2\u6570\\(\\theta\\)\u7684\u65e0\u504f\u4f30\u8ba1\uff0c\u82e5\\(\\forall \\theta\\in\\Theta\\)\uff0c\\(Var_\\theta(\\hat\\theta_1)\\leq Var_\\theta(\\hat\\theta_2)\\)\uff0c\u4e14\u4e0d\u6052\u53d6\u201c=\u201d\uff0c\u5219\u79f0\\(\\hat\\theta_1\\)\u6bd4\\(\\hat\\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] =Var(\\hat\\theta)+(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\u82e5\\(Mse(\\hat\\theta_1)\\leq Mse(\\hat\\theta_2)\\)\u4e14\u4e0d\u6052\u53d6\u201c=\u201d\uff0c\u5219\u79f0\\(\\hat\\theta_1\\)\u4f18\u4e8e\\(\\hat\\theta_2\\)\u3002

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

\u82e5\\(\\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)\u3002\u6709\u5982\u4e0b\u5b9a\u7406\uff1a

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

\u91c7\u7528\u4e0a\u4fa7\u5206\u4f4d\u6570\\(X\\sim N(\\mu,\\sigma^2)\\)

\\(\\sigma\\)\u5df2\u77e5\u65f6\\(\\mu\\)\u7684\u7f6e\u4fe1\u533a\u95f4\\(\\overline x \\sim N(\\mu,\\sigma^2/n)\\;\\;\\rightarrow\\;\\; \\frac{\\overline x-\\mu}{\\sigma/\\sqrt{n}}\\sim N(0,1)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=[\\;\\;\\overline x-\\frac{z_{\\alpha/2}\u00b7\\sigma}{\\sqrt{n}}\\;\\;,\\;\\;\\overline x + \\frac{z_{\\alpha/2}\u00b7\\sigma}{\\sqrt{n}}\\;\\;]\\) \\(\\sigma\\)\u672a\u77e5\u65f6\\(\\mu\\)\u7684\u7f6e\u4fe1\u533a\u95f4\\(\\frac{\\sqrt{n}(\\overline x - \\mu)}{\\sqrt{s^2} }\\sim t(n-1)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\left[\\;\\; \\overline x - \\frac{t_{\\alpha/2}(n-1)s}{\\sqrt{n}} \\;\\;,\\;\\; \\overline x + \\frac{t_{\\alpha/2}(n-1)s}{\\sqrt{n}} \\;\\;\\right]\\) \\(\\sigma^2\\)\u7684\u7f6e\u4fe1\u533a\u95f4\uff08\u5f53\u4f5c\\(\\mu\\)\u672a\u77e5\uff09\\(\\frac{(n-1)s^2}{\\sigma^2}\\sim \\chi^2(n-1)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\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]\\)

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u7f6e\u4fe1\u533a\u95f4","title":"\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u7f6e\u4fe1\u533a\u95f4","text":"

\\(\\sigma_1^2,\\sigma_2^2\\)\u5df2\u77e5\u65f6\\(\\mu_1-\\mu_2\\)\u7684\u7f6e\u4fe1\u533a\u95f4\\(\\overline x - \\overline y \\sim N(\\mu_1-\\mu_2,\\frac{\\sigma_1^2}{n_1},\\frac{\\sigma_2^2}{n_2})\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\left[\\;\\;\\overline x - \\overline y+ z_{\\alpha/2}\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2}}\\;\\;,\\;\\;\\overline x - \\overline y- z_{\\alpha/2}\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2}}\\;\\;\\right]\\) \\(\\sigma_1^2,\\sigma_2^2\\)\u672a\u77e5\u4f46\u76f8\u540c(\\(\\sigma_1^2=\\sigma_2^2=\\sigma^2\\))\u65f6\\(\\mu_1-\\mu_2\\)\u7684\u7f6e\u4fe1\u533a\u95f4\u53d6\\(\\sigma^2\\)\u7684\u65e0\u504f\u4f30\u8ba1\u91cf\\(S^2_w=\\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2}\\) \\(\\frac{(\\overline x -\\overline y)-(\\mu_1-\\mu_2)}{S_w\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}}\\sim t (n_1+n_2-2)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\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]\\) \\(\\sigma_1^2,\\sigma_2^2\\)\u672a\u77e5\u4e14\u4e0d\u540c(\\(\\sigma_1^2\\not=\\sigma_2^2\\))\u65f6\\(\\mu_1-\\mu_2\\)\u7684\u7f6e\u4fe1\u533a\u95f4

\\(\\frac{\\sigma^2_1}{\\sigma_2^2}\\)\u7684\u533a\u95f4\u4f30\u8ba1\\(\\frac{S_1^2/S_2^2}{\\sigma^2_1/\\sigma_2^2}\\sim F(n_1-1,n_2-1)\\)

\\[ [\\hat\\theta_L,\\hat\\theta_U]=\\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] \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap08/","title":"[8.x] \u5047\u8bbe\u68c0\u9a8c","text":"

\u7ea6 133 \u4e2a\u5b57

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

\u6216\u8005

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u7ea6 12 \u4e2a\u5b57

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

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

\u8bfe\u7a0b\u4ecb\u7ecd

Course Website: \ud83d\udd17

Course Video: \ud83d\udd17

Course Description

Assignments

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

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

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

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

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

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

Distance Metric to compare images

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

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

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

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

K-Nearest Neighbors: \ud83d\udd17

Interactive Demo: \ud83d\udd17

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

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

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

Setting Hyperparameters (\u8c03\u53c2)

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

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

Parametric Approach

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

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

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

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

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

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

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

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

To solve it, we use regularization.

The regularization term.

Occam's Razor

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

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

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

In common use:

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

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

eg for Softmax Classifier.

Compare the two.

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

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

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

eg. for the linear classifier.

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

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

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

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

backprop (red lines)

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

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

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

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

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

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

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

Summary

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

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

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

Summary

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

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

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

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

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

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

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

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

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

\u9898\u9762\u7b54\u6848

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

Ans

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

just downsample

A common way to do this is max pooling:

just take the max value

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

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

\u7ea6 148 \u4e2a\u5b57

\u8bfe\u7a0b\u4fe1\u606f

\u7ffb\u8f6c\u8bfe\u5802*

\u5206\u6570\u6784\u6210\uff1a

\u7b14\u8bb0\u76f8\u5173

\u53c2\u8003\u7b14\u8bb0\uff1a

List

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

\u7ea6 1041 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \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 29 \u5206\u949f

\u8bf4\u660e

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

\u9605\u8bfb\u6280\u5de7

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

Frame 1Frame 2Frame 3

Like

Like this

Like this!

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

link

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

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

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

height of a tree

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

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

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

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

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

AVL Tree

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

Balance Factor

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

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

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

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

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

Height of AVL Trees

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

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

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

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

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

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

\u5176\u901a\u9879\u4e3a\uff1a

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

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

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

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

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

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

Trouble Maker & Trouble Finder

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

Frame 1Frame 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u5e9f\u8bdd

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

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

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

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

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

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

\u4e00\u4e9b\u6027\u8d28

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

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

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

LL Single Rotation

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

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

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

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

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

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

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

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

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

\u5e73\u8861\u7684\u4fdd\u6301

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

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

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

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

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

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

LL Single Rotation

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

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

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

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

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

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

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

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

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

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

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

LR Rotation

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

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

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

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

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

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

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

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

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

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

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

link

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

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

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

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

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

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

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

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

Frame 1Frame 2Frame 3

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

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

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

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

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

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

\u6548\u679c

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

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

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

Find X

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

Remove X

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

Find Max

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

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

\u524d\u7f6e\u9605\u8bfb

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

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

reference

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

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

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

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

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

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

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

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

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

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

Rank v.s. Height

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

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

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

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

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

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

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

Amortized Analysis for Zig

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Amortized Analysis for Zig-Zag

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

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

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

Lemma 1

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

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

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

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

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

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

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

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

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

\u7686\u5927\u6b22\u559c\uff01

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

Amortized Analysis for Zig-Zig

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

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

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

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

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

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

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

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

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

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

Amortized Analysis for Splay

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

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

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

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

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

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

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

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

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

\u8bf4\u660e

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

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

link

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

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

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

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

Red Black Tree

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

Properties of RBTree

@cy's PPT

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

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

\u8bf4\u660e

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

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

black height, bh

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

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

T1T2 \u9898\u9762\u7b54\u6848

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

\u4e0d\u5408\u6cd5\u3002

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

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

\u9898\u9762\u7b54\u6848

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

\u5408\u6cd5\u3002

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

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

or

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

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

property about height of RBTree

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

the proof of the property

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

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

\u63d0\u9192

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

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

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

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

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

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

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

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

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

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

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

\u8bf4\u660e

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

Insertion / case 3

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

Insertion / case 2

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

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

Insertion / case 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u8bf4\u660e

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

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

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

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

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

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

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

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

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

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

Deletion / case 1

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

Deletion / case 1.1

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

Deletion / case 1.2

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

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

Deletion / case 2

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

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

Deletion / case 3

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

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

Deletion / case 4

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

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

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

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

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

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

link

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

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

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

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

B+ Tree

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

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

property of B+ Tree

@cy's PPT

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

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

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

\u53d1\u73b0

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

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

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

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

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

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

depth of B+ Tree

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

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

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

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

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

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

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

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

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

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

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

Find(43)

Frame 1Frame 2Frame 3

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

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

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

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

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

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

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

Insert(46), no split

Frame 1Frame 2Frame 3

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

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

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

Insert(44), split

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

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

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

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

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

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

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

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

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

\u7ea6 1461 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \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 16 \u5206\u949f

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#leftist-heap","title":"Leftist Heap","text":"

link

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

Wikipedia: https://en.wikipedia.org/wiki/Leftist_tree

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

\u5de6\u504f\u5806\uff0c\u6216\u8005\u8bf4\u5de6\u504f\u5806(Leftist Heap)\uff0c\u5b83\u76f8\u6bd4\u4e8e\u666e\u901a\u7684\u5806\uff0c\u66f4\u597d\u7684\u4e00\u70b9\u5728\u4e8e\u5b83\u652f\u6301\u5feb\u901f\u7684\u5806\u5408\u5e76\u64cd\u4f5c\u3002\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5c06\u65b0\u7684\u4e1c\u897f\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80\u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u76f8\u5bf9\u8bc1\u4e86\u8fd9\u4e2a

\u7531\u4e8e\u5de6\u504f\u5806\u4e0d\u518d\u662f\u4e00\u4e2a\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u7ef4\u62a4\u5927\u6839\u5806\u5c0f\u8ddf\u5806\u90a3\u6837\u7528\u6570\u7ec4\u6765\u7ef4\u62a4\u5b83\u4e86\u3002

\u4e00\u4e2a\u5de6\u504f\u5806\u7684\u7ed3\u70b9\u7ef4\u62a4\u4e86\u5de6\u53f3\u5b50\u5806\u7684\u5730\u5740\u3001\u81ea\u8eab\u7684\u952e\u503c\u3001\u548c\u4e00\u4e2a\u201c\u8ddd\u79bb(dist)\u201d\u3002

struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n

'dist' in leftist heap

  1. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u6216\u53f3\u5b69\u5b50\u4e3a\u7a7a\u7ed3\u70b9\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(0\\)\uff0c\u8fd9\u79cd\u7ed3\u70b9\u88ab\u79f0\u4e3a\u5916\u7ed3\u70b9\uff1b
  2. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u548c\u53f3\u5b69\u5b50\u90fd\u4e0d\u4e3a\u7a7a\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(\\min{(dist_\\text{left child}, dist_\\text{right child})} + 1\\)\uff1b

eg

\u800c\u5de6\u504f\u5806\u5c31\u5efa\u7acb\u5728\u8fd9\u4e9b\u6027\u8d28\u4e0a\uff1a

Leftist Heap

\u5de6\u504f\u5806\u662f\u7ed3\u70b9\u7684\u952e\u503c\u5e94\u5f53\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u7684\u4e8c\u53c9\u6811\uff08\u5373\u5806\u7684\u6027\u8d28\uff09\uff0c\u4e14\u6ee1\u8db3\u300c\u5de6\u504f\u300d\u6027\u8d28\u2014\u2014\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u7684 dist \u4e0d\u5c0f\u4e8e\u53f3\u5b69\u5b50\u7684 dist\u3002

\u56e0\u6b64\uff0c\u56de\u987e dist \u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6269\u5c55\u6027\u8d28\uff1a

properties

  1. \u7ed3\u70b9\u7684 dist \u7b49\u4e8e \\(dist_\\text{right child} + 1\\)\uff08\u5047\u8bbe \\(dist_\\text{NULL} = -1\\)\uff09\uff1b
  2. \u5982\u679c \\(dist_i = N\\)\uff0c\u5219\u4ee5 \\(i\\) \u4e3a\u6839\u7684\u5b50\u6811\u81f3\u5c11\u662f\u4e00\u4e2a \\(N+1\\) \u5c42\u7684\u5b8c\u7f8e\u4e8c\u53c9\u6811\uff0c\u81f3\u5c11\u6709 \\(2^{N+1}-1\\) \u4e2a\u7ed3\u70b9\uff1b

\u6ce8\u610f\uff0c\u5728\u793a\u610f\u56fe\u4e2d\u6211\u4eec\u7701\u7565\u4e86\u7ed3\u70b9\u81ea\u8eab\u952e\u503c\u7684\u6807\u8bb0\uff0c\u4f46\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u5806\uff0c\u5b83\u5c31\u9700\u8981\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373\u7ed3\u70b9\u7684\u952e\u503c\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u952e\u503c\u5f88\u53ef\u80fd\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u6570\uff0c\u5927\u5c0f\u5173\u7cfb\u53ef\u80fd\u8f6c\u5316\u4e3a\u504f\u5e8f\u5173\u7cfb\u3002

\u7b80\u5355\u601d\u8003\u4e00\u4e0b\uff0c\u4e3a\u4ec0\u4e48\u5de6\u504f\u5806\u4f1a\u8fd9\u4e48\u8bbe\u8ba1\u5462\uff1f\u5b9e\u9645\u4e0a\uff0c\u5408\u5e76\u5806\u9700\u8981\u8003\u8651\u7684\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u70b9\u5c31\u662f\u8981\u80fd\u5728\u4e4b\u540e\u7684\u64cd\u4f5c\u4e2d\u5c3d\u53ef\u80fd\u5730\u7ef4\u62a4\u5806\u7684\u201c\u5e73\u8861\u201d\uff0c\u5426\u5219\u6211\u4eec\u628a\u5806\u7ef4\u62a4\u6210\u4e86\u4e00\u4e2a\u94fe\uff0c\u90a3\u663e\u7136\u662f\u975e\u5e38\u7cdf\u7cd5\u7684\u3002

\u800c\u5de6\u504f\u5806\u901a\u8fc7\u7ef4\u62a4\u6574\u4e2a\u5806\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80 dist \u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u8bc1\u4e86\u8fd9\u4e2a\u5806\u7684\u76f8\u5bf9\u5e73\u8861\u6027\u3002

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

\u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\u5c31\u662f\u5408\u5e76\u3002\u800c\u5176\u5b83\u64cd\u4f5c\u90fd\u53ef\u4ee5\u770b\u4f5c\u662f\u5408\u5e76\u7684\u7279\u6b8a\u60c5\u51b5\u3002\u56e0\u6b64\u6211\u4eec\u9996\u5148\u8ba8\u8bba\u4efb\u610f\u4e24\u4e2a\u5de6\u504f\u5806\u7684\u5408\u5e76\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u5e76","title":"\u5408\u5e76","text":"

\u4f5c\u4e3a\u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\uff0c\u5408\u5e76\u64cd\u4f5c\u81ea\u7136\u5c31\u662f\u8981\u5728\u6ee1\u8db3\u6027\u8d28\u7684\u6761\u4ef6\u4e0b\uff0c\u5408\u5e76\u4e24\u4e2a\u5de6\u504f\u5806\u3002\u5927\u81f4\u601d\u8def\u5c31\u662f\u5148\u7ef4\u62a4\u5806\u7684\u6027\u8d28\uff0c\u5728\u56de\u6eaf\u65f6\u7ef4\u62a4\u5de6\u504f\u6027\u8d28\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5b83\u662f\u4e00\u4e2a\u5148\u81ea\u4e0a\u800c\u4e0b\u518d\u81ea\u4e0b\u800c\u4e0a\u7684\u8fc7\u7a0b\u3002

\u6309\u7167\u5b9e\u73b0\u65b9\u6cd5\uff0c\u5de6\u504f\u5806\u7684\u5408\u5e76\u53ef\u4ee5\u5206\u4e3a\u9012\u5f52\u5f0f\u548c\u8fed\u4ee3\u5f0f\u4e24\u79cd\u3002\u5176\u4e2d\u524d\u8005\u53ef\u80fd\u66f4\u4e3a\u76f4\u89c9\uff0c\u800c\u540e\u8005\u53ef\u89c6\u5316\u540e\u5219\u66f4\u4e3a\u76f4\u89c2\u3002

\u4e3a\u4e86\u65b9\u4fbf\u540e\u7eed\u7684\u4ee3\u7801\u63cf\u8ff0\uff0c\u6211\u4eec\u9996\u5148\u7ed9\u51fa\u5de6\u504f\u5806\u7ed3\u70b9\u5728\u672c\u6587\u4e2d\u7684\u5b9a\u4e49\uff1a

struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u9012\u5f52\u5f0f","title":"\u9012\u5f52\u5f0f","text":"

\u9012\u5f52\u5f0f\u5148\u6bd4\u8f83\u5f53\u524d\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u6839\u7ed3\u70b9\u7684\u952e\u503c\uff0c\u9009\u62e9\u8f83\u5c0f\uff08\u8f83\u5927\uff09\u7684\u90a3\u4e2a\u4f5c\u4e3a\u6839\u7ed3\u70b9\uff0c\u5176\u5de6\u5b50\u6811\u4f9d\u7136\u4e3a\u5de6\u5b50\u6811\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u53f3\u5b50\u6811\u548c\u53e6\u4e00\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

\u5f53\u7136\uff0c\u5728\u9012\u5f52\u5730\u66f4\u65b0\u5b8c\u540e\uff0c\u6211\u4eec\u9700\u8981\u68c0\u67e5\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u662f\u5426\u6ee1\u8db3 \\(dist_\\text{left child} \\geq dist_\\text{right child}\\) \u7684\u6027\u8d28\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\uff0c\u6211\u4eec\u5219\u9700\u8981\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u6765\u7ef4\u6301\u6027\u8d28\u3002

LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// Recursive exit. If any is NULL, return the other as the new root of subtree.\nif (x == NULL) return y;\nif (y == NULL) return x;\n\n// If `x`'s val is smaller than `y`'s, swap them, which means we always operates on `x`.\nif (x->val > y->val) {\nswap(x, y);\n}\n\n// Merge `x`'s right subtree and `y`, and set `x`'s right subtree to the result.\nx->rs = merge(x->rs, y);\n\n// If `x`'s left subtree's dist is smaller than `x`'s right subtree's dist, swap them.\nif (x->ls->dist == NULL || x->ls->dist < x->rs->dist) {\nswap(x->ls, x->rs);\n}\n\n// Update x's dist.\nx->dist = x->rs->dist + 1;\n\n// Return x as the new root of subtree.\nreturn x;\n}\n

\ud83c\udf30

\u73b0\u5728\u6211\u4eec\u6a21\u62df\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u73b0\u5728\u6211\u4eec\u6709\u4e0b\u9762\u4e24\u4e2a\u5de6\u504f\u5806\uff0c\u5c1d\u8bd5\u5408\u5e76\u5b83\u4eec\u3002

Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

\u6211\u4eec\u53d1\u73b0\uff0c\u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u7eff\u6811\u53f3\u5b50\u6811\u548c\u84dd\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

\u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u84dd\u6811\u53f3\u5b50\u6811\u548c\u7eff\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

\u6700\u540e\u8fd8\u5269\u4e0b\u4e24\u4e2a\u7ed3\u70b9\u5566\uff01\u5b9e\u9645\u4e0a\u8fd9\u91cc\u76f4\u63a5\u6a21\u62df\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff0c\u9996\u5148\u662f\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u5e76\u9009\u62e9\u4e86 \u277a \u4f5c\u4e3a\u65b0\u6839\uff1b\u63a5\u4e0b\u6765\u5728\u9012\u5f52\u7684\u8fc7\u7a0b\u4e2d\u53d1\u73b0\u9700\u8981\u5408\u5e76 NULL \u548c \u277b\uff0c\u6240\u4ee5\u76f4\u63a5\u8fd4\u56de\u4e86 \u277b\u3002

\u7136\u800c\u8fd8\u6ca1\u6709\u7ed3\u675f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5904\u7406\u5de6\u53f3\u5b50\u6811 dist \u5927\u5c0f\u5173\u7cfb\u95ee\u9898\u3002

\u6211\u4eec\u53d1\u73b0 \u277a \u7684\u5de6\u5b69\u5b50\u4e3a NULL\uff0c\u6211\u4eec\u8bb0 \\(dist_\\text{NULL} = -1\\)\uff0c\u53f3\u5b69\u5b50 \u277b \u6709 \\(dist_\\text{right child}=0\\)\uff0c\u6240\u4ee5\u9700\u8981\u4ea4\u6362\u4e24\u4e2a\u5b69\u5b50\u3002

\u8fd9\u91cc\u4e5f\u8df3\u8fc7\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff1a

\u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u277a \u7684 dist \u5c0f\u4e8e \u2779 \u7684 dist\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e0d\u9700\u8981\u6539\u53d8\u3002

\u7ee7\u7eed\u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u2777 \u548c \u2778 \u7684 dist \u76f8\u540c\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e5f\u4e0d\u9700\u8981\u6539\u53d8\u3002

\u4ece\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u770b\u51fa\u6765\uff0c\u5e76\u4e0d\u662f\u770b\u4e0a\u53bb\u66f4\u5927\u7684\u5b50\u6811\u4e00\u5b9a\u5728\u5de6\u4fa7\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u8fed\u4ee3\u5f0f","title":"\u8fed\u4ee3\u5f0f","text":"

\u8fed\u4ee3\u5f0f\u662f\u6839\u636e\u5b83\u7684\u5b9e\u73b0\u65b9\u6cd5\u6765\u547d\u540d\u7684\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fed\u4ee3\u5f0f\u53ef\u80fd\u66f4\u6709\u610f\u601d\u3002\u4e8b\u5b9e\u4e0a\u5728\u5f88\u591a\u9898\u76ee\u4e2d\u6211\u89c9\u5f97\u8fd9\u4e2a\u65b9\u6cd5\u505a\u9898\u66f4\u52a0\u65b9\u4fbf\u3002

\u8fed\u4ee3\u5f0f\u7ef4\u62a4\u4e24\u4e2a\u989d\u5916\u7684\u6307\u9488\uff0c\u5206\u522b\u6307\u5411\u4e24\u68f5\u6811\u8fd8\u6ca1\u88ab\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u5e76\u4e0d\u65ad\u9009\u62e9\u8f83\u5c0f\u7684\u90a3\u4e2a\u5408\u5e76\u8fdb\u53bb\uff0c\u76f4\u5230\u4e24\u4e2a\u6307\u9488\u90fd\u4e3a\u7a7a\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u548c\u5f52\u5e76\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\u975e\u5e38\u76f8\u4f3c\uff0c\u5b9e\u9645\u4e0a\u5f53\u6211\u4eec\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u53bb\u770b\u8fd9\u4ef6\u4e8b\u4ee5\u540e\uff0c\u4f1a\u53d1\u73b0\u8fd9\u91cc\u505a\u7684\u5c31\u662f\u4e00\u4e2a\u5f52\u5e76\u3002

LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// `tx` & `ty` are the pointers to the roots of the subtrees that haven't been merged.\nLeftistHeapNode * tx = x, * ty = y;\n// `res` is the root of the merged final tree, while `cur` is the latest node that has been merged.\nLeftistHeapNode * res = NULL, * cur = NULL;\n\n// Begin merging.\nwhie (tx != NULL && ty != NULL) {\n// If `tx`'s val is smaller than `ty`'s, swap them, which means we always operates on `tx`.\nif (tx->val > ty->val) {\nswap(tx, ty);\n}\n\n// Specially mark the root on the first merge.\nif (res == NULL) {\nres = tx;\ncur = tx;\n} else {\ncur->rs = tx;\ncur = cur->rs;\n}\n\n// Go on.\ntx = tx->rs;\n}\n\n// Merge the rest of the tree.\nwhile (ty != NULL) {\n// Specially mark the root on the first merge. (rarely happens but not impossible)\nif (res == NULL) {\nres = ty;\ncur = ty;\n} else {\ncur->rs = ty;\ncur = cur->rs;\n}\n\n// Go on.\nty = ty->rs;\n}\n\n// Adjust the left and right subtrees of all the nodes according to the properties of `dist`. \n// It does the same work as the adjust part in the recursive version. I ignore it here.\nres = adjust(res);\n\nreturn res;\n}\n

\u4f9d\u65e7\u662f\u4ee5\u4e0a\u9762\u8fdb\u884c\u6a21\u62df\u7684\u90a3\u4e2a\u5408\u5e76\u4e3a \ud83c\udf30 \u8fdb\u884c\u6a21\u62df\u3002

\ud83c\udf30

\u9996\u5148\uff0c\u6211\u4eec\u5bf9\u56fe\u7247\u7684\u6392\u7248\u7a0d\u5fae\u505a\u4e00\u4e9b\u6539\u53d8\uff0c\u6211\u4eec\u4e0d\u518d\u6309\u7167\u4e4b\u524d\u753b\u5806\u7684\u65b9\u5f0f\u53bb\u753b\uff0c\u800c\u662f\u201c\u5de6\u504f\u201d\u5730\u53bb\u753b\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u8c03\u6574\u4e4b\u524d

Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

\u7eff\u8272\u548c\u84dd\u8272\u7684\u7bad\u5934\u5206\u522b\u8868\u793a\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u5c1a\u672a\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u7d2b\u8272\u7bad\u5934\u8868\u793a\u6700\u8fd1\u7684\u5408\u5e76\u53d1\u751f\u7684\u4f4d\u7f6e\u3002

\u6bd4\u8f83 \u2776 \u548c \u2777\uff0c\u53d1\u73b0 \u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277a\u3002

\u548c\u4e0a\u4e00\u6b65\u7c7b\u4f3c\u7684\uff0c\u6bd4\u8f83 \u277a \u548c \u2777\uff0c\u53d1\u73b0 \u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u84dd\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277b\u3002

\u4f9d\u7136\u7c7b\u4f3c\u5730\uff0c\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u53d1\u73b0 \u277a \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u277a \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411 NULL\u3002

\u8fd9\u65f6\u5019\u6211\u4eec\u53d1\u73b0\u5df2\u7ecf\u6709\u4e00\u4e2a\u6307\u9488\u7a7a\u4e86\uff0c\u4e5f\u5c31\u662f\u7eff\u8272\u6307\u9488\u5df2\u7ecf\u6307\u5411\u4e86 NULL\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u6309\u987a\u5e8f\u628a\u84dd\u8272\u6307\u9488\u6307\u5411\u7684\u5185\u5bb9\u90fd\u63a8\u8fdb\u53bb\u5373\u53ef\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u8fd8\u9700\u8981\u7ef4\u62a4 dist \u4fe1\u606f\u5e76\u6839\u636e\u6027\u8d28\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002\u8fd9\u4e00\u90e8\u5206\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

\ud83c\udf30/\ud83d\udd25

\u5f53\u7136\uff0c\u8fd9\u4e48\u6765\u770b\u53ef\u80fd\u8fd8\u662f\u5f88\u4e71\uff0c\u8054\u60f3\u6211\u4eec\u4e4b\u524d\u53d1\u73b0\u5b83\u548c\u5f52\u5e76\u6392\u5e8f\u5f88\u50cf\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u7528\u4e00\u4e2a\u66f4\u52a0\u76f4\u89c2\u7684\u65b9\u5f0f\u6765\u770b\u8fd9\u4e2a\u8fc7\u7a0b\uff1a

Frame 0Frame 1Frame 2

\u540c\u6837\u4ece\u8fd9\u5f20\u56fe\u5f00\u59cb\uff0c\u7531\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u5b83\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9012\u5f52\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u6307\u5408\u5e76\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\u7684\u8fc7\u7a0b\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e24\u4e2a\u5de6\u504f\u5806\u6539\u5199\u6210\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\uff01

\u7531\u4e8e\u6211\u4eec\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u603b\u662f\u627e\u53f3\u5b69\u5b50\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u6cbf\u7740\u6700\u53f3\u6cbf\u8def\u5f84\u628a\u6ca1\u4e2a\u5de6\u504f\u5806\u62c6\u6210\u8fd9\u79cd\u201c\u60ac\u540a\u201d\u7684\u5e26\u72b6\u5f62\u5f0f\uff0c\u6bcf\u4e00\u201c\u6761\u201d\u7684\u503c\u53d6\u51b3\u4e8e\u6839\u7684\u952e\u503c\uff0c\u4e5f\u5c31\u662f\u8fd9\u4e00\u201c\u6761\u201d\u7684\u6700\u9876\u90e8\u3002

\u5728\u8fd9\u5f20\u56fe\u4e2d\uff0c\u6211\u4eec\u5f97\u5230\u7684\u4e24\u4e2a\u6709\u5e8f\u6570\u7ec4\u5206\u522b\u662f [1, 5] \u548c [2, 6]\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u4eec\u8fdb\u884c\u6392\u5e8f\u3002

\u7ecf\u8fc7\u6392\u5e8f\uff0c\u5c31\u4f1a\u53d1\u73b0\u5b83\u4eec\u521a\u597d\u7b26\u5408\u6211\u4eec\u5728\u4e0a\u9762\u6b65\u9aa4\u5f97\u5230\u7684\u7ed3\u679c\uff08\u53ef\u4ee5\u5bf9\u6bd4\u7740\u4e0a\u9762\u7684 Frame 4 \u770b\uff09\u3002\u5b9e\u9645\u4e0a\uff0c\u53ea\u8981\u4f60\u56de\u987e\u4e00\u4e0b\u5f52\u5e76\u6392\u5e8f\u7684\u8fc7\u7a0b\uff0c\u518d\u5bf9\u6bd4\u7740\u770b\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5c31\u4f1a\u53d1\u73b0\u4e00\u6a21\u4e00\u6837\u3002

\u518d\u6b21\u63d0\u9192\uff0c\u8fd9\u4e00\u5c0f\u8282\u8bb2\u7684\u90e8\u5206\u90fd\u5ffd\u7565\u4e86\u4e4b\u540e\u8c03\u6574\u5b50\u6811\u5de6\u504f\u6027\u8d28\u7684\u8fc7\u7a0b\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u5c31\u5355\u7eaf\u662f\u4e00\u4e2a\u7ef4\u62a4\u5806\u6027\u8d28\u7684\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

\u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u5220\u9664","title":"\u5355\u70b9\u5220\u9664","text":"

\u8ba9\u6211\u4eec\u4e00\u822c\u6027\u5730\u8003\u8651\u4e00\u4e2a\u7ed3\u70b9\uff0c\u4e0e\u5b83\u76f8\u5173\u7684\u4e3b\u8981\u6709\u4e09\u4e2a\u65b9\u5411\uff1a\u7236\u7ed3\u70b9\u548c\u4e24\u4e2a\u5b69\u5b50\u7ed3\u70b9\u3002

\u800c\u5355\u70b9\u5220\u9664\u7684\u64cd\u4f5c\u4e5f\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5408\u5e76\u9700\u8981\u88ab\u5220\u9664\u7684\u7ed3\u70b9\u7684\u4e24\u4e2a\u5b50\u7ed3\u70b9\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u65b0\u7684\u6811\u7684\u6839\u4ee3\u66ff\u88ab\u5220\u9664\u7684\u7ed3\u70b9\uff0c\u518d\u5728\u56de\u6eaf\u7684\u8fc7\u7a0b\u4e2d bottom-up \u5730\u66f4\u65b0 dist \u5373\u53ef\u3002

LeftistHeapNode * del(LeftistHeapNode * cur, ElementType x) {\nif (cur->val == x) {\n// Just return the merge of the children.\nreturn merge(cur->l, cur->r);\n} else {\n// Not this subtree.\nif (cur->val > x) return cur;\n\n// Otherwise, search the `x`.\nif (cur->l != NULL) del(cur->l, x);\nif (cur->r != NULL) del(cur->r, x);\n\n// Adjust the dist bottom-up.\nadjust(cur);\n}\n}\n
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#skew-heap","title":"Skew Heap","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Skew_heap

\u659c\u5806(Skew Hea)\u662f\u6bd4\u5de6\u504f\u5806\u66f4\u4e3a\u4e00\u822c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u540c\u6837\u6709\u7740\u80fd\u591f\u5feb\u901f\u5408\u5e76\u7684\u6027\u8d28\u3002

\u5934\u8111\u98ce\u66b4

\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u5de6\u504f\u5806\uff0c\u7531\u4e8e\u9700\u8981\u81ea\u4e0b\u800c\u4e0a\u5730\u7ef4\u62a4 dist\uff0c\u6240\u4ee5\u6211\u4eec\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\u3002\u56de\u987e AVL \u6811\uff0c\u540c\u6837\u4e3a\u4e86\u7ef4\u62a4\u5b83\u6bd4\u8f83\u4e25\u683c\u7684\u5e73\u8861\u6027\u8d28\uff0c\u6211\u4eec\u4e5f\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\uff0c\u800c\u7ea2\u9ed1\u6811\u5219\u901a\u8fc7\u4e00\u4e2a\u80fd\u591f\u4ec5\u4ec5\u901a\u8fc7\u53d8\u8272\u5c31\u80fd\u8c03\u6574\u7684\u9ed1\u9ad8\u6765\u89c4\u907f\u4e86\u5fc5\u987b\u81ea\u4e0b\u800c\u4e0a\u7ef4\u62a4\u7684\u95ee\u9898\uff0c\u5b9e\u73b0\u4e86\u5e76\u53d1\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u60f3\u5c06\u5de6\u504f\u5806\u6539\u53d8\u5730\u80fd\u591f\u8fdb\u884c\u81ea\u4e0a\u800c\u4e0b\u7ef4\u62a4\uff0c\u5c31\u9700\u8981\u6539\u53d8\u751a\u81f3\u653e\u5f03\u5b83\u7684\u5de6\u504f\u6027\u8d28\u7684\u4e25\u683c\u6027\u2014\u2014\u800c\u8fd9\u5c31\u662f\u659c\u5806\u7684\u7531\u6765\u3002

\u659c\u5806\u4e5f\u9700\u8981\u6ee1\u8db3\u5927\u6839\u5806\uff08\u5c0f\u6839\u5806\uff09\u7684\u6027\u8d28\uff0c\u800c\u5b83\u7684\u5408\u5e76\u548c\u5de6\u504f\u5806\u7684\u5408\u5e76\u4e5f\u5341\u5206\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u8fd9\u6b21\u65e0\u6761\u4ef6\u7684\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u5de6\u504f\u6027\u8d28\u5982\u4f55\u53d8\u5316\uff0c\u6211\u4eec\u90fd\u4f1a\u9009\u62e9\u4ea4\u6362\u53c2\u4e0e\u5408\u5e76\u7684\u5de6\u53f3\u5b50\u6811\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5728\u56de\u6eaf\u7684\u65f6\u5019\u624d\u8fdb\u884c\u5de6\u53f3\u5b50\u6811\u7684\u4ea4\u6362\uff0c\u4e8e\u662f\u5c31\u5b9e\u73b0\u4e86\u5b8c\u5168\u7684\u81ea\u4e0a\u800c\u4e0b\u3002

\u8ba9\u6211\u4eec\u6765\u770b\u770b wiki \u91cc\u7ed9\u51fa\u7684 \ud83c\udf30\uff1a

\ud83c\udf30 from wikipedia

Frame 0Frame 1

\u8fd9\u662f\u6211\u4eec\u9700\u8981\u5408\u5e76\u7684\u4e24\u4e2a\u5806\u3002

\u7701\u7565\u4e86\u4e2d\u95f4\u7684\u6b65\u9aa4\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u6a21\u62df\u4e00\u4e0b\uff0c\u6bcf\u4e00\u6b21\u5408\u5e76\u64cd\u4f5c\u7ed3\u675f\u4e4b\u540e\u90fd\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002

\u6211\u4eec\u603b\u662f\u5148\u5f80\u53f3\u4fa7\u5b50\u6811\u9012\u5f52\u4e0b\u53bb\u5730\u5408\u5e76\uff0c\u6ca1\u5b8c\u6210\u4e00\u6b21\u5408\u5e76\u5c31\u4ea4\u6362\u8fd9\u4e2a\u5b50\u6811\u548c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\uff0c\u800c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\u5728\u8fd9\u6b21\u4ea4\u6362\u5b8c\u4ee5\u540e\u5c31\u4e0d\u4f1a\u518d\u53d1\u751f\u6539\u53d8\uff0c\u800c\u8fd9\u4e2a\u5b50\u6811\u5219\u4f1a\u7ee7\u7eed\u8fdb\u884c\u4e0b\u4e00\u6b21\u5408\u5e76\u3002

\u7701\u7565\u4e0a\u9762\u7684\u7ed8\u56fe\u663e\u7136\u662f\u6211\u61d2\u5f97\u753b\u4e86\uff0c\u76f8\u4fe1\u5927\u5bb6\u5728\u4e86\u89e3\u5de6\u504f\u5806\u7684\u5408\u5e76\u4ee5\u540e\u4e5f\u80fd\u5f88\u5feb\u611f\u53d7\u5230\u659c\u5806\u662f\u5982\u4f55\u5408\u5e76\u7684\u3002

\u5f53\u7136\uff0c\u5b83\u4e5f\u662f\u652f\u6301\u8fed\u4ee3\u7684\u5199\u6cd5\u7684\uff0c\u548c\u662f\u548c\u4e4b\u524d\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u6211\u4eec\u53ef\u4ee5\u6392\u5e8f\u6bcf\u4e00\u201c\u6761\u201d\uff0c\u7136\u540e\u518d\u5408\u5e76\u3002Wikipedia \u4e0a\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u8fc7\u7a0b\u56fe\uff0c\u4f46\u662f\u90a3\u4e2a\u8fc7\u7a0b\u56fe\u6709\u70b9\u81ea\u4e0b\u800c\u4e0a\u7684\u610f\u601d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u81ea\u4e0a\u800c\u4e0b\u505a\u4e5f\u662f\u4e00\u6837\u7684\u3002\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u53bb\u770b\u770b Wiki \u4e0a\u7684\u8fc7\u7a0b\uff1a\ud83d\udd17\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u7406\u6027\u5206\u6790","title":"\u5408\u7406\u6027\u5206\u6790","text":"

\u7136\u800c\uff0c\u968f\u4e4b\u51fa\u73b0\u7684\u4e00\u4e2a\u95ee\u9898\u4e0a\uff0c\u6211\u4eec\u7528\u4e86\u8fd9\u79cd\u770b\u8d77\u6765\u6709\u70b9\u4e0d\u7ba1\u4e09\u4e03\u4e8c\u5341\u4e00\u7684\u505a\u6cd5\uff0c\u90a3\u5b83\u7684\u6b63\u786e\u6027\u5982\u4f55\u4fdd\u8bc1\u5462\uff1f

\u9996\u5148\u8fdb\u884c\u611f\u6027\u7684\u7406\u89e3\u3002\u6211\u4eec\u6bcf\u5408\u5e76\u4e24\u4e2a\u5806\u90fd\u662f\u6cbf\u7740\u6700\u53f3\u4fa7\u8def\u5f84\u5408\u5e76\uff08\u867d\u7136\u4e2d\u95f4\u4f1a\u88ab\u4e0d\u505c\u8f6c\u5230\u5de6\u8fb9\uff09\uff0c\u5373\u6bcf\u6b21\u4f1a\u88ab\u6539\u53d8\u7684\u5b50\u6811\u5de6\u53f3\u987a\u5e8f\u7684\u8282\u70b9\u90fd\u662f\u6700\u53f3\u4fa7\u7684\u8282\u70b9\uff0c\u800c\u518d\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5982\u679c\u6bcf\u6b21\u5408\u5e76\u90fd\u5c06\u53d1\u751f\u7684\u53d8\u5316\u8f6c\u5230\u5de6\u4fa7\uff0c\u4ee5\u6b64\u6765\u51cf\u5c0f\u5408\u5e76\u64cd\u4f5c\u5e26\u6765\u7684\u9ad8\u5ea6\u201c\u7d2f\u79ef\u201d\u3002

\u8fdb\u4e00\u6b65\u89e3\u91ca

\u4ee5\u6bcf\u6b21\u53ea\u63d2\u5165\u4e00\u4e2a\u70b9\u4e3a\u4f8b\u5b50\u8bf4\u660e\u95ee\u9898\u3002

\u8fdb\u4e00\u6b65\u5bf9\u9012\u5f52\u65cb\u8f6c\u5230\u5de6\u4fa7\u505a\u89e3\u91ca\uff0c\u9012\u5f52\u6027\u5730\u8f6c\u5230\u5de6\u4fa7\uff0c\u4f7f\u5f97\u672c\u6765\u6700\u53f3\u4fa7\u7684\u8def\u5f84\u53d8\u5230\u6700\u5de6\u4fa7\uff0c\u5373\u4f7f\u4e4b\u540e\u4ea4\u6362\u4f1a\u91cd\u65b0\u8bbf\u95ee\u5230\u8fd9\u4e2a\u5b50\u6811\uff0c\u4f46\u6b64\u65f6\u9664\u4e86\u6839\uff0c\u5176\u4ed6\u90e8\u5206\u4f9d\u7136\u662f\u6700\u5de6\u4fa7\u7684\u8def\u5f84\uff0c\u4e5f\u4e0d\u4f1a\u518d\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u8fd9\u6b21\u8def\u5f84\u3002

\u7528\u56fe\u6765\u505a\u89e3\u91ca\u7684\u8bdd\uff0c\u5c31\u662f\u8fd9\u6837\uff1a

\u6211\u4eec\u53ea\u5173\u6ce8\u4e00\u5f00\u59cb\u4f5c\u4e3a\u6700\u53f3\u4fa7\u7684\u8fd9\u4e09\u4e2a\u7ea2\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e24\u6b21\u64cd\u4f5c\u540e\uff0c\u9664\u4e86\u76f4\u63a5\u4f5c\u4e3a\u6839\u7684\u5b50\u6811\u7684\u90a3\u4e2a\u8282\u70b9\u88ab\u8f6c\u4e86\u8fc7\u6765\uff0c\u5176\u4ed6\u7684\u4e4b\u540e\u7684\u8282\u70b9\u90fd\u662f\u4f5c\u4e3a\u201c\u6700\u5de6\u4fa7\u201d\u7684\u8282\u70b9\u51fa\u73b0\u7684\uff0c\u867d\u7136\u56fe\u4e2d\u53ea\u6709\u8fd9\u4e00\u4e2a\uff0c\u4f46\u662f\u5f53\u6811\u7684\u89c4\u6a21\u53d8\u5927\u540e\uff0c\u8fd9\u4e2a\u4f18\u52bf\u4f1a\u66f4\u52a0\u660e\u663e\u3002

\u6839\u636e\u8fd9\u4e2a\u7279\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u7406\u89e3\u4e0b\u9762\u8fd9\u9053\u9898\uff1a

\u9898\u9762\u7b54\u6848 & \u89e3\u91ca

The result of inserting keys \\(1\\) to \\(2^k\u22121\\) for any \\(k>4\\) in order into an initially empty skew heap is always a full binary tree. (T/F)

\u5373\u5bf9\u4e8e\u4efb\u610f\u7684 \\(k>4\\) \u7684\u60c5\u51b5\uff0c\u6309\u987a\u5e8f\u5f80\u4e00\u4e2a\u659c\u5806\u91cc\u63d2\u5165 \\(1\\sim2^k-1\\) \u8fd9\u4e9b\u6570\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u90fd\u4f1a\u662f\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\u3002\uff08\u5bf9/\u9519\uff09

\u7b54\u6848\u662f T\u3002

\u9996\u5148\uff0c\u4ece\u63d2\u5165\u7684\u5143\u7d20\u7684\u6570\u91cf\u6765\u770b\uff0c\u662f\u6ee1\u8db3\u6ee1\u4e8c\u53c9\u6811\u7684\u5fc5\u8981\u6761\u4ef6\u7684\u3002

\u800c\u6839\u636e\u6211\u4eec\u4e0a\u9762\u63cf\u8ff0\u7684\uff0c\u8df3\u8fc7\u80af\u5b9a\u6210\u7acb\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u5f52\u7eb3\uff0c\u8fc7\u7a0b\u5e76\u4e0d\u5b8c\u6574\u4e0e\u4e25\u8c28\uff0c\u4f46\u662f\u5927\u6982\u5c31\u662f\u8fd9\u4e48\u4e2a\u610f\u601d\u3002

\u5bf9\u4e8e\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\uff0c\u6211\u4eec\u73b0\u5728\u8981\u63d2\u5165\u4e00\u4e2a\u6570\uff0c\u663e\u7136\u8fd9\u4e2a\u6570\u6bd4\u6811\u91cc\u4efb\u4f55\u4e00\u4e2a\u90fd\u8981\u5927\u3002\u800c\u5f53\u8fd9\u4e2a\u6570\u88ab\u63d2\u5165\u540e\uff0c\u5b83\u6210\u4e3a\u6574\u4e2a\u5806\uff0c\u6216\u8005\u8bf4\u6574\u4e2a\u6811\u6700\u5de6\u4fa7\u7684\u4e00\u6761\u3002\u800c\u5728\u63a5\u4e0b\u6765\u7684\u4ea4\u6362\u8fc7\u7a0b\u4e2d\uff0c\u5b83\u4f1a\u4e0d\u65ad\u88ab\u7529\u6765\u7529\u53bb\uff0c\u6700\u7ec8\u7ecf\u8fc7 2^k \u6b21\u540e\u88ab\u7529\u5230\u6700\u53f3\u8fb9\uff0c\u4e5f\u5c31\u662f\u8fce\u63a5\u5b83\u7684\u7b2c\u4e00\u4e2a\u5b69\u5b50\u3002\u663e\u7136\uff0c\u5bf9\u4e8e\u8be5\u5c42\u7684\u6240\u6709\u8282\u70b9\u6765\u8bf4\u90fd\u9700\u8981 2^k \u6b21\u624d\u4f1a\u8fdb\u5165\u5230\u6700\u53f3\u4fa7\u8def\u5f84\u3002

\uff08\u8fd9\u4e2a\u8fc7\u7a0b\u53ef\u4ee5\u7c7b\u6bd4\u4e8c\u8fdb\u5236\u6570\u7684\u81ea\u589e\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u8282\u70b9\u7684\u6bcf\u4e2a\u524d\u9a71\u5206\u522b\u662f\u5de6\u5b69\u5b50\u8fd8\u662f\u53f3\u5b69\u5b50\u6765\u5206\u914d\u5bf9\u5e94\u7684\u4f4d\u5b50\u662f 0 \u8fd8\u662f 1\u3002\uff09

\u5f53\u7136\uff0c\u5982\u4e0a\u7684\u6027\u8d28\u53ea\u80fd\u5e2e\u52a9\u6211\u4eec\u611f\u6027\u7684\u7406\u89e3\u8fd9\u4e2a\u6b63\u786e\u6027\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ece\u644a\u8fd8\u5206\u6790\u7684\u89d2\u5ea6\u6765\u5206\u6790\u5176\u6b63\u786e\u6027\uff0c\u5373\u5176\u5747\u644a\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

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

\u8fd9\u91cc\u6211\u4eec\u91c7\u7528\u52bf\u80fd\u6cd5\u8fdb\u884c\u5206\u6790\u3002

\u5206\u6790 skew heap \u7684\u5747\u644a\u590d\u6742\u5ea6\uff0c\u4e3b\u8981\u5c31\u662f\u5206\u6790\u5408\u5e76\u64cd\u4f5c\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u5176\u4ed6\u64cd\u4f5c\u90fd\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5408\u5e76\u64cd\u4f5c\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u52bf\u80fd\u51fd\u6570\uff1a

\u52bf\u80fd\u51fd\u6570

\u6211\u4eec\u5b9a\u4e49 \\(\\Phi(Heap) = \\text{number of heavy node in } Heap\\)\u3002

\u5176\u4e2d\uff0c\u989d\u5916\u9700\u8981\u5b9a\u4e49 heavy node \u548c light node\uff1a

heavy node & light node

\u5bf9\u4e8e\u4e00\u4e2a\u5b50\u5806 \\(H\\)\uff0c\u5982\u679c \\(size(H.\\text{right\\_descendant}) \\geq \\frac{1}{2}size(H)\\)\uff0c\u5219 \\(H\\) \u662f heavy node\uff0c\u5426\u5219\u662f light node\u3002

@ cy'ppt

A node p is heavy if the number of descendants of p\u2019s right subtree is at least half of the number of descendants of p, and light otherwise. Note that the number of descendants of a node includes the node itself.

\u663e\u7136\uff0c\u5bf9\u4e8e heavy node \u548c light node\uff0c\u4ee5\u53ca\u5408\u5e76\u64cd\u4f5c\uff0c\u6709\u8fd9\u4e48\u4e00\u4e9b\u6027\u8d28\uff1a

properties

  1. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f heavy node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u4e00\u5b9a\u53d8\u4e3a\u4e00\u4e2a light node\uff1b
  2. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f light node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u53d8\u4e3a\u4e00\u4e2a heavy node\uff1b
  3. \u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8282\u70b9\u7684 heavy/light \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u5b83\u539f\u5148\u4e00\u5b9a\u5728\u5806\u7684\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\uff1b

\u5217\u51fa\u516c\u5f0f\uff1a

\\[ \\hat{c} = c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\]

\u5176\u4e2d\uff0c\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\\(H_{merged}\\) \u4e3a\u5408\u5e76\u540e\u7684\u5806\u7684\u52bf\u80fd\uff0c\\(H_x\\) \u548c \\(H_y\\) \u5206\u522b\u4e3a\u5408\u5e76\u524d\u7684\u4e24\u4e2a\u5806\u7684\u52bf\u80fd\u3002

\u6839\u636e property 3\uff0c\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5e76\u975e\u6240\u6709\u8282\u70b9\u90fd\u6536\u5230\u5f71\u54cd\u3002\u6211\u4eec\u53ef\u4ee5\u5355\u72ec\u8bb0\u5f55 \\(l_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 light node \u6570\u91cf\uff0c\\(h_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff0c\\(h^0_{x}\\) \u4e3a \\(H_x\\) \u6240\u6709\u4e0d\u5728\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff08\u5373 \\(\\text{count of heavy nodes of } H_x = H_x + H^0_x\\)\uff09\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4e0a\u5f0f\u5199\u5f00\uff1a

\\[ \\left\\{ \\begin{aligned} c &= l_x + h_x + l_y + h_y &(1)\\\\ \\Phi(H_{merged}) &\\leq l_x + h^0_x + l_y + h^0_y &(2)\\\\ \\Phi(H_x) &= h_x + h^0_{x} &(3)\\\\ \\Phi(H_y) &= h_y + h^0_{y} &(4) \\end{aligned} \\right. \\]

\u5176\u4e2d\u7a0d\u5fae\u505a\u4e00\u4e9b\u89e3\u91ca\uff1a

  1. \\((1)\\)\uff1a\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\u5373\u6211\u4eec\u7684\u679a\u4e3e\u6d89\u53ca\u4e86\u4e24\u4e2a\u5806\u6240\u6709\u7684\u53f3\u4fa7\u8def\u5f84\uff1b
  2. \\((2)\\)\uff1a\u5728\u5408\u5e76\u64cd\u4f5c\u4ee5\u540e\uff0c\u6839\u636e property 1 \u548c property 2\uff0c\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\uff1b
  3. \\((3)\\) \u548c \\((4)\\)\uff1a\u6839\u636e\u52bf\u80fd\u51fd\u6570\u7684\u5b9a\u4e49\u5f97\u5230\uff1b

\u4e8e\u662f\uff0c\u5c06\u5b83\u4eec\u4ee3\u5165\u5f97\u5230\u7ed3\u679c\uff1a

\\[ \\begin{aligned} \\hat{c} &= c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\\\ &\\leq (l_x + h_x + l_y + h_y) + (l_x + h^0_x + l_y + h^0_y) - (h_x + h^0_{x}) - (h_y + h^0_{y}) \\\\ &\\leq 2(l_x + l_y) \\\\ \\hat{c} &= O(\\log{N}) \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/","title":"Lecture 5 | Binomial Queue","text":"

\u7ea6 2196 \u4e2a\u5b57 12 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#binomial-queue","title":"Binomial Queue","text":"

\u5806\u7684\u5176\u4e2d\u4e00\u4e2a\u5e94\u7528\u5c31\u662f\u4f18\u5148\u961f\u5217\u3002\u672c\u8282\u8981\u4ecb\u7ecd\u7684\u4e8c\u9879\u961f\u5217(Binomial Queue)\u4e5f\u662f\u4f18\u5148\u961f\u5217\u7684\u4e00\u79cd\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e\u4e4b\u524d\u6211\u4eec\u7528\u4e00\u4e2a\u5806\u7ef4\u62a4\u4f18\u5148\u961f\u5217\uff0c\u4e8c\u9879\u961f\u5217\u540c\u65f6\u7ef4\u62a4\u4e86\u5177\u6709\u4e0d\u540c\u7279\u5f81\u7684\u82e5\u5e72\u961f\u5217\u3002

link

Wikipedia: https://en.wikipedia.org/wiki/Binomial_heap

YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns \uff08\u867d\u7136\u8fd9\u4e2a\u89c6\u9891\u662f\u8bb2\u89e3\u6590\u6ce2\u90a3\u5951\u5806\u7684\uff0c\u4f46\u662f\u4e2d\u95f4\u5148\u8bb2\u4e86\u4e8c\u9879\u5806\u3002\uff09

\u5b66\u4e60\u5efa\u8bae

\u5728\u6b63\u5f0f\u5f00\u59cb\u672c\u8282\u5185\u5bb9\u4e4b\u524d\uff0c\u8bf7\u5e26\u7740\u8fd9\u6837\u4e00\u4e2a\u5ff5\u5934\uff1a\u5c3d\u529b\u601d\u8003\u4e8c\u9879\u961f\u5217\u4e0e\u4e8c\u8fdb\u5236\u7684\u5173\u7cfb\u3002

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

\u4e8c\u9879\u961f\u5217(Binomial Queue)\u672c\u8d28\u4e0a\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\u3002\u6240\u4ee5\u6211\u4eec\u9996\u5148\u7ed9\u5b9a\u4e8c\u9879\u6811(Binomial Tree)\u7684\u5b9a\u4e49\uff1a

Binomial Tree

\u4e8c\u9879\u6811\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373 parent \u8282\u70b9\u7684\u503c\u5c0f\u4e8e\uff08\u5927\u4e8e\uff09 child \u8282\u70b9\u7684\u503c\u3002

\u4e00\u4e2a\u975e\u5e38\u5173\u952e\u7684\u6027\u8d28\u662f\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u90fd\u662f\u540c\u6784\u7684\uff0c\u4e14 \\(k\\) \u9636\u4e8c\u9879\u6811\u662f\u4e24\u4e2a \\(k-1\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u5f97\u5230\u7684\u3002\u800c\u5176\u5408\u5e76\u65b9\u5f0f\u662f\u76f4\u63a5\u4ee4\u5176\u4e2d\u4e00\u68f5\u6210\u4e3a\u53e6\u5916\u4e00\u68f5\u7684\u6839\u7684\u65b0 child\uff0c\u8fd9\u4e5f\u51b3\u5b9a\u4e86\u4e8c\u9879\u6811\u7684\u6839\u6bcf\u4e00\u4e2a child \u672c\u8eab\u4e5f\u90fd\u662f\u4e00\u4e2a\u4e8c\u9879\u6811\u3002

\u663e\u7136\u80fd\u591f\u5f97\u5230\uff0c\u4e8c\u9879\u6811\u5e76\u975e\u4e8c\u53c9\u6811\uff1b\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811 \\(B_k\\) \u7684\u6839\u6709 \\(k\\) \u4e2a child\uff0c\\(2^k\\) \u4e2a\u8282\u70b9\uff1b\u518d\u8fdb\u4e00\u6b65\u7684\uff0c\\(B_k\\) \u7684\u7b2c \\(d\\) \u5c42\u4e00\u5171\u6709 \\(C_k^d = \\binom{k}{d}\\) \u4e2a\u8282\u70b9\uff0c\u6709\u8da3\u7684\u662f\uff0c\u6240\u6709\u5c42\u7684\u8282\u70b9\u52a0\u8d77\u6765\u521a\u597d\u7b26\u5408\u4e8c\u9879\u5f0f\u5b9a\u7406\uff0c\u6b64\u6761\u5b9a\u7406\u53ef\u4ee5\u7531\u6570\u5b66\u5f52\u7eb3\u6cd5\u5f88\u5bb9\u6613\u5730\u8bc1\u660e\uff0c\u4e0d\u518d\u8d58\u8ff0\u3002

\u5173\u4e8e\u5b9e\u73b0

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e8c\u9879\u6811\u662f\u4e00\u4e2a \\(N\\) \u53c9\u6811\uff0c\u6240\u4ee5\u901a\u5e38\u6211\u4eec\u4f7f\u7528\u94fe\u8868 sibling \u7684\u5f62\u5f0f\u6765\u8868\u793a\u4e00\u4e2a\u8282\u70b9\u7684 children\u3002

\u518d\u5bf9\u4e8c\u9879\u6811\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u603b\u7ed3\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u7ed3\u6784\u552f\u4e00\u786e\u5b9a\uff0c\u4e24\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u540e\u5f97\u5230\u4e00\u4e2a \\(k+1\\) \u9636\u4e8c\u9879\u6811\uff0c\u800c\u4e8c\u9879\u6811\u672c\u8eab\u4e5f\u5177\u6709\u5806\u7684\u6027\u8d28\u3002

\u4f46\u662f\uff0c\u867d\u7136\u4e8c\u9879\u6811\u5177\u6709\u5806\u7684\u6027\u8d28\uff0c\u770b\u4f3c\u80fd\u72ec\u7acb\u5b8c\u6210\u4f18\u5148\u961f\u5217\u7684\u529f\u80fd\uff0c\u4f46\u662f\u4e8c\u9879\u6811\u5bf9\u70b9\u7684\u6570\u91cf\u5177\u6709\u6bd4\u8f83\u4e25\u683c\u7684\u8981\u6c42\uff0c\u53ea\u6709\u70b9\u7684\u6570\u91cf\u7b26\u5408 \\(2^k\\) \u65f6\uff0c\u624d\u80fd\u4f7f\u7528\u4e8c\u9879\u6811\u8868\u793a\u3002\u56e0\u6b64\uff0c\u89c2\u5bdf\u4e00\u4e2a\u4e8c\u9879\u6811\u80fd\u627f\u8f7d\u7684\u70b9\u7684\u6570\u91cf\u7279\u5f81\uff0c\u6211\u4eec\u8054\u60f3\u5230\u4e8c\u8fdb\u5236\u5bf9\u6570\u7684\u8868\u793a\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u7cfb\u5217\u4e8c\u9879\u6811\u6765\u7ef4\u62a4 \\(N\\) \u4e2a\u8282\u70b9\u7684\u4f18\u5148\u961f\u5217\uff0c\u800c\u5177\u4f53\u7528\u51e0\u9636\u4e8c\u9879\u6811\uff0c\u5219\u53d6\u51b3\u4e8e \\(N\\) \u7684\u4e8c\u8fdb\u5236\u8868\u8fbe\u4e2d\uff0c\u4e3a 1 \u7684\u662f\u54ea\u51e0\u4f4d\u3002

Binomial Queue

\u4e8c\u9879\u961f\u5217(Binomial Queue)\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\uff0c\u5176\u4e2d\u6bcf\u4e2a\u4e8c\u9879\u6811\u7684\u9636\u6570 \\(k\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u53cd\u8fc7\u6765\u8bb2\u8fd9\u53e5\u8bdd\uff0c\u96c6\u5408\u4e2d \\(k\\) \u9636\u7684\u4e8c\u9879\u6811\u8981\u4e48\u53ea\u6709\u4e00\u4e2a\uff0c\u8981\u4e48\u6ca1\u6709\u3002

\ud83c\udf30

\u9898\u76ee\u5b9e\u73b0\u7684\u4e8c\u9879\u961f\u5217\u4e0d\u4e00\u5b9a\u6709 min \u6307\u9488\uff01\u6ce8\u610f\u9762\u5411\u9898\u9762\u548c\u9009\u9879\u5224\u65ad\u5b9e\u73b0\u3002

\u800c\u4e3a\u4f55\u8981\u8fd9\u4e48\u8bbe\u8ba1\u4e8c\u9879\u961f\u5217\u7684\u7ed3\u6784\uff0c\u5177\u4f53\u4f53\u73b0\u5728\u64cd\u4f5c\u7684\u8bbe\u8ba1\u4e2d\u3002

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

\u5728\u4e8c\u9879\u961f\u5217\u4e2d\uff0c\u5408\u5e76\u662f\u4e00\u4e2a\u975e\u5e38\u57fa\u7840\u7684\u64cd\u4f5c\uff0c\u4e5f\u662f\u7cbe\u9ad3\u6240\u5728\u3002

\u800c\u4e3a\u4e86\u611f\u53d7\u8fd9\u4e9b\u64cd\u4f5c\u7684\u7cbe\u9ad3\uff0c\u5728\u7406\u89e3\u4e8c\u9879\u961f\u5217\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u4ee5\u8bd5\u56fe\u4ece\u4e24\u4e2a\u7eac\u5ea6\u540c\u65f6\u7406\u89e3\u8fd9\u4e9b\u64cd\u4f5c\uff1a

  1. \u6811/\u5806\u7684\u7eac\u5ea6\uff0c\u5177\u4f53\u89c2\u5bdf\u6570\u636e\u7684\u8f6c\u79fb\u4e0e\u53d8\u5316\u8fc7\u7a0b\uff1b
  2. \u4e8c\u8fdb\u5236\u7684\u7eac\u5ea6\uff0c\u5c06 \\(k\\) \u9636\u4e8c\u9879\u6811\u62bd\u8c61\u4e3a bit vector \u7b2c \\(k\\) \u4f4d\u7684 1\uff0c\u4ece\u4e8c\u8fdb\u5236\u52a0\u6cd5\u7684\u89d2\u5ea6\u7406\u89e3\uff1b

\u4e3a\u4e86\u65b9\u4fbf\u540e\u9762\u9610\u8ff0\uff0c\u6211\u4eec\u7b80\u5355\u505a\u4e00\u4e0b\u8bf4\u660e\uff1a

\u7279\u5f81\u6bd4\u7279\u5411\u91cf

\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9a\u4e49\u5b83\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\uff08\u6211\u81ea\u5df1\u53e3\u80e1\u7684\u4e1c\u897f\uff0c\u4e0d\u662f\u672f\u8bed\uff09\u662f\u5b83\u7684\u5143\u7d20\u6570\u91cf\u7684\u4e8c\u8fdb\u5236\u8868\u793a\uff08\u53cd\u8fc7\u6765\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u771f\u503c\u8868\u793a\u961f\u5217\u4e2d\u7684\u5143\u7d20\u6570\u91cf\uff09\u3002

\ud83c\udf30

\u4f8b\u5982\u4e0b\u56fe\u7684\u4f8b\u5b50\uff0c\u4e00\u5171\u6709 11 \u4e2a\u8282\u70b9\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u521a\u597d\u5bf9\u5e94 \\(B_3\\) \\(B_1\\) \\(B_0\\)\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u8c61\u5f81\u4e86\u4e8c\u9879\u961f\u5217\u7684\u96c6\u5408\u4e2d\u6709\u54ea\u51e0\u9636\u7684\u4e8c\u9879\u6811\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u5217\u5408\u5e76","title":"\u961f\u5217\u5408\u5e76","text":"

\u5408\u5e76\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5408\u5e76\u4e24\u4e2a\u96c6\u5408\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5206\u522b\u5408\u5e76\u6bcf\u4e00\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\uff0c\u5f53\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u90fd\u5b58\u5728 \\(k\\) \u9636\u4e8c\u9879\u6811\u65f6\uff0c\u5b83\u4eec\u5408\u5e76\u4e3a\u4e00\u68f5 \\(k+1\\) \u9636\u4e8c\u9879\u6811\u3002\u53ef\u4ee5\u8054\u60f3\uff0c\u8fd9\u9879\u64cd\u4f5c\u201c\u5bf9\u5e94\u201d\u7740\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u76f8\u52a0\uff0c\u800c\u5408\u5e76\u64cd\u4f5c\u5219\u7c7b\u4f3c\u4e8e\u8fdb\u4f4d\u3002

\u56e0\u6b64\uff0c\u5b83\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a 1bit \u7684\u5168\u52a0\u5668\u3002

graph LR;\nA([\"T1.B[k]\"])\nB([\"T2.B[k]\"])\nC([\"T.carry[k-1]\"])\nD([\"T.result[k]\"])\nE([\"T.carry[k]\"])\nADD[\"Adder\"]\nA ---> ADD\nB ---> ADD\nC ---> ADD\nADD ---> D\nADD ---> E

\u4e8e\u662f\uff0c\u6839\u636e\u4e00\u4e2a carry \u4f4d\u3001\u4e00\u4e2a\u88ab\u5408\u5e76\u6811\u548c\u4e00\u4e2a\u5408\u5e76\u6811\u7684\u60c5\u51b5\uff0c\u6709\u4e00\u5171 \\(2^3=8\\) \u79cd\u53ef\u80fd\u3002

\ud83c\udf30

\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u8fd9\u6837\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u9700\u8981\u5408\u5e76\uff1a

\u5219\u5176\u5408\u5e76\u7684\u64cd\u4f5c\u53ef\u4ee5\u8fd9\u6837\u63cf\u8ff0\u3002

\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

\u7eff\u8272\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u84dd\u8272\u7684\u4e3a 1001\uff0c\u4e24\u8005\u76f8\u52a0\u5f97\u5230 10100\u3002

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

\\(B_0\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_0\\) \u548c \\(T_{blue}.B_0\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_0\\)\uff0c\\(T.R_0\\) \u4e3a\u7a7a\u3002

\\(B_1\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\) \u548c \\(T.C_0\\) \u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_1\\)\uff0c\\(T.R_1\\) \u4e3a\u7a7a\u3002

\\(B_2\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_1\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_2 = T.C_1\\)\uff0c\\(T.C_2\\) \u4e3a\u7a7a\u3002

\\(B_3\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\)\uff0c\\(T_{blue}.B_1\\) \u548c \\(T.C_2\\) \u90fd\u4e0d\u5b58\u5728\uff0c\u6240\u4ee5 \\(T.R_3\\) \u4e3a\u7a7a\uff0c\\(T.C_1\\) \u4e3a\u7a7a\u3002

\\(B_4\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_4\\) \u548c \\(T.C_3\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_4\\)\uff0c\\(T.R_4\\) \u4e3a\u7a7a\u3002

\\(B_5\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_4\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_5 = T.C_4\\)\uff0c\\(T.C_5\\) \u4e3a\u7a7a\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

\u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u67e5\u8be2\u961f\u9996","title":"\u67e5\u8be2\u961f\u9996","text":"

\u4e8c\u9879\u961f\u5217\u7684\u961f\u9996\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a\u961f\u5217\u7684\u6700\u5c0f\u503c\uff08\u6700\u5927\u503c\uff09\uff0c\u5c31\u662f\u8fd9\u82e5\u5e72\u4e2a\uff08\\(O(\\log N)\\) \u4e2a\uff09\u4e8c\u9879\u6811\u7684\u6839\u4e2d\u6700\u5c0f\uff08\u6700\u5927\uff09\u7684\u90a3\u4e2a\u3002\u6240\u4ee5\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

\u4e0d\u8fc7\u6709\u65f6\u5019\u6211\u4eec\u4e5f\u4f1a\u989d\u5916\u7ef4\u62a4\u4e00\u4e2a\u6307\u9488\uff0c\u6307\u5411\u5f53\u524d\u6700\u5c0f\u7684\u90a3\u4e2a\u6839\uff0c\u6b64\u65f6\u5176\u590d\u6742\u5ea6\u4e3a \\(O(1)\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u9996\u51fa\u961f","title":"\u961f\u9996\u51fa\u961f","text":"

\u961f\u9996\u51fa\u961f\u9996\u5148\u8981\u627e\u5230\u961f\u9996\uff0c\u8fd9\u4ef6\u4e8b\u6211\u4eec\u5728#\u67e5\u8be2\u961f\u9996\u5df2\u7ecf\u8ba8\u8bba\u8fc7\u4e86\u3002

\u627e\u5230\u961f\u9996\u540e\uff0c\u6211\u4eec\u5c06\u5176\u4ece\u4e8c\u9879\u961f\u5217\u4e2d\u79fb\u9664\uff0c\u6211\u4eec\u77e5\u9053\uff0c\u961f\u9996\u5fc5\u7136\u662f\u67d0\u4e2a\u4e8c\u9879\u6811\u7684\u6839\uff0c\u6240\u4ee5\u5220\u6389\u8fd9\u4e2a\u961f\u9996\u4ee5\u540e\uff0c\u5c31\u4f1a\u4ea7\u751f \\(k\\) \u4e2a\u65b0\u7684\u5b50\u6811\u3002

\u800c\u8ba9\u6211\u4eec\u56de\u987e\u4e8c\u9879\u6811\u7684\u5408\u5e76\u8fc7\u7a0b\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u6240\u4ee5\u5f53\u6211\u4eec\u5220\u6389\u8fd9\u4e2a\u6839\uff0c\u4ea7\u751f\u7684\u6240\u6709\u5b50\u6811\u90fd\u662f\u4e8c\u9879\u6811\u3002

\u56e0\u6b64\u6211\u4eec\u8054\u60f3\u5230\uff0c\u5c06\u961f\u9996\u51fa\u961f\u95ee\u9898\u8f6c\u5316\u4e3a\u5408\u5e76\u4e8c\u9879\u961f\u5217\u7684\u95ee\u9898\u2014\u2014\u5047\u8bbe \\(T\\) \u7684\u961f\u9996\u662f \\(B_k\\) \u7684\u6839\uff0c\u5219\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u6c42\u89e3 \\(merge(T-B_k, B_k.root.children)\\) \u7684\u95ee\u9898\u3002

\ud83c\udf30

\u5047\u8bbe\u6211\u4eec\u6709\u5982\u4e0b\u7684\u4e8c\u9879\u961f\u5217\uff0c\u73b0\u5728\u8fdb\u884c\u5f39\u51fa\u961f\u9996\u7684\u64cd\u4f5c\u3002

\u7279\u5f81\u6bd4\u7279\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

\u5982\u4e0a\u961f\u5217\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 10100\uff0c\u5171 20 \u4e2a\u8282\u70b9\u3002\u73b0\u5728\u5220\u6389\u4e00\u4e2a\uff0c\u5e94\u5f53\u6709 19 \u4e2a\u8282\u70b9\u3002

\u66f4\u5177\u4f53\u7684\uff0c10100 = 10000 + 100\uff0c\u5206\u522b\u4ee3\u8868\u4e24\u4e2a\u4e8c\u9879\u6811\uff0c\u800c\u6211\u4eec\u7684\u6700\u5c0f\u503c\u662f\u4ece 10000 \u6240\u4ee3\u8868\u7684\u6811\u91cc\u5220\u9664\u7684\uff0c\u6240\u4ee5\u65b0\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a\uff1a(10000 - 1) + 100 = 1111 + 100 = 10011\uff0c\u5373 19 \u4e2a\u3002

\u6ce8\u610f\u89c2\u5bdf\u8fd9\u91cc 10000 - 1 = 1111 \u7684\u53d8\u5316\uff0c\u5bfb\u627e\u5b83\u4e0e\u5177\u4f53\u89c6\u89d2\u4e2d\u7684\u5173\u7cfb\u3002

Frame 1Frame 2Frame 3Frame 4

\u9996\u5148\u627e\u5230\u961f\u9996\uff0c\u5373\u6b64\u65f6 min \u6307\u9488\u6307\u5411\u7684\u5730\u65b9\u3002\u89c2\u5bdf\u5b83\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u53d1\u73b0\u5b83\u5177\u6709\u56db\u4e2a\u5b50\u6811\uff0c\u5206\u522b\u662f \\(B_0 \\sim B_3\\)\uff0c\u5bf9\u5e94\u4e86\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u300c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\u300d\u3002

\u4e8e\u662f\u6211\u4eec\u5c06\u8fd9\u4e2a\u5b50\u6811\u63d0\u53d6\u51fa\u6765\uff0c\u5c06\u539f\u672c\u7684\u4e8c\u9879\u961f\u5217\u62c6\u6210\u4e3a\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u3002

\u73b0\u5728\u6211\u4eec\u5220\u9664\u201c\u961f\u9996\u201d\uff0c\u53d1\u73b0\u90a3\u68f5\u6811\u5206\u88c2\u6210\u4e86\u56db\u4e2a\u8fde\u7eed\u7684\u4e8c\u9879\u6811\uff0810000 - 1 = 1111\uff09\u3002

\u73b0\u5728\u95ee\u9898\u5c31\u8f6c\u5316\u4e3a\u4e86\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u5408\u5e76\u7684\u95ee\u9898\u3002\u5728\u6b64\u7701\u7565\u3002

\u6ce8\u610f\u89c2\u5bdf\u5b8c\u6210\u7684\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u548c\u4e0a\u9762\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u7684\u7ed3\u679c\u3002

\u63d0\u793a

\u652f\u6301\u7740\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8fd9\u6837\u8fdb\u884c\u7684\u6027\u8d28\u5c31\u662f\uff0c\u6bcf\u4e00\u4e2a\u4e8c\u9879\u6811\u7684\u6839\u7684 children \u672c\u8eab\u4e5f\u90fd\u662f\u4e8c\u9879\u6811\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#project-fibonacci-queue","title":"Project: Fibonacci Queue","text":"

Link

YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/","title":"Lecture 6 | Backtracing","text":"

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

link

OI Wiki: https://oi-wiki.org/search/backtracking/

Wikipedia: https://en.wikipedia.org/wiki/Backtracking

\u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u6bd4\u8f83\u6563\uff0c\u56e0\u4e3a\u56de\u6eaf\u662f\u4e00\u4e2a\u5f88\u57fa\u7840\u800c\u4e14\u5f88\u6cdb\u7528\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u611f\u89c9\u600e\u4e48\u8bb2\u90fd\u4e0d\u592a\u5408\u9002\u3002\u66f4\u591a\u7684\u662f\u9700\u8981\u5728\u5177\u4f53\u95ee\u9898\u3001\u5177\u4f53\u6a21\u578b\u4e2d\u53bb\u4f53\u4f1a\u3002

\u52a0\u4e0a\u5982\u679c\u6bcf\u4e00\u4e2a\u5185\u5bb9\u90fd\u8981\u5f80\u6b7b\u91cc\u53bb\u53d9\u8ff0\u7684\u8bdd\u5b9e\u5728\u592a\u7d2f\u4e86\uff0c\u6240\u4ee5\u56de\u6eaf\u8fd9\u4e00\u7ae0\u60f3\u5077\u4e2a\u61d2\uff0c\u5c31\u7b80\u5355\u8bb0\u5f55\u4e00\u4e0b\u8bfe\u4e0a\u63d0\u5230\u8fc7\u7684\u4e00\u4e9b\u6a21\u578b\u5427\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u516b\u7687\u540e","title":"\u516b\u7687\u540e","text":"

\u975e\u5e38\u7ecf\u5178\u7684\u95ee\u9898\uff0c\u76f8\u4fe1\u63a5\u89e6\u8fc7\u7b97\u6cd5\u7684\u540c\u5b66\u57fa\u672c\u4e0a\u90fd\u7ed5\u4e0d\u5f00\u8fd9\u4e2a\u4e1c\u897f\u3002

link

Wikipedia: https://en.wikipedia.org/wiki/Eight_queens_puzzle

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u6848\u4f8b-the-turnpike-reconstruction-problem","title":"[\u6848\u4f8b] The Turnpike Reconstruction Problem","text":"

\u6536\u8d39\u7ad9\u91cd\u5efa\u95ee\u9898(The Turnpike Reconstruction Problem)\u63cf\u8ff0\u7684\u662f\u4e00\u6761\u88ab\u62bd\u8c61\u4e3a\u76f4\u7ebf\u7684\u516c\u8def\u4e0a\uff0c\u6709 \\(N\\) \u4e2a\u6536\u8d39\u7ad9\uff08\\(x_1, x_2, ..., x_N\\)\uff09\u3002\u73b0\u5728\u7ed9\u51fa\u4efb\u610f\u4e24\u4e2a\u6536\u8d39\u7ad9\u4e4b\u95f4\u7684\u8ddd\u79bb\u7684\u53ef\u91cd\u96c6\u5408 \\(D\\)\uff0c\uff08\u53ef\u60f3\u800c\u77e5\uff0c\u4e00\u5171\u6709 \\(\\frac{N(N-1)}{2}\\) \u4e2a\u5143\u7d20\uff09\uff0c\u6c42\u6536\u8d39\u7ad9\u7684\u4f4d\u7f6e\uff0c\u5373\u7ed9\u5b9a\u4efb\u610f\u4e24\u70b9\u7684\u8ddd\u79bb\u96c6\u5408\uff0c\u6c42\u51fa\u8fd9\u4e9b\u70b9\u7684\u5750\u6807\u3002

solution

\u5927\u6982\u601d\u8def\u5c31\u662f\uff0c\u9996\u5148\u5047\u8bbe \\(x_1 = 0\\)\uff0c\u90a3\u4e48\u5f88\u663e\u7136 \\(x_N = \\mathop{max} \\{D\\}\\)\u3002\u540c\u65f6\u6211\u4eec\u4e5f\u5f97\u5230\u8fd9\u6761\u7ebf\u6bb5\u7684\u957f\u5ea6\u4e3a \\(\\mathop{max} \\{D\\}\\)\u3002\u63a5\u4e0b\u6765 \\(D\\) \u4e2d\u4ece\u5927\u5230\u5c0f\u53d6\u51fa\u5143\u7d20\uff0c\u5219\u5fc5\u5b9a\u8ffd\u52a0\u5728 \\(x_1\\) \u53f3\u4fa7\u6216 \\(x_N\\) \u5de6\u4fa7\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002\uff08\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\u5728\u5b8c\u5168\u5b89\u6392\u597d\u4e4b\u524d\u90fd\u662f\u8ffd\u52a0\u5728\u5de6\u4fa7\u6216\u8005\u53f3\u4fa7\u7684\u65e2\u5b9a\u8fb9\u754c\u4e4b\u95f4\u7684\uff09\u3002\u800c\u6bcf\u4e00\u6b21\u8ffd\u52a0\u7684\u9009\u62e9\u90fd\u4ee3\u8868\u51b3\u7b56\u6811\u4e2d\u7684\u4e00\u4e2a\u5206\u652f\uff0c\u53ef\u4ee5\u5229\u7528\u5176\u5b83\u6761\u4ef6\u8fdb\u884c\u526a\u679d\uff08\u4f8b\u5982 \\(D\\) \u4e2d\u6709 \\(x_p - x_0\\) \u5c31\u4e00\u5b9a\u6709 \\(x_N - x_p\\)\uff09\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u0251-\u03b2-\u526a\u679d","title":"\u0251-\u03b2 \u526a\u679d","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/","title":"Lecture 7 | Divide & Conquer","text":"

\u7ea6 3626 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 12 \u5206\u949f

\u611f\u89c9\u8fd9\u51e0\u8282\u8bfe\u4e0a\u7684\u5185\u5bb9\u90fd\u633a\u5bbd\u6cdb\u7684\u554ax

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm

\u5957\u7528 Wiki \u4e0a\u7684\u8bf4\u6cd5\uff0c\u5206\u6cbb\u6cd5(Divide-and-conquer algorithm)\u5c5e\u4e8e\u4e00\u79cd\u7b97\u6cd5\u8303\u578b\uff0c\u5b83\u7684\u57fa\u672c\u601d\u60f3\u662f\u5c06\u4e00\u4e2a\u95ee\u9898\u5206\u89e3\u4e3a\u82e5\u5e72\u4e2a\u89c4\u6a21\u8f83\u5c0f\u7684\u76f8\u540c\u95ee\u9898\uff0c\u7136\u540e\u9012\u5f52\u5730\u89e3\u51b3\u8fd9\u4e9b\u5b50\u95ee\u9898\uff0c\u6700\u540e\u5c06\u8fd9\u4e9b\u5b50\u95ee\u9898\u7684\u89e3\u5408\u5e76\u5f97\u5230\u539f\u95ee\u9898\u7684\u89e3\uff0c\u4e00\u4e2a\u6bd4\u8f83\u7ecf\u5178\u7684\u6848\u4f8b\u5c31\u662f\u5f52\u5e76\u6392\u5e8f\u3002

\u672c\u8282\u7684\u91cd\u70b9\u5b9e\u9645\u4e0a\u4e5f\u5e76\u4e0d\u662f\u805a\u7126\u4e8e\u5206\u6cbb\u672c\u8eab\uff0c\u800c\u662f\u5176\u590d\u6742\u5ea6\u5206\u6790\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6848\u4f8b-closet-points-problem","title":"[\u6848\u4f8b] Closet Points Problem","text":"

\u4e8c\u7ef4\u6700\u8fd1\u70b9\u95ee\u9898(Closet Points Problem)\uff0c\u6307\u7684\u662f\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684 n \u4e2a\u70b9\uff0c\u627e\u51fa\u5176\u4e2d\u8ddd\u79bb\u6700\u8fd1\u7684\u4e24\u4e2a\u70b9\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6734\u7d20\u65b9\u6cd5","title":"\u6734\u7d20\u65b9\u6cd5","text":"

\u6700\u6734\u7d20\u7684\u505a\u6cd5\u5f53\u7136\u662f\u679a\u4e3e\u6240\u6709\u7684\u70b9\u5bf9\uff0c\u4e00\u5171\u9700\u8981 \\(C_{N}^{2} = {{N}\\choose{2}} = \\frac{N(N-1)}{2}\\) \u5373\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5206\u6cbb\u65b9\u6cd5","title":"\u5206\u6cbb\u65b9\u6cd5","text":"

\u73b0\u5728\u6211\u4eec\u7c7b\u6bd4\u6700\u5927\u5b50\u5e8f\u5217\u548c\u95ee\u9898\u7684\u5206\u6cbb\u505a\u6cd5\u3002

\u6700\u5927\u5b50\u5e8f\u5217\u548c\u7684\u5206\u6cbb\u505a\u6cd5
  1. \u5c06\u5e8f\u5217\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
  2. \u6c42\u89e3\u8de8\u8d8a\u4e2d\u70b9\u7684\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
  3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5927\u503c\uff1b

\u6211\u4eec\u53ef\u4ee5\u5c06\u6574\u4e2a\u5e73\u9762\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u5982\u56fe\u4e2d\u7eff\u8272\u7ebf\u5c06\u70b9\u5bf9\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u540c\u6837\u5206\u4e3a\u8fd9\u4e48\u4e09\u6b65\uff1a

  1. \u5c06\u70b9\u5bf9\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u8fd1\u70b9\u5bf9\uff1b
  2. \u5bfb\u627e\u8de8\u8d8a\u5206\u754c\u7ebf\u7684\u70b9\u5bf9\uff0c\u4ece\u4e2d\u5bfb\u627e\u6700\u8fd1\u70b9\u5bf9\uff1b
  3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5c0f\u503c\uff1b

\u663e\u7136\uff0c\u6211\u4eec\u73b0\u5728\u9700\u8981\u89e3\u51b3\u7684\u5c31\u662f\u8981\u5982\u4f55\u8bbe\u8ba1\u7b2c\u4e8c\u6b65\u7684\u5b9e\u73b0\uff0c\u4ee5\u6c42\u66f4\u4f18\u7684\u590d\u6742\u5ea6\u3002

\u9996\u5148\u6211\u4eec\u5047\u8bbe\u5728\u7b2c\u4e00\u6b65\u4e2d\uff0c\u6211\u4eec\u6c42\u5f97\u4e24\u8fb9\u6c42\u5f97\u7684\u6700\u5c0f\u8ddd\u79bb\u4e2d\u8f83\u5c0f\u7684\u90a3\u4e2a\u4e3a \\(\\delta\\)\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u7b54\u6848\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u66f4\u65b0\uff0c\u90a3\u4e48\u5b83\u7684\u8ddd\u79bb\u9700\u8981\u5c0f\u4e8e \\(\\delta\\)\u3002\u800c\u6211\u4eec\u77e5\u9053\uff0c\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u62ff\u51fa\u6765\u7684\u70b9\u5bf9\uff0c\u4e00\u5b9a\u662f\u4e00\u4e2a\u5728\u5206\u754c\u7ebf\u5de6\u4fa7\u4e00\u4e2a\u5728\u5206\u754c\u7ebf \\(L\\) \u53f3\u4fa7\u3002\u6734\u7d20\u7684\u6765\u60f3\uff0c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5916\u7684\u70b9\u5bf9\u4e2d\uff0c\u6211\u4eec\u662f\u4e0d\u9700\u8981\u8003\u8651\u7684\u3002\u800c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5185\u7684\u70b9\uff0c\u90fd\u5b58\u5728\u6210\u4e3a\u7b54\u6848\u70b9\u5bf9\u70b9\u53ef\u80fd\u3002

\u5982\u56fe\uff0c\u73b0\u5728\u6211\u4eec\u77e5\u9053\uff0c\u53ea\u6709\u843d\u5728\u4e24\u6761\u6df1\u7eff\u8272\u4e4b\u95f4\u7684\u70b9\u624d\u53ef\u80fd\u4f1a\u66f4\u65b0\u7b54\u6848\u3002

\u73b0\u5728\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\uff0c\u4ece\u5206\u754c\u7ebf\u5de6\u4fa7\u7684\u533a\u57df\u91cc\u62ff\u4e00\u4e2a\u70b9\uff0c\u548c\u5206\u754c\u7ebf\u53f3\u8fb9\u7684\u4e00\u4e2a\u70b9\u505a\u5339\u914d\uff0c\u7136\u540e\u53d6\u6240\u6709\u7ed3\u679c\u4e2d\u7684\u6700\u5c0f\u70b9\u3002\u4e0d\u8fc7\u8fd9\u4ef6\u4e8b\u4ecd\u7136\u53ef\u4ee5\u4f18\u5316\u2014\u2014\u5728\u4e8c\u7ef4\u7684\u6570\u636e\u4e2d\uff0c\u4ec5\u5bf9\u4e00\u4e2a\u7eac\u5ea6\u505a\u7ea6\u675f\u5f80\u5f80\u4f1a\u5bfc\u81f4\u4e8b\u60c5\u53d8\u5f97\u4e0d\u90a3\u4e48\u7a33\u5b9a\uff0c\u6240\u4ee5\u6211\u4eec\u540c\u6837\u8003\u8651\u5728\u53e6\u5916\u4e00\u4e2a\u65b9\u5411\u505a\u7ea6\u675f\u3002

\u4e5f\u662f\u57fa\u4e8e\u8303\u56f4\u7ea6\u675f\u7684\u8003\u8651\u3002\u5047\u8bbe\u6211\u4eec\u4ee5\u5de6\u4fa7\u7684\u70b9\u4e3a\u57fa\u51c6\uff0c\u4ece\u4e0a\u5f80\u4e0b\u505a\u904d\u5386\u8fd9\u4e9b\u70b9\uff0c\u90a3\u4e48\u5bf9\u4e8e\u70b9 \\(p_{l_i}\\)\uff0c\u5177\u6709\u80fd\u591f\u66f4\u65b0\u7b54\u6848\u7684\uff0c \\(\\mathop{dis} (p_{l_i}, p_{r_j}) \\leq \\delta\\) \u7684 \\(p_{r_j}\\)\uff0c\u4e00\u5b9a\u6709 \\(\\mathop{dis_{\\parallel bound}}(p_{l_i}, p_{r_j}) \\leq \\delta\\)\uff08\u76f4\u89d2\u4e09\u89d2\u5f62\u659c\u8fb9\u6700\u957f\uff09\u3002

\u56e0\u6b64\uff0c\u5bf9\u4e8e\u9009\u5b9a\u70b9 \\(p_{l_i}\\)\uff0c\u5176\u6240\u6709\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u90fd\u88ab\u6846\u5b9a\u5728\u4e00\u4e2a \\(2\\delta \\times \\delta\\) \u7684\u77e9\u5f62\u4e2d\u3002

\u800c\u66f4\u5947\u5999\u7684\u662f\uff0c\u8fd9\u4e2a\u7531\u53c2\u6570 \\(\\delta\\) \u6307\u5b9a\u7684\u77e9\u5f62\uff0c\u5de7\u5999\u5730\u7ea6\u675f\u4e86\u843d\u5728\u77e9\u5f62\u4e2d\u7684\u70b9\u7684\u6700\u5927\u6570\u91cf\u3002

\u5728\u8fd9\u6837\u4e00\u4e2a\u533a\u57df\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u7ea6\u675f\u6240\u6709\u843d\u5728 \\(\\delta \\times \\delta\\) \u7684 L \u533a\u57df\u4e2d\u7684\u70b9\uff0c\u4e92\u76f8\u7684\u8ddd\u79bb\u90fd\u5927\u4e8e\u7b49\u4e8e \\(\\delta\\)\uff0c\u5bf9 R \u533a\u57df\u4e2d\u7684\u70b9\u4e5f\u6709\u76f8\u540c\u7684\u7ea6\u675f\u3002\u4e0d\u96be\u53d1\u73b0\uff0c\u5728\u6700\u7406\u60f3\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u2014\u2014\u95ed\u533a\u95f4\u3001\u5141\u8bb8\u70b9\u91cd\u5408\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u77e9\u5f62\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516b\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u56db\u4e2a\uff09\uff1a

\u800c\u66f4\u4e00\u822c\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516d\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u4e09\u4e2a\uff09\u3002

\u65e0\u8bba\u5982\u4f55\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7ed3\u8bba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u9009\u5b9a\u7684 \\(p_{l_i}\\)\uff0c\u5bfb\u627e\u5176\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u7684\u590d\u6742\u5ea6\u90fd\u662f\u5e38\u6570\u7ea7\u7684\u3002

\u800c\u679a\u4e3e\u8fd9\u4e9b\u201c\u9009\u5b9a\u70b9\u201d\uff0c\u4e5f\u5c31\u662f\u679a\u4e3e \\(p_{l_i}\\)\uff0c\u5176\u590d\u6742\u5ea6\uff08\u6491\u6b7b\uff09\u662f \\(O(N)\\)\u3002

\u4e8e\u662f\u6211\u4eec\u80fd\u5f97\u5230\u8fd9\u4e2a\u5206\u6cbb\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8ba1\u7b97\u9012\u63a8\u516c\u5f0f\uff1a

\\[ T(N) = \\underbrace{2\\; T(\\frac{N}{2})}_{\\text{Step 1. divide}} + \\underbrace{O(N)}_{\\text{Step 2. across}} = O(N\\log N) \\]

\u800c\u6211\u4eec\u63a5\u4e0b\u6765\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u5982\u4f55\u901a\u8fc7\u8fd9\u4e2a\u9012\u63a8\u5f0f\u5f97\u5230\u7ed3\u679c\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u590d\u6742\u5ea6\u5206\u6790","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

\u5728\u5f00\u59cb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u51fa\u66f4\u4e00\u822c\u7684\uff0c\u6211\u4eec\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\uff0c\u5373\u6c42\u89e3\u65f6\u95f4\u590d\u6742\u5ea6\u9012\u63a8\u516c\u5f0f\u5f62\u5982\u4e0b\u5f0f\u7684\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff1a

\\[ T(N) = aT(\\frac{N}{b}) + f(N) \\;\\;\\;\\; a,b \\in Z^+ \\]

\u4f8b\u5982\uff0c\u4e0a\u9762\u7684\u6700\u8fd1\u70b9\u5bf9\u95ee\u9898\uff0c\u5c31\u662f \\(a = 2,\\; b = 2,\\; f(N) = O(N)\\) \u7684\u60c5\u51b5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4ee3\u6362\u6cd5","title":"\u4ee3\u6362\u6cd5","text":"

\u4ee3\u6362\u6cd5(substitution method)\u7684\u601d\u8def\u975e\u5e38\u76f4\u767d\uff0c\u9996\u5148\u6211\u4eec\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff08\u6bd4\u5982\u5927\u773c\u89c2\u5bdf\u6cd5\ud83d\udc40\uff09\u6765\u5f97\u5230\u4e00\u4e2a\u9884\u8bbe\u7684\u7ed3\u679c\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u4ee3\u5165\u3001\u5f52\u7eb3\u7684\u65b9\u6cd5\u6765\u8bc1\u660e\u8fd9\u4e2a\u7ed3\u679c\u3002

\u5927\u80c6\u731c\u6d4b\uff0c\u5c0f\u5fc3\u6c42\u8bc1\uff01

\ud83c\udf30

\u9898\u9762\u89e3\u7b54

\u6c42\u89e3\u590d\u6742\u5ea6\uff1a

\\[ T(N) = 2\\; T(\\frac{N}{2}) + N \\]

\u9884\u8bbe\uff1a

\\[ T(N) = O(N\\log N) \\]

\u4ee3\u5165\uff1a

\\[ T(\\frac{m}{2}) = O(\\frac{m}{2}\\log \\frac{m}{2}) \\leq c \\frac{m}{2}\\log \\frac{m}{2} \\] \\[ T(m) = 2\\; T(\\frac{m}{2}) + m \\] \\[ T(m) \\leq 2\\; c \\frac{m}{2}\\log \\frac{m}{2} + m \\leq c m \\log m \\text{ for } c \\geq 1 \\]

\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684 \\(m = 2\\) \u5f0f\u5b50\u5c31\u53ef\u4ee5\u6210\u7acb\uff0c\u7531\u5f52\u7eb3\u6cd5\u5f97\u7ed3\u8bba\u6210\u7acb\u3002

\u4e0d\u8fc7\u5f88\u663e\u7136\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u6211\u4eec\u6c42\u8bc1\u4e86\u4e00\u4e2a\u590d\u6742\u5ea6\u7684\u5047\u8bbe\u6210\u7acb\uff0c\u4f46\u5b83\u5e76\u4e0d\u4e00\u5b9a\u8db3\u591f\u7d27\uff0c\u8fd9\u662f\u731c\u89e3\u6cd5\u7684\u901a\u75c5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u9012\u5f52\u6811\u6cd5","title":"\u9012\u5f52\u6811\u6cd5","text":"

\u9012\u5f52\u6811\u6cd5(recursion-tree method)\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u901a\u8fc7\u753b\u51fa\u9012\u5f52\u6811\u6765\u5206\u6790\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5b9e\u9645\u4e0a\u548c\u76f4\u63a5\u6570\u5b66\u63a8\u7406\u7684\u533a\u522b\u4e0d\u662f\u5f88\u5927\uff0c\u4e3b\u8981\u5c31\u662f\u901a\u8fc7\u89c2\u5bdf\u9012\u5f52\u8fc7\u7a0b\u4e2d\u6570\u636e\u589e\u957f\u7684\u6a21\u5f0f\u6765\u8fdb\u884c\u5206\u6790\u3002

some mathematical tools \\[ a^{\\log_b N} = \\exp^{\\frac{\\ln N}{\\ln b} \\ln a} = \\exp^{\\frac{\\ln a}{\\ln b} \\ln N} = N^{\\log_b a} \\]

\u5c31\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u5c55\u5f00\u5f0f\u5b50\uff0c\u53ea\u4e0d\u8fc7\u901a\u8fc7\u6811\u72b6\u56fe\u7684\u5f62\u5f0f\u6216\u8bb8\u66f4\u52a0\u76f4\u89c2\u3002

\u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u5c06\u5b83\u4e0d\u65ad\u5c55\u5f00\u4ee5\u540e\uff0c\u5176\u5f62\u5f0f\u5927\u6982\u4f1a\u662f\u8fd9\u6837\uff1a

\\[ T(N) = ... = \\underbrace{\\sum_{leaf_i}^{leaves}T(N_{leaf_i})}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

\u5176\u4e2d\uff0c\u7531\u4e8e\u672b\u7aef\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u4e00\u822c\u90fd\u8db3\u591f\u5c0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a \\(T(N_{leaf_i})\\) \u90fd\u662f\u5e38\u6570\uff0c\u4e8e\u662f\u4e0a\u5f0f\u53c8\u53ef\u4ee5\u53d8\u5316\u4e3a\uff1a

\\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

\u5177\u4f53\u6765\u8bf4\u89e3\u91ca\u5176\u542b\u4e49\uff0ccombine \u90e8\u5206\u5c31\u662f\u5728\u6bcf\u4e00\u6b21\u201c\u5206\u6cbb\u201d\u7684\u5904\u7406\u65f6\u95f4\uff0c\u5982\u5408\u5e76\u5f53\u524d\u7684\u5b50\u95ee\u9898\u5206\u6cbb\u540e\u7684\u7ed3\u679c\uff0c\u4f53\u73b0\u5728\u9012\u63a8\u5f0f\u7684 \\(f(N)\\) \u90e8\u5206\uff1b\u800c conquer \u90e8\u5206\u6307\u7684\u662f\u5f53\u201c\u5206\u6cbb\u201d\u7684\u201c\u6cbb\u201d\u5728\u201c\u5206\u201d\u7684\u672b\u7aef\u7684\u4f53\u73b0\uff0c\u5373\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684\u89c4\u6a21\u7684\u95ee\u9898\uff0c\u4e0d\u518d\u9700\u8981\u7ee7\u7eed\u201c\u5206\u201d\u7684\u65f6\u5019\uff0c\u5bf9\u5176\u5904\u7406\u7684\u5f00\u9500\u3002

\u5b9e\u9645\u4e0a\u5728\u4ee3\u7801\u5c42\u9762\u8fd9\u4e24\u90e8\u5206\u53ef\u80fd\u533a\u522b\u4e0d\u5927\uff08\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5206\u652f\u7684\u4e8b\u60c5\uff09\uff0c\u4e0d\u8fc7\u5728\u6570\u5b66\u610f\u4e49\u4e0a\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\u5b50\u6c42\u89e3\u6211\u4eec\u4e00\u822c\u662f\u9700\u8981\u201c\u9996\u9879\u201d\u7684\uff0c\u6216\u8005\u8bf4\u662f\u201c\u6700\u5e95\u5c42\u201d\u7684\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5e95\u5c42\u201d\u7684\u90e8\u5206\u5c31\u662f conquer \u90e8\u5206\u3002

\u63a5\u4e0b\u6765\u7ed3\u5408 \ud83c\udf30 \u6765\u5206\u6790\u4e00\u4e0b\uff1a

\ud83c\udf30

From cy's ppt.

\\underbrace \u4e0b\u9762\u90a3\u4e2a\u7b49\u5f0f\u7684\u8bc1\u660e\u5728\u4e0a\u9762\u7684 \"some mathematical tools\"\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u6b64\u60c5\u51b5\u4e0b \\(a = 3,\\; b = 4,\\; f(N) = \\Theta(N^2)\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\u6bcf\u6b21\u5206\u4e3a \\(3\\) \u4e2a\u5b50\u95ee\u9898\uff0c\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u662f \\(\\frac{N}{4}\\)\uff0c\u800c\u5408\u5e76\u5f00\u9500\u4e3a \\(\\Theta(N^2)\\)\u3002

\u6b64\u65f6\u7531\u4e8e\u5206\u6cbb\u7684\u7b56\u7565\u662f\u76f8\u5bf9\u5747\u5300\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u5b8c\u7f8e\u4e09\u53c9\u6811\u3002

\u663e\u7136\uff0c\u6811\u9ad8\u4e3a \\(\\log_4 N\\)\uff0c\u6839\u8bb0\u4e3a \\(0\\)\uff0c\u6bcf\u4e2a\u5206\u6cbb\u8282\u70b9\u7684 combine \u5f00\u9500\u5df2\u7ecf\u6807\u6ce8\u5728\u56fe\u7684\u8282\u70b9\u4f4d\u7f6e\uff0c\u6a2a\u5411\u7bad\u5934\u6807\u8bb0\u7684\u662f\u5bf9\u8be5\u5c42\u6240\u6709\u8282\u70b9\u7684\u5f00\u9500\u7684\u6c42\u548c\u3002\u7279\u522b\u7684\uff0c\u5bf9\u4e8e\u6700\u5e95\u5c42\uff0c\u5373\u53f6\u5b50\u5c42\uff0c\u5b83\u8868\u793a\u7684\u662f conquer \u90e8\u5206\u7684\u5f00\u9500\uff08\u867d\u7136\u6211\u4e2a\u4eba\u89c9\u5f97\u6ca1\u5fc5\u8981\u533a\u5206\u8fd9\u4fe9\uff09\u3002

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u4e0b\u5f0f\u7684\u5f62\u5f0f\uff0c\u5bf9\u5176\u8fdb\u884c\u6c42\u548c\uff0c\u5f97\u5230\u56fe\u7247\u4e2d\u4e0b\u65b9\u7684\u5f0f\u5b50\u3002

\\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4e3b\u65b9\u6cd5","title":"\u4e3b\u65b9\u6cd5","text":"

link

OI Wiki: https://oi-wiki.org/basic/complexity/#\u4e3b\u5b9a\u7406-master-theorem

Wikipedia: https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)

\u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e00","title":"\u5f62\u5f0f\u4e00","text":"

Form 1

\u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

  1. \u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b
  2. \u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b
  3. \u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

\u60c5\u51b5\u4e09\u7684\u540e\u9762\u90a3\u4e2a\u6761\u4ef6\u53c8\u53eb regularity condition\u3002

\u56de\u987e\u6211\u4eec\u5728\u524d\u9762\u8bf4\u7684\u90a3\u53e5\u8bdd\uff0c\u300c\u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u300d\uff0c\u89c2\u5bdf\u4e09\u79cd\u60c5\u51b5\u7684\u533a\u5206\u6761\u4ef6\u90fd\u662f\u6bd4\u8f83 \\(f(N)\\)\uff08\u6bcf\u4e00\u6b21\u7684 combine \u5f00\u9500\uff09 \u548c \\(N^{\\log_b{a}}\\)\uff08\u5373\u6c42\u548c\u5f0f\u4e2d\u7684 conquer \u7684\u5f00\u9500\uff09\uff0c\u5f53 \\(f(N)\\) \u8db3\u591f\u5c0f\u65f6\uff0c\u4ee5 conquer \u5f00\u9500\u4e3a\u4e3b\uff08i.e. case 1\uff09\uff1b\u5f53\u8db3\u591f\u5927\u65f6\uff0c\u4ee5 combine \u4e3a\u4e3b\uff08i.e. case 3\uff09\uff1b\u800c\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\uff08i.e. case 2\uff09\u3002

examples for form 1 "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e","title":"\u8bc1\u660e","text":"

proof for form 1

\u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u9700\u8981\u4f9d\u6b21\u8bc1\u660e\uff0c\u6b64\u5904\u6211\u4eec\u4f7f\u7528\u9012\u5f52\u6811\u6cd5\u8fdb\u884c\u8bc1\u660e\u3002

\u60c5\u51b5\u4e00

\ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b

\ud83e\udea7 \u8bc1\u660e\uff1a\u6211\u4eec\u9996\u5148\u9700\u8981\u7ed8\u5236\u51fa\u5bf9\u5e94\u7684\u9012\u5f52\u6811\uff0c\u6216\u8005\u641e\u6e05\u695a\u5c55\u5f00\u540e\u7684\u60c5\u51b5\uff0c\u56e0\u4e3a\u61d2\u5f97\u753b\u56fe\u6240\u4ee5\u6211\u8fd9\u91cc\u91c7\u7528\u6587\u5b57\u53d9\u8ff0\u3002

\u6811\u9ad8 \\(\\log_b{N}\\)\uff0c\u5171 \\(\\log_b{N} + 1\\) \u5c42\uff0c\u5219\u6709\uff1a

\u5f97\u5230\u6c42\u548c\u5f0f\uff1a

\\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

\u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

\\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j O\\left(\\left(\\frac{N}{b^j}\\right)^{(\\log_b{a})-\\varepsilon}\\right)\\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} \\left(\\frac{a}{b^{(\\log_b{a})-\\varepsilon}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} (b^{\\varepsilon})^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{1\\times(1-(b^\\varepsilon)^{\\log_b{N}})}{1-b^\\varepsilon} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{N^\\varepsilon-1}{b^\\varepsilon-1} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times N^\\varepsilon \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{\\log_b{a}} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) \\end{aligned} \\]

\u81f3\u6b64\uff0c\u60c5\u51b5\u4e00\u8bc1\u660e\u5b8c\u6bd5\u3002

\u60c5\u51b5\u4e8c

\ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b

\ud83e\udea7 \u8bc1\u660e\uff1a\u524d\u9762\u7684\u90e8\u5206\u548c\u60c5\u51b5\u4e00\u7684\u7c7b\u4f3c\uff0c\u6211\u4eec\u901a\u8fc7\u76f8\u540c\u7684\u6b65\u9aa4\u5f97\u5230\u76f8\u540c\u7684\u6c42\u548c\u5f0f\uff1a

\\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

\u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

\\[\\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}a^j\\Theta\\left(\\left(\\frac{N}{b^j}\\right)^{\\log_b{a}}\\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\sum_{j=0}^{(\\log_b{N})-1}\\left(\\frac{a}{b^{\\log_b{a}}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\log_b{N} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}\\log{N}) \\end{aligned}\\]

\u81f3\u6b64\uff0c\u60c5\u51b5\u4e8c\u8bc1\u660e\u5b8c\u6bd5\u3002

\u60c5\u51b5\u4e09

\ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

\ud83e\udea7 \u8bc1\u660e\uff1a\u60c5\u51b5\u4e09\u7684\u8bc1\u660e\uff0c\u4ece\u6761\u4ef6\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u770b\u51fa\u6765\u548c\u524d\u9762\u7a0d\u8bb8\u6709\u4e9b\u4e0d\u540c\u4e86\u3002\u4e0d\u8fc7\u6c42\u548c\u5f0f\u7684\u5f97\u5230\u8fd8\u662f\u4e00\u6837\uff0c\u901a\u8fc7\u548c\u4e4b\u524d\u4e00\u6837\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u9996\u5148\u5f97\u5230\u6c42\u548c\u5f0f\uff1a

\\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

\u63a5\u4e0b\u6765\u7684\u6b65\u9aa4\u548c\u4e4b\u524d\u4e0d\u540c\u3002\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u89c2\u5bdf\u4e0d\u7b49\u5f0f \\(af(\\frac{N}{b})<cf(N)\\)\uff0c\u5728\u6211\u4eec\u7684\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u6211\u4eec\u6709\u5927\u91cf\u7684\u5f62\u5982 \\(a^jf(\\frac{N}{b^j})\\) \u7684\u9879\uff0c\u800c\u8fd9\u4e9b\u9879\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fed\u4ee3\u4e0a\u9762\u90a3\u4e2a\u4e0d\u7b49\u5f0f\u6765\u5b9e\u73b0\uff0c\u5373\uff1a

\\[ a^jf(\\frac{N}{b^j}) < c\\times a^{j-1}f(\\frac{N}{b^{j-1}}) < ... < c^j f(N) \\]

\u5c06\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\u5e94\u7528\u4e8e\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\uff1a

\\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j=0}^{(\\log_b{N})-1}c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{c^{1-\\log_b{N}}}{1-c} \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\end{aligned} \\]

\u800c\u7531\u4e8e \\(c<1\\)\uff0c\u6240\u4ee5 \\(\\log_b{c} < 0\\)\uff1b\u800c \\(N > 0\\)\uff0c\u800c\u4e14\u4e00\u822c\u975e\u5e38\u5927\uff0c\u6240\u4ee5 \\(N^{\\log_b{c}} \\in (0,1)\\)\u3002\u56e0\u6b64\uff0c\u5bf9\u4e8e\u786e\u5b9a\u7684\u5e38\u6570 \\(c\\)\uff0c\u6211\u4eec\u6709 \\(\\frac{1-N^{\\log_b{c}}}{1-c} \\in \\left(0, \\frac{1}{1-c}\\right)\\)\uff1b

\u56e0\u6b64\uff0c\u4e0a\u5f0f\u4fbf\u80fd\u6539\u53d8\u4e3a\uff1a

\\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1}{1-c} \\end{aligned} \\]

\u5e76\u4e14\uff0c\u7531\u4e8e \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u6240\u4ee5\u6839\u636e\u7b26\u53f7\u5b9a\u4e49\u53ef\u4ee5\u5f97\u5230 \\(T(N) = O(f(N))\\)\u3002

\u800c\u6211\u4eec\u77e5\u9053\uff0c\u8981\u8bc1\u660e \\(T(N) = \\Theta(f(N))\\) \u8fd8\u9700\u8981\u8bc1\u660e \\(T(N) = \\Omega(f(N))\\)\uff1a

\\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq f(N) \\end{aligned} \\]

\u7531\u6b64\u5f97\u5230 \\(T(N) = \\Omega(f(N))\\)\uff0c\u6700\u7ec8\u8bc1\u5f97 \\(T(N) = \\Theta(f(N))\\)\uff0c\u81f3\u6b64\uff0c\u60c5\u51b5\u4e09\u8bc1\u660e\u5b8c\u6bd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e8c","title":"\u5f62\u5f0f\u4e8c","text":"

Form 2

\u5bf9\u4e8e\u5f62\u5982 \\(T(N) = aT(\\frac{N}{b}) + f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

  1. \u82e5 \\(af(\\frac{N}{b}) = \\kappa f(N) \\text{ for fixed } \\kappa < 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N))\\)\uff1b
  2. \u82e5 \\(af(\\frac{N}{b}) = \\Kappa f(N) \\text{ for fixed } \\Kappa > 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(N^{\\log_b{a}}) = \\Theta(a^{\\log_b{N}})\\)\uff08\u4e2a\u4eba\u611f\u89c9\u540e\u9762\u90a3\u4e2a\u5f0f\u5b50\u66f4\u65b9\u4fbf\u76f4\u89c2\u8bb0\u5fc6\uff09\uff1b
  3. \u82e5 \\(af(\\frac{N}{b}) = f(N)\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N) \\log_b N)\\)\uff1b
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e_1","title":"\u8bc1\u660e","text":"

proof for form 2

\u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u57fa\u4e8e\u7ebf\u6027\u5173\u7cfb\u7684\u5f62\u5f0f\u4e8c\u7684\u8bc1\u660e\u5b9e\u9645\u4e0a\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u975e\u5e38\u76f8\u50cf\u3002

\u5047\u8bbe\u6211\u4eec\u6709 \\(af(\\frac{N}{b}) = c f(N)\\)\uff0c\u53ea\u9700\u8981\u8ba8\u8bba \\(c\\) \u7684\u53d6\u503c\u8303\u56f4\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\uff0c\u5c31\u53ef\u4ee5\u4e00\u6b21\u6027\u5f97\u5230\u7ed3\u679c\u3002

\u7c7b\u4f3c\u4e8e\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\uff0c\u6211\u4eec\u8fed\u4ee3\u8be5\u5173\u7cfb\u5f0f\uff0c\u5f97\u5230\u5173\u7cfb\uff1a

\\[ a^j f(\\frac{N}{b^j}) = c^j f(N) \\]

\u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

\\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j = 0}^{(\\log_b{N})-1} c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ \\end{aligned} \\]

\u5929\u5450\uff0c\u8fd9\u4e0d\u5c31\u662f\u5f62\u5f0f\u4e00\u91cc\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u5f0f\u5b50\u5417\uff1f\u7136\u800c\u5f53\u6211\u4eec\u6ee1\u5fc3\u6b22\u559c\u5730\u6253\u7b97\u7167\u7740\u5b83\u8bc1\u660e\u5f62\u5f0f\u4e8c\u7684\u60c5\u51b5\u4e00\u65f6\u4f1a\u53d1\u73b0\uff0c\u6761\u4ef6\u597d\u50cf\u4e0d\u591f\u3002\u6211\u4eec\u73b0\u5728\u5e76\u6ca1\u6709\u663e\u5f0f\u7684 \\(f(N) = \\Omega(N^{\\log_b {a}} + \\epsilon)\\) \u7684\u6761\u4ef6\uff0c\u800c\u8fd9\u4e2a\u6761\u4ef6\u6700\u7ec8\u51b3\u5b9a conquer \u90e8\u5206\u548c combine \u90e8\u5206\u8c01\u5360\u4e3b\u5bfc\u5730\u4f4d\u3002\u4f46\u662f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u53ea\u9700\u8981\u5f97\u5230 \\(f(N)\\) = \\(\\Omega(N^{\\log_b {a}})\\) \u5c31\u591f\u4e86\u3002\u5176\u5b9e \\(af(\\frac{N}{b}) \\sim c f(N)\\) \u8fd9\u4ef6\u4e8b\u672c\u8eab\u5c31\u6697\u542b\u4e86\u5b83\u4e0e \\(N^{\\log_b {a}}\\) \u7684\u5173\u7cfb\uff1a

\u4e3a\u4e86\u91cd\u590d\u5229\u7528\u8fc7\u7a0b\uff0c\u6211\u76f4\u63a5\u7528 \\(\\sim\\) \u6765\u4ee3\u66ff \\(<,>,=\\) \u4e86\uff0c\u8fc7\u7a0b\u4e2d\u4fdd\u6301\u4f20\u9012\u6027\u3002

\\[ c f(N) \\sim a f(\\frac{N}{b}) \\sim ... \\sim a^L f(\\frac{N}{b^L}) \\]

\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e00\u6b65\u8fd8\u662f\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\u3002\u53ea\u4e0d\u8fc7\u73b0\u5728\u6211\u4eec\u8981\u66f4\u8fdb\u4e00\u6b65\u5730\u770b\u8fd9\u4e2a\u5f0f\u5b50\u3002

\u5f53 \\(c < 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) > af(\\frac{N}{b})\\)\uff1b\u5f53 \\(c = 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) = af(\\frac{N}{b})\\)\uff1b \\(c > 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) < af(\\frac{N}{b})\\)\uff1b

\u6211\u4eec\u5047\u8bbe \\(\\frac{N}{b^L}\\) \u8db3\u591f\u5c0f\uff08\u5373\u9012\u5f52\u5230\u6700\u672b\u7aef\uff0c\u53ea\u9700\u8981\u8fdb\u884c conquer \u7684\u65f6\u5019\uff09\uff0c\u5373 \\(\\frac{N}{b^L} = \\Theta(1)\\)\uff0c\u90a3\u4e48\u5c31\u6709 \\(L = \\Theta(\\log_b{N})\\)\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

\\[ f(N) \\sim \\Theta(a^{\\log_b{N}}) = \\Theta(N^{\\log_b{a}}) \\]

\u7686\u5927\u6b22\u559c\uff01\u4e09\u4e2a\u613f\u671b\uff0c\u4e00\u6b21\u6ee1\u8db3\uff01

\u5269\u4e0b\u7684\u8bc1\u660e\u8fc7\u7a0b\u6211\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e09","title":"\u5f62\u5f0f\u4e09","text":"

Form 3

\u7b2c\u4e09\u79cd\u5f62\u5f0f\u662f\u5bf9\u4e8e \\((N)\\) \u7684\u7279\u522b\u5f62\u5f0f\uff0c\u5f53\u9012\u63a8\u5173\u7cfb\u6ee1\u8db3\uff1a

\\[ \\begin{aligned} & T(N) = a T(\\frac{n}{b}) + \\Theta(N^k \\log^p{N}) & \\text{Where } a \\geq 1,\\; b > 1,\\; p \\geq 0 \\end{aligned} \\]

\u5176\u590d\u6742\u5ea6\u6709\u7ed3\u8bba\uff1a

\\[ T(N) = \\left\\{ \\begin{aligned} & O(N^{\\log_b{a}}) & \\text{if } a > b^{k} \\\\ & O(N^k \\log^{p+1}{N}) & \\text{if } a = b^{k} \\\\ & O(N^k \\log^{p}{N}) & \\text{if } a < b^{k} \\end{aligned} \\right. \\]

\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u5f0f\u5b50\u4e5f\u975e\u5e38\u597d\u8ba4\uff0c\u5c5e\u4e8e\u5f62\u5f0f\u4e8c\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u3002\u53ef\u4ee5\u5bf9\u7167\u7740\u770b\uff0c\u975e\u5e38\u5bb9\u6613\u770b\u51fa\u5173\u7cfb\u3002

\u53ea\u4e0d\u8fc7\u5bf9\u4e8e\u7279\u6b8a\u60c5\u51b5\uff0c\u8fd9\u4e2a\u5f62\u5f0f\u7684\u7ea6\u675f\u66f4\u52a0\u7cbe\u786e\uff0c\u8bc1\u660e\u8fc7\u7a0b\u6709\u7f18\u518d\u8865\u5427x

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec08/","title":"Lecture 8 | Dynamic Programming","text":"

\u7ea6 4 \u4e2a\u5b57

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/","title":"Lecture 9 | Greedy Algorithms","text":"

\u7ea6 895 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f

\u679c\u7136\u8d8a\u6765\u8d8a\u5bbd\u6cdb\u4e86

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

\u8d2a\u5fc3\u7b97\u6cd5(Greedy Algorithms)\u662f\u4e00\u79cd\u5728\u6c42\u89e3\u4f18\u5316\u95ee\u9898\u65f6\u91c7\u7528\u7684\u7b56\u7565\uff0c\u5b83\u5728\u6bcf\u4e2a\u51b3\u7b56\u9636\u6bb5\u90fd\u9009\u62e9\u5f53\u524d\u770b\u8d77\u6765\u6700\u4f18\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4ece\u800c\u5e0c\u671b\u80fd\u591f\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u89e3\u3002\u8d2a\u5fc3\u7b97\u6cd5\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c40\u90e8\u6700\u4f18\u9009\u62e9\uff0c\u901a\u8fc7\u4e00\u7cfb\u5217\u5c40\u90e8\u6700\u4f18\u7684\u9009\u62e9\uff0c\u6765\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u7684\u76ee\u6807\u3002\u8d2a\u5fc3\u7b97\u6cd5\u6613\u4e8e\u5b9e\u73b0\uff0c\u4f46\u5e76\u4e0d\u603b\u662f\u80fd\u591f\u5f97\u5230\u5168\u5c40\u6700\u4f18\u89e3\uff0c\u56e0\u6b64\u5728\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\u65f6\u9700\u8981\u5206\u6790\u95ee\u9898\u7684\u7279\u6027\u4ee5\u786e\u4fdd\u5176\u9002\u7528\u6027\u3002

\u2014\u2014ChatGPT

\u8d2a\u5fc3\u601d\u60f3\u548c\u5b83\u7684\u540d\u5b57\u4e00\u6837\u7b80\u5355\u66b4\u529b\uff0c\u5c31\u662f\u5728\u6bcf\u4e00\u4e2a\u6b65\u9aa4\u4e2d\u90fd\u91c7\u53d6\u5c40\u90e8\u6700\u4f18\u89e3\uff0c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u3002\u4f46\u662f\u663e\u7136\u8fd9\u4e2a\u65b9\u6cd5\u5e76\u4e0d\u603b\u80fd\u201c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u201d\u3002\u56e0\u6b64\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u76f4\u63a5\u66b4\u529b\uff0c\u4f46\u662f\u5982\u4f55\u627e\u5230\u7528\u300c\u8d2a\u5fc3\u300d\u89e3\u51b3\u95ee\u9898\u7684\u8def\u5f84\uff0c\u5f80\u5f80\u662f\u9700\u8981\u52a8\u52a8\u8111\u5b50\u7684\u3002

\u548c dp \u4e00\u6837\uff0c\u8d2a\u5fc3\u662f\u4e00\u4e2a\u6bd4\u8f83\u601d\u60f3\u6027\u8d28\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u501f\u52a9\u8bb8\u591a\u6848\u4f8b\u6765\u8fdb\u884c\u5206\u6790\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6848\u4f8b-activity-selection-problem","title":"[\u6848\u4f8b] Activity Selection Problem","text":"

\u5728\u8bfe\u4ef6\u4e0a\uff0c\u6d3b\u52a8\u9009\u62e9\u95ee\u9898(Activity Selection Problem)\u7684\u9648\u8ff0\u5982\u4e0b\uff1a

Activity Selection Problem

Given a set of activities \\(S = { a_1, a_2, ..., a_n }\\) that wish to use a resource (e.g. a classroom). Each \\(a_i\\) takes place during a time interval \\([s_i, f_i)\\).

Activities \\(a_i\\) and \\(a_j\\) are compatible if \\(s_i \\geq f_j\\) or \\(s_j \\geq f_i\\) (i.e. their time intervals do not overlap).

Goal: Select a maximum-size subset of mutually compatible activities.

\u62bd\u8c61\u6765\u8bf4\u5c31\u662f\u4e00\u4e2a\u4e00\u7ef4\u7684\u5bc6\u94fa\u95ee\u9898\u3002\u7ed9\u5b9a\u65f6\u95f4\u7ebf\u4e0a\u7684\u82e5\u5e72\u533a\u95f4 \\([s_i, f_i)\\)\uff0c\u6c42\u51fa\u6700\u591a\u80fd\u4e0d\u91cd\u53e0\u5730\u5728\u8fd9\u4e2a\u65f6\u95f4\u7ebf\u4e0a\u653e\u7f6e\u591a\u5c11\u4e2a\u533a\u95f4\u3002\u9898\u76ee\u989d\u5916\u4fdd\u8bc1\u4e86\u8f93\u5165\u6570\u636e\u662f\u6839\u636e \\(f_i\\) \u6709\u5e8f\u7684\uff0c\u4e0d\u8fc7\u8fd9\u4e0d\u662f\u5f88\u91cd\u8981\u3002

bad try 1

\u4e00\u4e2a\u975e\u5e38 naive \u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u54ea\u95e8\u8bfe\u5148\u5f00\u59cb\u6211\u5148\u9009\u54ea\u95e8\u8bfe\uff0c\u8fd9\u4e2a\u60f3\u6cd5\u975e\u5e38\u7684\u8282\u7701\u8111\u7ec6\u80de\uff0c\u4f46\u662f\u663e\u7136\u4e0d\u5bf9\u3002\u6211\u968f\u968f\u4fbf\u4fbf\u6765\u4e2a\u6700\u65e9\u5f00\u59cb\u6700\u665a\u7ed3\u675f\u7684\u8bfe\uff0c\u5c31\u80fd\u76f4\u63a5 hack \u6389\u8fd9\u4e2a\u65b9\u6cd5\u3002

bad try 2

\u518d\u6765\u4e00\u4e2a\u5929\u771f\u7684\u60f3\u6cd5\uff0c\u6211\u6bcf\u6b21\u90fd\u9009\u533a\u95f4\u957f\u5ea6\u6700\u5c11\u7684\uff0c\u867d\u7136\u770b\u8d77\u6765\u80fd\u8ba9\u5b83\u201c\u76f8\u5bf9\u6bd4\u8f83\u591a\u201d\uff0c\u4f46\u662f\u663e\u7136\u4e5f\u65e0\u6cd5\u4fdd\u8bc1\u7ed3\u679c\u7684\u6700\u4f18\u6027\uff0c\u4e5f\u975e\u5e38\u597d hack\u3002

search

\u800c\u53e6\u5916\u4e00\u4e2a\u66b4\u529b\u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u6211\u53bb\u679a\u4e3e\u6bcf\u4e00\u79cd\u53ef\u80fd\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4fd7\u79f0\u7684\u66b4\u641c\uff0c\u8fd8\u53ef\u4ee5\u7528\u4e0a\u526a\u679d\u7b49\u64cd\u4f5c\uff0c\u867d\u7136\u53ef\u4ee5\uff0c\u4f46\u662f\u592a\u4e0d\u4f18\u96c5\u4e86\uff0c\u800c\u4e14\u65f6\u95f4\u590d\u6742\u5ea6\u672a\u5fc5\u662f\u6211\u4eec\u80fd\u63a5\u53d7\u7684\u3002

dp

\u65e2\u7136\u66b4\u641c\u4e0d\u884c\uff0c\u90a3\u8bd5\u8bd5 dp \u5462\uff1f\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u51fa\u5982\u4e0b\u8f6c\u79fb\u65b9\u7a0b\uff1a

\\[ dp_i = \\left\\{ \\begin{aligned} &1 & i = 1 \\\\ &\\max\\{ dp_{i-1}, dp_{f(i)} + 1 \\} & i > 1 \\end{aligned} \\right. \\]

\u5176\u4e2d\uff0c\\(dp_i\\) \u8868\u793a\u5230\u7b2c \\(i\\) \u4e2a\u533a\u95f4\u622a\u6b62\u7684\u65f6\u95f4\u4e3a\u6b62\uff0c\u6700\u591a\u6709\u591a\u5c11\u4e2a\u9879\u76ee\u53ef\u4ee5\u88ab\u5b89\u6392\uff1b\\(f(i)\\) \u662f\u6700\u5927\u7684\u6ee1\u8db3 \\(f_j \\leq s_i\\) \u7684\u533a\u95f4\u7684\u7f16\u53f7 \\(j\\)\uff0c\u4e5f\u5c31\u662f\u80fd\u591f\u4e0d\u91cd\u53e0\u653e\u4e0b\u7684\uff0c\u6700\u665a\u7684\u90a3\u4e2a\u6d3b\u52a8\u3002

\u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u4e48\u505a\u662f\u53ef\u4ee5\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd9\u6837\u505a\u7684\u8bdd\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

greedy

\u663e\u7136\uff0c\u8fd9\u4e2a\u6848\u4f8b\u653e\u5728\u8fd9\u4e2a\u5730\u65b9\u80af\u5b9a\u662f\u6709\u8d2a\u5fc3\u89e3\u7684\u3002\u800c\u4e14\u9898\u76ee\u7684 \u201cAssume\u201d \u63d0\u793a\u6027\u5df2\u7ecf\u5f88\u5f3a\u4e86\u3002\u6211\u4eec\u53ea\u9700\u8981\u6309\u7167\u7ed3\u675f\u65f6\u95f4\uff0c\u904d\u5386\u8fd9\u4e9b\u533a\u95f4\uff0c\u80fd\u585e\u4e0b\u5c31\u585e\uff0c\u5373\u53ef \\(O(N)\\) \u8d2a\u5fc3\u6c42\u89e3\u3002

TODO:

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/","title":"Lecture 10 | NP Completeness","text":"

\u7ea6 3027 \u4e2a\u5b57 10 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

\u5bfc\u8bfb

\u7531\u4e8e\u672c\u8282\u6d89\u53ca\u8f83\u591a\u6982\u5ff5\uff0c\u5e76\u4e14\u77e5\u8bc6\u6811\u957f\u7684\u5f88\u84ec\u677e\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u5c1d\u8bd5\u975e\u7ebf\u6027\u7ec4\u7ec7\u5185\u5bb9\uff0c\u56e0\u6b64\u672c\u6587\u7684\u9605\u8bfb\u987a\u5e8f\u53ef\u80fd\u4e5f\u5e76\u4e0d\u4f1a\u662f\u7ebf\u6027\u7684\u3002

\u6240\u6709\u63d0\u5230\u7684\u3001\u5e76\u4e14\u672c\u6587\u4f1a\u4ecb\u7ecd\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u90fd\u4f1a\u4ee5\u94fe\u63a5\u548c\u653e\u5927\u955c\ud83d\udd0d\u7684\u5f62\u5f0f\u51fa\u73b0\u3002\u63a8\u8350\u4f7f\u7528\u9f20\u6807\u4e2d\u952e\u7b49\u65b9\u5f0f\u6253\u5f00\u65b0\u6807\u7b7e\u9875\u67e5\u770b\uff0c\u65b9\u4fbf\u56de\u6eaf\u3002

\u63a8\u8350\u7684\u9605\u8bfb\u987a\u5e8f\u662f\uff0c\u987a\u7740\u8bfb\u4e0b\u53bb\uff0c\u6bcf\u6b21\u51fa\u73b0 \ud83d\udd0d \u90fd\u8fdb\u884c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\u5f0f\u7684\u5b66\u4e60\uff0c\u76f4\u81f3\u770b\u5b8c\u5168\u6587\u3002

\u5176\u4e2d\uff0c\u5728 \u76f8\u5173\u6982\u5ff5 \u4e4b\u540e\u7684\u90e8\u5206\uff0c\u6211\u4f1a\u4fdd\u8bc1\u5728\u524d\u9762\u90fd\u6709\u63d0\u53ca\uff0c\u800c\u5176\u4e4b\u524d\u7684\u5185\u5bb9\uff0c\u63a8\u8350\u90fd\u5728\u987a\u5e8f\u9605\u8bfb\u4e2d\u6d89\u53ca\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

Links

OI Wiki: https://oi-wiki.org/misc/cc-basic/

Wikipedia: https://en.wikipedia.org/wiki/P_versus_NP_problem

Wikipedia: https://en.wikipedia.org/wiki/NP-completeness

Wikipedia: https://en.wikipedia.org/wiki/NP-hardness

\u6839\u636e\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u7531\u4e0d\u540c\u7684\u5b9a\u4e49\u5212\u5206\uff0c\u95ee\u9898\u53ef\u4ee5\u5206\u4e3a\uff1a

P \u95ee\u9898(polynomial time)\u3001NP \u95ee\u9898(nondeterministic polynomial time)\u3001NPC \u95ee\u9898(NP complete)\u3001NPH \u95ee\u9898(NP hard)\u3002\u9664\u6b64\u4e4b\u5916 \uff0c\u6211\u4eec\u8fd8\u9700\u8981\u989d\u5916\u4e86\u89e3\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898(undecidable)\u3002

\u7531\u4e8e\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u6bd4\u8f83\u7279\u6b8a\uff0c\u6240\u4ee5\u6211\u5148\u653e\u5728\u524d\u9762\u4ecb\u7ecd\u3002

Undecidable Problem

Links

Wikipedia: https://en.wikipedia.org/wiki/Undecidable_problem

\u4e0d\u53ef\u5224\u5b9a\u95ee\u9898(undecidable problem)\u662f\u4e00\u7c7b\u7279\u6b8a\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff0c\u5b83\u7684\u7279\u70b9\u662f\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u6c42\u89e3\u5b83\u7684\u7ed3\u679c\u3002

\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5178\u578b\u7684\u4f8b\u5b50\u5c31\u662f\u505c\u673a\u95ee\u9898\ud83d\udd0d\u3002

\u6211\u4eec\u53ef\u4ee5\u7528\u8fd9\u6837\u4e00\u5f20\u56fe\u6765\u8868\u793a\u5176\u4ed6\u51e0\u4e2a\u6982\u5ff5\u7684\u5173\u7cfb\uff1a

Source: https://en.wikipedia.org/wiki/NP-hardness

\u53ef\u4ee5\u7c97\u6d45\u7684\u6309\u7167\u56fe\u4e2d\u7684\u201cComplexity\u201d\u8f74\u6765\u7406\u89e3\u5176\u4e2d\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u63a5\u4e0b\u6765\u7ed9\u51fa\u5b83\u4eec\u7684\u8be6\u7ec6\u5b9a\u4e49\uff1a

P

P \u53d6\u81ea polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

NP

NP \u5373 nondeterministic polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002\u8fd9\u4e2a\u8bf4\u6cd5\u7b49\u4ef7\u4e8e\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\uff08\u5224\u65ad\u7b54\u6848\u662f\u5426\u6b63\u786e\uff09\u3002

\u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\u7684\u95ee\u9898\u3002

NPC

NPC \u5373 NP complete\uff0cNP \u5b8c\u5168\uff0c\u662f NP \u4e2d\u6700\u96be\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u65e0\u9650\u5b9a\u8bcd\u7684\u6700\u96be\u7684\u95ee\u9898\uff01\uff09\u3002\u800c\u6211\u4eec\u79f0\u6ee1\u8db3\u5982\u4e0b\u6761\u4ef6\u7684\u95ee\u9898\u4e3a NPC \u95ee\u9898\uff1a

  1. \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. \u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff1b

\u7531 2 \u53ef\u4ee5\u6709\u7ed3\u8bba\uff0c\u6240\u6709\u7684 NPC \u95ee\u9898\u96be\u5ea6\u76f8\u540c\u2014\u2014\u4e00\u65e6\u6709\u4e00\u4e2a NPC \u95ee\u9898\u88ab\u89e3\u51b3\uff0c\u90a3\u4e48\u6240\u6709 NPC \u95ee\u9898\uff0c\u4e43\u81f3\u6240\u6709 NP \u95ee\u9898\u90fd\u80fd\u88ab\u89e3\u51b3\u3002

\u5982\u679c\u6211\u4eec\u8bd5\u56fe\u8bc1\u660e\u4e00\u4e2a\u95ee\u9898\u662f NPC \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fd9\u79cd\u624b\u6bb5\uff1a

  1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH\uff08\u5728\u4e0b\u9762\uff09\u95ee\u9898\uff1b

\u7b2c\u4e00\u4e2a\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\u662f Circuit-SAT\ud83d\udd0d \u95ee\u9898\u3002

P ?= NP & NPC

\u5173\u4e8e P \u548c NP \u7684\u5173\u7cfb\uff0c\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053 P \u662f\u5426\u80fd\u7b49\u4e8e NP\uff0c\u5373\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u662f\u5426\u5b58\u5728\u591a\u9879\u5f0f\u7b97\u6cd5\u53ef\u4ee5\u89e3\u51b3\u4e00\u5207 NP \u95ee\u9898\u3002

\u800c\u5176\u4e2d\u7684\u5173\u952e\u5c31\u662f\uff0c\u5982\u679c\u6211\u4eec\u80fd\u627e\u5230 NPC \u95ee\u9898\u7684\u591a\u9879\u5f0f\u89e3\u6cd5\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u8bc1\u660e P = NP\u3002

NPH

NPH \u5373 NP hard\uff0cNP \u56f0\u96be\uff0c\u5b83\u4e0d\u4e00\u5b9a\u9700\u8981\u662f NP \u95ee\u9898\u3002\u800c\u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a NPH \u95ee\u9898\u3002

\u4e5f\u5c31\u662f\u8bf4 \\(NPC = NP \\cap NPH\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u8bfe\u5185\u6848\u4f8b","title":"\u8bfe\u5185\u6848\u4f8b","text":"

\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u90fd\u662f\u8bfe\u4ef6\u4e2d\u63d0\u5230\u7684\u4e00\u4e9b\u5177\u4f53\u95ee\u9898\u548c\u6848\u4f8b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#halting-problem","title":"Halting Problem","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Halting_problem

\u505c\u673a\u95ee\u9898\u662f\u4e00\u4e2a\u5178\u578b\u7684\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\uff0c\u5b83\u6307\u7684\u662f\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u5224\u65ad\u5b83\u662f\u5426\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u505c\u673a\uff08\u5373\u5224\u65ad\u7a0b\u5e8f\u662f\u5426\u4f1a\u6b7b\u5faa\u73af\uff09\u3002

\u6211\u4eec\u901a\u8fc7\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\uff1a

\u5047\u8bbe\u5b58\u5728\u51fd\u6570 willHalt(func F) \u53ef\u4ee5\u5224\u65ad\u51fd\u6570 F \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5982\u679c\u4f1a\uff0c\u5219\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u8fd9\u6837\u7684\u51fd\u6570 foo()\uff1a

void foo() {\nif ( willHalt(foo) ) {\nwhile (true) {} // Endless loop.\n}\nreturn;\n}\n

\u63a5\u4e0b\u6765\uff0c\u5982\u679c\u6211\u4eec\u60f3\u77e5\u9053 foo() \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5c31\u4f1a\u6267\u884c willHalt(foo)\u3002\u7136\u800c\u5728 foo() \u5185\u90e8\u4e5f\u6709\u4e00\u4e2a willHalt(foo)\uff0c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4f1a\u505c\u673a\uff0c\u5219\u6784\u9020\u4e00\u4e2a\u6b7b\u5faa\u73af\uff1b\u800c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4e0d\u4f1a\u505c\u673a\uff0c\u5219\u9009\u62e9\u8ba9\u5b83\u7acb\u523b\u505c\u673a\uff0c\u4e8e\u662f\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u77db\u76fe\u3002

\u7406\u89e3\u4e0a\u9762\u8fd9\u6bb5\u5185\u5bb9\u7684\u5173\u952e\u5c31\u662f\uff0c\u8fd9\u91cc\u867d\u7136\u4e0d\u5b58\u5728\u4e8b\u5b9e\u610f\u4e49\u4e0a\u7684\u201c\u6b7b\u5faa\u73af\u201d\uff0c\u4f46\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u903b\u8f91\u4e0a\u7684\u9012\u5f52\uff0c\u800c\u8fd9\u79cd\u201c\u903b\u8f91\u4e0a\u7684\u9012\u5f52\u201d\uff0c\u6b63\u662f\u5bfc\u81f4\u505c\u673a\u95ee\u9898\u6210\u4e3a\u4e00\u4e2a\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u7684\u539f\u56e0\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#hamilton-cycle-problem","title":"Hamilton Cycle Problem","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Hamiltonian_path_problem

OI Wiki: https://oi-wiki.org/graph/hamilton

\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898

\u7ed9\u5b9a\u4e00\u4e2a\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\u3002

\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#traveling-salesman-problem","title":"Traveling Salesman Problem","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Travelling_salesman_problem

\u65c5\u884c\u5546\u95ee\u9898

\u65c5\u884c\u5546\u95ee\u9898\u6709\u4e24\u79cd\u5b9a\u4e49\uff0c\u5176\u4e2d\u524d\u8005\u662f NPH\uff0c\u800c\u88ab\u79f0\u4e3a\u201c\u5224\u5b9a\u7248\u672c\u201d\u7684\u540e\u8005\u662f NPC\u3002

\u539f\u59cb\u5b9a\u4e49\u5224\u5b9a\u7248\u672c

\u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u6700\u77ed\u3002

\"Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?\"

From Wikipedia

\u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u7ec4\u5408\u4f18\u5316\u7684\u8bed\u5883\u4e2d\u3002

\u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7 \\(k\\)\u3002

\u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u590d\u6742\u5ea6\u7406\u8bba\u7684\u8bed\u5883\u4e2d\u3002

\u9700\u8981\u6ce8\u610f\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u8c08\u8bba\u7684\u90fd\u662f\u5224\u5b9a\u7248\u672c\u7684 TSP\uff01

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u5224\u5b9a\u7248\u672c\u7684-npc-\u8bc1\u660e","title":"\u5224\u5b9a\u7248\u672c\u7684 NPC \u8bc1\u660e","text":"

\u73b0\u5728\uff0c\u5047\u8bbe\u6211\u4eec\u5df2\u77e5 Hamilton Cycle Problem \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5c1d\u8bd5\u901a\u8fc7\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u7684\u65b9\u5f0f\u6765\u8bc1\u660e TSP \u4e5f\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

Recommended Reading

https://opendsa-server.cs.vt.edu/ODSA/Books/Everything/html/hamiltonianCycle_to_TSP.html

\u9996\u5148\u56de\u987e\u8bc1\u660e NPC \u7684\u6b65\u9aa4\uff1a

  1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH \u95ee\u9898\uff1b

\u4ee3\u5165\u5230\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u9700\u8981\u8bc1\u660e\uff1a

  1. TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. Hamilton Cycle Problem \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\uff1b

TSP is NP

\u8bc1\u660e TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\u5373\u8bc1\u660e TSP \u7684\u89e3\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u88ab\u9a8c\u8bc1\u3002\u800c\u9a8c\u8bc1\u4e00\u4e2a\u89e3\u662f TSP \u95ee\u9898\u7684\u89e3\uff0c\u9700\u8981\u8bc1\u660e\u4e0b\u9762\u4e24\u4e2a\u70b9\uff1a

  1. \u8fd9\u6761\u8def\u5f84\u7ecf\u8fc7\u4e86\u6240\u6709\u8282\u70b9\u6070\u597d\u4e00\u6b21\uff1b
  2. \u8fd9\u6761\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7\\(k\\)\uff1b

\u663e\u7136\uff0c\u8fd9\u4e24\u6761\u90fd\u53ea\u9700\u8981 \\(O(N)\\) \u7684\u5f00\u9500\u5c31\u80fd\u9a8c\u8bc1\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u5f97\u5230\u7ed3\u8bba\uff1a\\(\\text{TSP} \\in \\text{NP}\\)\u3002

TSP is NPH

\u8981\u8bc1\u660e TSP \u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bc1\u660e Hamilton Cycle Problem(HCP) \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\u3002

\u4e3a\u6b64\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bd4 HCP \u548c TSP \u7684\u5dee\u5f02\u3002

\u4ee5 HCP \u4e3a\u57fa\u7840\u63cf\u8ff0 TSP\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u4e00\u5f20\u5b8c\u5168\u56fe\u4e0a\u5bfb\u627e\u603b\u957f\u4e0d\u8d85\u8fc7 \\(k\\) \u7684\u54c8\u5bc6\u987f\u73af\u8def\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

HCP TSP \u56fe \\(G(V,E)\\) \u5b8c\u5168\u56fe \\(G'(V',E')\\) \u65e0\u8fb9\u6743 \u6709\u8fb9\u6743 - \\(\\sum v_i \\leq k\\)

\u800c\u4e3a\u4e86\u8bc1\u660e \\(\\text{HCP} \\leq_p \\text{TCP}\\)\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e00\u4e2a\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u65b9\u6cd5 f() \u5b9e\u73b0 \\(G(V,E) \\to G'(V',E')\\)\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u505a\u8fd9\u4e9b\u4e8b\uff1a

  1. \u8fde\u63a5 \\(G\\) \u4e2d\u6240\u6709\u6ca1\u8fde\u4e0a\u7684\u8fb9\uff0c\u4f7f \\(G\\) \u6210\u4e3a\u4e00\u5f20\u65e0\u6743\u5b8c\u5168\u56fe\uff1b
  2. \u5bf9\u4e8e\u65e0\u6743\u5b8c\u5168\u56fe\u4e2d\u7684\u6bcf\u4e00\u6761\u8fb9 \\(v^c_i\\)\uff0c\u5982\u679c\u5728 \\(G\\) \u4e2d\u4e5f\u6709\u8fd9\u6761\u8fb9\uff0c\u90a3\u4e48\u4ee4\u5b83\u8fb9\u6743\u4e3a 0\uff0c\u5426\u5219\u4ee4\u5b83\u8fb9\u6743\u4e3a 1\uff0c\u4e8e\u662f\u5f97\u5230\u6709\u6743\u5b8c\u5168\u56fe \\(G'(V',E')\\)\uff1b

\u53f3\u56fe\u4e2d\u6240\u6709\u7684\u84dd\u8fb9\u8fb9\u6743\u90fd\u4e3a 0\uff0c\u7eff\u8fb9\u8fb9\u6743\u90fd\u4e3a 1\u3002

\u7531\u4e8e\u5b8c\u5168\u56fe\u7684\u8fb9\u6570\u4e3a \\(\\frac{n(n-1)}{2}\\)\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6b65\u9aa4\u663e\u7136\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u539f\u95ee\u9898\u4e3a\u5728 \\(G\\) \u4e0a\u5bfb\u627e\u54c8\u5bc6\u987f\u73af\uff0c\u7b49\u4ef7\u4e8e\u5728 \\(G' = f(G)\\) \u4e0a\u505a \\(k = 0\\) \u7684 TSP\u3002\u7531\u6b64\u8bc1\u660e \\(\\text{HCP} \\leq_{p} \\text{TSP}\\)\uff0c\u5373 \\(\\text{TSP} \\in \\text{NPH}\\)\u3002

\u7efc\u4e0a\u6240\u8ff0\uff0c\u7531\u4e8e \\(\\text{TSP} \\in \\text{NP}\\) \u4e14 \\(\\text{TSP} \\in \\text{NPH}\\)\uff0c\u6240\u4ee5 \\(\\text{TSP} \\in \\text{NPC}\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#circuit-sat","title":"Circuit-SAT","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

Circuit-SAT \u53c8\u53eb circuit satisfiability problem\uff0c\u5b83\u662f\u6700\u65e9\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\uff0c\u5373\u901a\u8fc7 NPC \u95ee\u9898\u7684\u5b9a\u4e49\u8bc1\u660e\u3002

\u5176\u5177\u4f53\u63cf\u8ff0\u5982\u4e0b\uff1a

Circuit-SAT

Circuit-SAT \u5373\u4e3a\u786e\u5b9a\u7ed9\u5b9a\u5e03\u5c14\u7535\u8def\u662f\u5426\u5177\u6709\u4f7f\u8f93\u51fa\u4e3a\u771f\u7684\u8f93\u5165\u5206\u914d\u7684\u51b3\u7b56\u7684\u95ee\u9898\u3002

Source: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

\u4e0a\u56fe\u4e2d\uff0c\u5de6\u4fa7\u7535\u8def\u6ee1\u8db3\u6761\u4ef6\uff0c\u53f3\u4fa7\u7535\u8def\u4e0d\u6ee1\u8db3\u6761\u4ef6\u3002

\u6216\u8005\uff0c\u66f4\u62bd\u8c61\u7684\u6765\u8bf4\uff0c\u662f\u5224\u65ad\u4e00\u4e2a\u5177\u6709 \\(n\\) \u4e2a\u5e03\u5c14\u53d8\u91cf\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u662f\u5426\u5177\u6709\u7ed3\u679c\u4e3a True \u7684\u89e3\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#3-sat","title":"3-SAT","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Boolean_satisfiability_problem#3-satisfiability

3-SAT \u6307\u7684\u662f Circuit-SAT \u95ee\u9898\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u5b83\u5bf9\u5e03\u5c14\u7535\u8def\uff0c\u6216\u8005\u8bf4\u5e03\u5c14\u8868\u8fbe\u5f0f\u7684\u5f62\u5f0f\u6709\u7279\u6b8a\u8981\u6c42\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u8981\u6c42\u5e03\u5c14\u8868\u8fbe\u5f0f\u5f62\u5982\uff1a

\\[ (x_1 \\vee x_2 \\vee x_3) \\wedge (x_4 \\vee x_5 \\vee x_6) \\wedge \\cdots \\wedge (x_{n-2} \\vee x_{n-1} \\vee x_n) \\] "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#a-formal-language-framework","title":"A formal-language Framework","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u76f8\u5173\u6982\u5ff5","title":"\u76f8\u5173\u6982\u5ff5","text":"

\u8bf4\u660e

\u4ee5\u4e0b\u90e8\u5206\u7684\u5185\u5bb9\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u8bf4\u660e\u4e0a\u6587\u4e2d\u90e8\u5206\u5185\u5bb9\u800c\u4ecb\u7ecd\u7684\u6982\u5ff5\uff0c\u5e76\u4e0d\u5177\u6709\u7ec4\u7ec7\u7ed3\u6784\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u56fe\u7075\u673a","title":"\u56fe\u7075\u673a","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Turing_machine

Wikipedia: https://en.wikipedia.org/wiki/Nondeterministic_Turing_machine

\u56fe\u7075\u673a\u6709\u4e00\u4e9b\u53d8\u4f53\uff0c\u800c\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u56fe\u7075\u673a\u662f\u4e3a\u4e86\u4ecb\u7ecd P/NP\uff0c\u53ea\u4ecb\u7ecd\u786e\u5b9a\u578b\u56fe\u7075\u673a\u548c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u3002

\u56fe\u7075\u673a\u7531\u4e00\u4e2a\u65e0\u9650\u957f\u7684\u7eb8\u5e26\u548c\u4e00\u4e2a\u8bfb\u5199\u5934\u7ec4\u6210\u3002\u7eb8\u5e26\u88ab\u5212\u5206\u4e3a\u4e00\u4e2a\u4e2a\u683c\u5b50\uff0c\u6bcf\u4e2a\u683c\u5b50\u4e0a\u6709\u4e00\u4e2a\u7b26\u53f7\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u5728\u7eb8\u5e26\u4e0a\u79fb\u52a8\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u8bfb\u53d6\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u4e5f\u53ef\u4ee5\u6539\u53d8\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u3002\u56fe\u7075\u673a\u7684\u72b6\u6001\u662f\u4e00\u4e2a\u6709\u9650\u96c6\u5408\uff0c\u6bcf\u4e2a\u72b6\u6001\u90fd\u6709\u4e00\u4e2a\u8f6c\u79fb\u51fd\u6570\uff0c\u8f6c\u79fb\u51fd\u6570\u7684\u8f93\u5165\u662f\u5f53\u524d\u72b6\u6001\u548c\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u8f93\u51fa\u662f\u4e0b\u4e00\u4e2a\u72b6\u6001\u3001\u4e0b\u4e00\u4e2a\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u548c\u8bfb\u5199\u5934\u7684\u79fb\u52a8\u65b9\u5411\u3002

\u66f4\u672c\u8d28\u7684\u6765\u8bf4\uff0c\u56fe\u7075\u673a\u662f\u4e00\u79cd\u8ba1\u7b97\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8868\u793a\u4efb\u4f55\u6709\u9650\u903b\u8f91\u6570\u5b66\u8fc7\u7a0b\u3002\u786e\u5b9a\u578b\u56fe\u7075\u673a\u4e0e\u6211\u4eec\u5e38\u89c4\u7406\u89e3\u7684\u8ba1\u7b97\u673a\u903b\u8f91\u7c7b\u4f3c\uff0c\u5373\u4e0b\u4e00\u6b65\u8981\u505a\u4ec0\u4e48\u53ef\u4ee5\u6839\u636e\u5f53\u524d\u72b6\u6001\u786e\u5b9a\u3002\u800c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u5219\u7c7b\u4f3c\u4e8e\u80fd\u591f\u8fdb\u884c\u65e0\u9650\u5e76\u884c\uff0c\u5e76\u4e14\u6700\u7ec8\u603b\u662f\u9009\u62e9\u901a\u5411\u6b63\u786e\u7b54\u6848\u7684\u65b9\u5411\u7684\u90a3\u6761\u8def\uff08\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5b83\u80fd\u5f00\u5e73\u884c\u5b87\u5b99\uff0c\u5e76\u4e14\u603b\u662f\u8ba9\u4f60\u89c2\u6d4b\u5230\u6b63\u786e\u7684\u90a3\u4e00\u4e2a\u5e73\u884c\u5b87\u5b99\uff09\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","title":"\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_reduction

\u6211\u4eec\u5f15\u5165 P/NP \u7b49\u8fd9\u4e9b\u6982\u5ff5\uff0c\u662f\u4e3a\u4e86\u8861\u91cf\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u800c\u5982\u4f55\u5728\u5177\u4f53\u7684\u201c\u95ee\u9898\u201d\u95f4\u4f20\u9012\u3001\u6bd4\u8f83\u8fd9\u79cd\u201c\u590d\u6742\u7a0b\u5ea6\u201d\uff0c\u5c31\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u7684\u76ee\u7684\u3002

graph LR;\nA[\"\u95ee\u9898 A\"]\nB[\"\u95ee\u9898 B\"]\nA ===>|\"\u591a\u9879\u5f0f\u65f6\u95f4\u8f6c\u5316\"| B

\u5982\u679c\u6211\u4eec\u80fd\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u590d\u6742\u5ea6\u5185\uff0c\u5c06\u95ee\u9898 A \u8f6c\u5316\u4e3a\u95ee\u9898 B\uff0c\u5219\u79f0\u95ee\u9898 A \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u4e3a B\uff0c\u8bb0\u4e3a \\(A \\leq_{p} B\\)\uff0c\u8868\u793a A \u4e0d\u4f1a\u6bd4 B \u96be\u3002

\u800c\u91c7\u53d6\u6570\u5b66\u8bed\u8a00\u6765\u63cf\u8ff0\uff0c\u5219\u662f\uff1a

\\[ \\begin{aligned} A \\leq_{p} B \\;\\;\\Leftrightarrow\\;\\; & \\exist f() \\text{ which runs in polynomial time}, \\\\ & s.t. \\;\\; \\forall x \\in A,\\; f(x) \\in B \\\\ & \\text{and}\\; \\forall f(x) \\in B,\\; y \\in A \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/","title":"Lecture 11 | Approximation","text":"

\u7ea6 5372 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 18 \u5206\u949f

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u7b97\u6cd5","title":"\u8fd1\u4f3c\u7b97\u6cd5","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Approximation_algorithm

\u5728\u4e0a\u4e00\u7ae0\u4e2d\u6211\u4eec\u4ecb\u7ecd\u4e86 P/NP \u95ee\u9898\uff0c\u800c\u5927\u5bb6\u666e\u904d\u8ba4\u4e3a P \u2260 NP\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5bf9\u4e8e\u67d0\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u65e0\u6cd5\u4f7f\u7528\u591a\u9879\u5f0f\u65f6\u95f4\u89e3\u51b3\uff0c\u800c\u5728\u95ee\u9898\u89c4\u6a21\u53d8\u5927\u65f6\uff0c\u8d8a\u53d1\u4e0d\u53ef\u63a5\u53d7\u3002

\u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u9000\u800c\u6c42\u5176\u6b21\uff0c\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u6c42\u4e00\u4e2a\u6bd4\u8f83\u4f18\u7684\u89e3\u3002\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u5c1d\u8bd5\u5bfb\u627e\u4e00\u79cd\u591a\u9879\u5f0f\u7b97\u6cd5\uff0c\u4f7f\u5f97\u5176\u7ed3\u679c\u59cb\u7ec8\u5728\u5173\u4e8e\u51c6\u786e\u89e3\u7684\u53ef\u63a5\u53d7\u504f\u5dee\u8303\u56f4\u5185\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7b97\u6cd5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u8fd1\u4f3c\u7b97\u6cd5(approximation algorithm)\u3002

\u6211\u4eec\u8bbe \\(f(n, x)\\) \u662f\u5bf9\u8f93\u5165\u5927\u5c0f\u4e3a \\(n\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u7ed3\u679c \\(x\\) \u7684\u6700\u574f\u60c5\u51b5\u7684\u4e00\u4e2a\u76f4\u89c2\u91cf\u5316\uff08\u4f8b\u5982 dist, weight...\uff09\uff0c\u82e5\u8bbe \\(x^*\\) \u4e3a\u51c6\u786e\u89e3\uff0c\\(x\\) \u4e3a\u7ed9\u5b9a\u7b97\u6cd5\u7ed3\u679c\uff0c\u5219\u6211\u4eec\u5b9a\u4e49\u8fd1\u4f3c\u6bd4(Approximation Ratio)\\(\\rho\\)\uff1a

\\[ \\forall n \\rho = \\max\\left\\{\\frac{f(n, x)}{f(n, x^*)}, \\frac{f(n, x^*)}{f(n, x)}\\right\\} \\]

\u5219\u79f0\u7ed9\u5b9a\u7b97\u6cd5\u4e3a \\(\\rho\\) \u8fd1\u4f3c\u7b97\u6cd5(\\(\\rho\\)-approximation algorithm)\u3002

\u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5

\u5728\u770b\u5230\u8fd1\u4f3c\u7b97\u6cd5\u65f6\uff0c\u6211\u8111\u5b50\u91cc\u4e00\u4e0b\u5b50\u6d6e\u73b0\u51fa\u4e86\u968f\u673a\u7b97\u6cd5\u7684\u6982\u5ff5\uff0c\u540c\u6837\u662f\u6c42\u51c6\u786e\u89e3\u7684\u8fd1\u4f3c\u89e3\uff0c\u4e24\u8005\u6709\u4f55\u533a\u522b\u5462\uff1f

hint: \u6700\u574f\u60c5\u51b5

\u8fd1\u4f3c\u7b97\u6cd5\u548c\u968f\u673a\u7b97\u6cd5\u6700\u5927\u7684\u533a\u522b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u8bbe\u8ba1\u3001\u5206\u6790\u3001\u8ba8\u8bba\u8fd1\u4f3c\u7b97\u6cd5\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u90fd\u662f\u5b83\u7684\u6700\u574f\u60c5\u51b5\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd1\u4f3c\u7b97\u6cd5\u662f\u5b8c\u5168\u53ef\u63a7\u7684\uff0c\u800c\u7eaf\u7cb9\u7684\u968f\u673a\u7b97\u6cd5\u5219\u662f\u901a\u8fc7\u6982\u7387\u6765\u51cf\u5c11\u574f\u60c5\u51b5\u51fa\u73b0\u7684\u53ef\u80fd\uff0c\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u7ea6\u675f\u3002\u8fd1\u4f3c\u7b97\u6cd5\u6700\u574f\u4e5f\u5c31\u574f\u5230 \\(\\rho\\)\uff0c\u800c\u968f\u673a\u7b97\u6cd5\u6700\u574f\u53ef\u4ee5\u574f\u5230\u6d77\u62c9\u9c81\u5927\u9646\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u8303\u5f0f","title":"\u8fd1\u4f3c\u8303\u5f0f","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_approximation_scheme

\u8fd1\u4f3c\u8303\u5f0f(approximation scheme)\u6307\u7684\u662f\u5bf9\u4e8e\u67d0\u4e2a\u4f18\u5316\u95ee\u9898\u7684\u4e00\u65cf\u76f8\u540c\u6a21\u5f0f\u7684\u7b97\u6cd5\uff0c\u5b83\u4eec\u6ee1\u8db3\u5bf9\u4e8e\u786e\u5b9a\u7684 \\(\\epsilon > 0\\)\uff0c\u7b97\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

\u53ef\u4ee5\u7c97\u7cd9\u5730\u7406\u89e3\u4e3a\uff1a\u201c\u8303\u5f0f\u201d\u662f\u4e00\u4e2a\u8f93\u51fa\u4e3a\u7b97\u6cd5\u7684\u7279\u6b8a\u51fd\u6570\uff0c\u800c \\(\\epsilon\\) \u662f\u201c\u8303\u5f0f\u201d\u7684\u4e00\u4e2a\u53c2\u6570\uff0c\u5bf9\u4e8e\u7279\u5b9a\u7684 \\(\\epsilon\\)\uff0c\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u7b97\u6cd5\uff08\u8fd9\u4e9b\u7b97\u6cd5\u6709\u7740\u76f8\u540c\u7684\u6a21\u5f0f\uff09\uff0c\u800c\u8fd9\u4e9b\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u7684\u7b97\u6cd5\uff0c\u90fd\u89e3\u51b3\u540c\u4e00\u4e2a\u95ee\u9898\uff0c\u5e76\u4e14\u5bf9\u4e8e\u4efb\u610f\u56fa\u5b9a\u7684 \\(\\epsilon\\) \u5176\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

\u800c\u5173\u4e8e \\(\\epsilon > 0\\) \u8fd9\u4e2a\u7ea6\u675f\uff0c\u662f\u56e0\u4e3a\u8fd1\u4f3c\u6bd4\u5fc5\u5b9a\u5927\u4e8e 1\u3002

\u800c\u6b64\u65f6\uff0c\u8fd9\u4e00\u65cf\u7684\u7b97\u6cd5\u7684\u590d\u6742\u5ea6\u53ef\u4ee5\u8868\u793a\u4e3a \\(O(f(n, \\epsilon))\\)\uff0c\u5982 \\(O(n^{2/\\epsilon}), O((\\frac{1}{\\epsilon})^2n^3)\\)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(polynomial-time approximation scheme, PTAS)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u548c \\(\\frac{1}{\\epsilon}\\) \u90fd\u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u5b8c\u5168\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(fully polynomial-time approximation scheme, FPTAS)\u3002

\u4e3a\u4ec0\u4e48\u8981\u533a\u5206 PTAS \u548c FPTAS \u5462\uff1f\u6211\u4eec\u89c2\u5bdf \\(\\epsilon\\) \u5bf9\u7b97\u6cd5\u7684\u5f71\u54cd\uff1a\u968f\u7740 \\(\\epsilon\\) \u7684\u51cf\u5c0f\uff0c\u8fd1\u4f3c\u6bd4\u9010\u6e10\u53d8\u5c0f\uff0c\u5373\u51c6\u786e\u5ea6\u63d0\u9ad8\uff1b\u800c \\(\\frac{1}{\\epsilon}\\) \u53d8\u5927\uff0c\u800c\u901a\u5e38\u6765\u8bf4 \\(\\frac{1}{\\epsilon}\\) \u4e0e\u7b97\u6cd5\u590d\u6742\u5ea6\u90fd\u662f\u6b63\u76f8\u5173\u7684\uff0c\u56e0\u6b64\u4f1a\u5bfc\u81f4\u7b97\u6cd5\u590d\u6742\u5ea6\u5347\u9ad8\u3002\u5982\u679c\u8bf4\u8fd9\u4e2a\u8fd1\u4f3c\u8303\u5f0f\u662f FPTAS\uff0c\u90a3\u4e48\u4e3a\u4e86\u63d0\u9ad8\u51c6\u786e\u5ea6\u800c\u7f29\u5c0f \\(\\epsilon\\)\uff0c\u5bfc\u81f4\u7684\u590d\u6742\u5ea6\u53d8\u5316\u662f\u76f8\u5bf9\u53ef\u63a5\u53d7\u7684\uff08\u591a\u9879\u5f0f\u7ea7\u7684\u53d8\u5316\uff0c\u5982 \\((\\frac{1}{\\epsilon})^2n^3\\) \u5173\u4e8e \\(\\frac{1}{\\epsilon}\\) \u662f\u591a\u9879\u5f0f\u7ea7\u7684\uff09\uff1b\u7136\u800c\u5982\u679c\u5b83\u4e0d\u662f FPTAS\uff0c\u90a3\u4e48 \\(\\epsilon\\) \u7684\u7f29\u5c0f\u53ef\u80fd\u5e26\u6765\u6050\u6016\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff08\u5982 \\(n^{2/\\epsilon}\\) \u5173\u4e8e \\(\\epsilon\\) \u662f\u6307\u6570\u7ea7\u7684\uff09\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u82e5\u5e72\u5177\u4f53\u4f8b\u5b50\u505a\u5206\u6790\uff0c\u4ee5\u4fbf\u66f4\u597d\u5730\u7406\u89e3\u8fd1\u4f3c\u7b97\u6cd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-approximate-bin-packing","title":"[\u6848\u4f8b] Approximate Bin Packing","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Bin_packing

\u88c5\u7bb1\u95ee\u9898\u6307\u7684\u662f\uff0c\u7ed9\u5b9a \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\in [1,N]\\) \u4e2a item \u7684 size \u4e3a \\(S_i \\in (0,1]\\)\uff0c\u4e00\u4e2a bin \u7684\u5927\u5c0f\u4e3a \\(1\\)\uff0c\u5c1d\u8bd5\u5bfb\u627e\u6700\u5c11\u7684\uff0c\u80fd\u591f\u88c5\u8f7d\u6240\u6709 item \u7684 bin \u7684\u6570\u91cf\u3002

\ud83c\udf30 \u4f8b\u5b50

\u7ed9\u5b9a 7 \u4e2a item\uff0csize \u5206\u522b\u4e3a \\(0.2, 0.5, 0.4, 0.7, 0.1, 0.3, 0.8\\)\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

\u8fd9\u662f\u4e00\u4e2a NP hard \u95ee\u9898\uff0c\u73b0\u5728\u6211\u4eec\u8003\u8651\u4e09\u79cd\u8fd1\u4f3c\u89e3\u6cd5\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e09\u79cd\u90fd\u662f\u5728\u7ebf(online)\u89e3\u6cd5\uff0c\u5373\u5904\u7406 \\(item_i\\) \u65f6\u6211\u4eec\u4e0d\u77e5\u9053 \\(item_{i+1}\\sim item_{N}\\) \u7684\u60c5\u51b5\u3002\u4e4b\u540e\u6211\u4eec\u4f1a\u518d\u8ba8\u8bba\u79bb\u7ebf(offline)\u505a\u6cd5\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u77e5\u9053\u6240\u6709 item \u7684\u60c5\u51b5\u4ee5\u540e\u518d\u7ed9\u51fa\u7b56\u7565\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-next-fit-nf","title":"(online) Next Fit (NF)","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Next-fit_bin_packing

NF \u7b56\u7565\u603b\u662f\u9009\u62e9\u5f53\u524d\u6700\u540e\u4e00\u4e2a bin\uff0c\u82e5\u80fd\u591f\u5bb9\u7eb3\uff0c\u5219\u5c06\u5f53\u524d item \u653e\u5165\u5176\u4e2d\uff0c\u5426\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(2M-1\\) \u4e2a bin\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

proof for 2M-1

\u6211\u4eec\u4ece NF \u7684\u7ed3\u679c\u51fa\u53d1\uff0c\u8bc1\u660e\u5f53 NF \u7684\u7ed3\u679c\u4e3a\u9700\u8981 \\(2M-1\\) \u6216 \\(2M\\) \u4e2a bin \u65f6\uff0c\u51c6\u786e\u89e3\u4e3a\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

\u5047\u8bbe \\(S(B_i)\\) \u8868\u793a\u7b2c \\(i\\) \u4e2a bin \u7684 size\uff0c\u5219\u6839\u636e NF \u7684\u5b9a\u4e49\uff0c\u6709\uff1a\\(S(B_{i}) + S(B_{i+1}) > 1\\)\uff08\u662f NF \u7684\u5fc5\u8981\u4e0d\u5145\u5206\u6761\u4ef6\uff09\u3002\u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f7f\u7528\u53cd\u8bc1\u6cd5\uff0c\u5047\u8bbe \\(S(B_{i}) + S(B_{i+1}) \\leq 1\\)\uff0c\u8fd9\u8bf4\u660e\u65e0\u8bba \\(B_{i+1}\\) \u4e2d\u6709\u591a\u5c11 item\uff0c\u90fd\u4e00\u5b9a\u80fd\u653e\u8fdb \\(B_i\\)\uff0c\u800c\u8fd9\u4e0e NF \u201c\\(B_i\\) \u653e\u4e0d\u4e0b\u4e86\u624d\u5f00\u59cb\u653e \\(B_{i+1}\\)\u201d \u7684\u6027\u8d28\u76f8\u8fdd\u80cc\u3002\u4e8e\u662f\u6211\u4eec\u5c06\u6240\u6709\u6876\u4e24\u4e24\u914d\u5bf9\uff1a

1.\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M-1\\) \u4e2a bin \u65f6\uff1a

\\[ \\left\\{ \\begin{aligned} S(B_1) + S(B_2) &> 1 \\\\ S(B_3) + S(B_4) &> 1 \\\\ \\vdots \\\\ S(B_{2M-3}) + S(B_{2M-2}) &> 1 \\\\ S(B_{2M-1}) &\\leq 1 \\end{aligned} \\right. \\\\ \\begin{aligned} &\\therefore \\sum_{i=1}^{2M-1} > \\sum_{i=1}^{2M-2} > M-1 \\\\ &\\therefore \\sum_{i=1}^{2M-1} \\geq M \\end{aligned} \\]

\u5373 item \u7684\u603b size \u81f3\u5c11\u4e3a M\uff0c\u5373\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

2.\u800c\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M\\) \u4e2a bin \u65f6\uff0c\u53ef\u4ee5\u8f6c\u5316\u4e3a \\(2M-1\\) \u7684\u60c5\u51b5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-first-fit-ff","title":"(online) First Fit (FF)","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/First-fit_bin_packing

FF \u7b56\u7565\u603b\u662f\u9009\u62e9\u7b2c\u4e00\u4e2a\u80fd\u653e\u4e0b\u5f53\u524d item \u7684 bin\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-best-fit-bf","title":"(online) Best Fit (BF)","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Best-fit_bin_packing

BF \u7b56\u7565\u603b\u662f\u9009\u62e9\u80fd\u591f\u5bb9\u7eb3\u5f53\u524d item \u4e14\u5269\u4f59\u7a7a\u95f4\u6700\u5c0f\u7684 bin\uff08\u5373 tightest\uff09\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

NF \u7b56\u7565\u4e5f\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

\u867d\u7136\u5728\u7ebf\u505a\u6cd5\u7531\u4e8e\u5bf9\u4fe1\u606f\u628a\u63e1\u7684\u4e0d\u5168\u9762\uff0c\u5728\u4e0d\u7279\u6b8a\u6784\u9020\u8f93\u5165\u7684\u60c5\u51b5\u4e0b\u751a\u81f3\u51e0\u4e4e\u4e0d\u53ef\u80fd\u8fbe\u5230\u6700\u4f18\u89e3\uff0c\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u4e2d\u6709\u5f88\u591a\u80fd\u5efa\u6a21\u4e3a\u88c5\u7bb1\u95ee\u9898\u7684\u95ee\u9898\uff0c\u90fd\u8981\u6c42\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\u89e3\u51b3\u3002\u56e0\u6b64\uff0c\u7814\u7a76\u5728\u7ebf\u505a\u6cd5\u8fd8\u662f\u6709\u5176\u610f\u4e49\u7684\u3002

\u6b64\u5916\uff0c\u5173\u4e8e\u5728\u7ebf\u505a\u6cd5\uff0c\u6709\u4e00\u4e2a\u7ed3\u8bba\uff1a

theorem

\u5bf9\u4e8e\u88c5\u7bb1\u95ee\u9898\uff0c\u5982\u679c\u9650\u5b9a\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\uff0c\u5219\u6700\u4f18\u7684\u8fd1\u4f3c\u89e3\u6cd5\uff0c\u5176\u6700\u574f\u60c5\u51b5\u7684\u7ed3\u679c\u4e5f\u81f3\u5c11\u9700\u8981\u51c6\u786e\u89e3\u7684 \\(\\frac{5}{3}\\)\u3002

PPT \u4e0a\u7684\u539f\u8bdd\u662f\uff0c\u65e0\u8bba\u54ea\u79cd\u5728\u7ebf\u505a\u6cd5\u4e5f\u81f3\u5c11\u9700\u8981\u4f7f\u7528 \\(\\frac{5}{3}\\) \u7684\u51c6\u786e\u89e3\u7ed9\u51fa\u7684\u6570\u91cf\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u4e2a \\(\\frac{5}{3}\\) \u662f\u9488\u5bf9\u6700\u574f\u89e3\u7684\u8ba8\u8bba\u3002\u56de\u987e\u300c\u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5\u300d\u8fd9\u4e2a block \u91cc\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5206\u6790\u8fd1\u4f3c\u89e3\uff0c\u90fd\u662f\u9488\u5bf9\u5176\u6700\u574f\u60c5\u51b5\u6765\u8bf4\u7684\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#offline-first-fit-decreasing-ffd","title":"(offline) First Fit Decreasing (FFD)","text":"

\u79bb\u7ebf\u505a\u6cd5\u7684\u4f18\u52bf\u5728\u4e8e\u5b83\u80fd\u591f\u83b7\u5f97\u6240\u6709 item \u7684\u4fe1\u606f\u4ee5\u6c42\u7edf\u7b79\u89c4\u5212\u3002\u8fd9\u91cc\u7ed9\u51fa\u7684\u8fd1\u4f3c\u505a\u6cd5\u662f\uff0c\u5c06 item \u6309\u7167 size \u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4f7f\u7528 FF\uff08\u6216 BF\uff0c\u7531\u4e8e\u5355\u8c03\u6027\uff0c\u4e24\u8005\u7b49\u4ef7\uff09\u3002

\ud83c\udf30 \u4f8b\u5b50

\u7ed9\u5b9a 7 \u4e2a item\uff08\u540c\u4e4b\u524d\u7684 \ud83c\udf30\uff09\uff0c\u7ecf\u8fc7\u6392\u5e8f\u540e\uff0c\u5b83\u4eec\u7684 size \u5206\u522b\u4e3a $0.8, 0.7, 0.5, 0.4, 0.3, 0.2, 0.1\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

FFD \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\frac{11}{9}M + \\frac{6}{9}\\) \u4e2a bin\uff08\u4e3a\u5565\u5c31\u8fde wiki \u4e5f\u4e0d\u7ea6 6/9\uff09\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-knapsack-problem","title":"[\u6848\u4f8b] Knapsack Problem","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Knapsack_problem

\u4e00\u4e2a\u4e0e\u88c5\u7bb1\u95ee\u9898\u5f88\u50cf\u7684\u95ee\u9898\u662f\u80cc\u5305\u95ee\u9898\u3002\u5176\u5927\u81f4\u63cf\u8ff0\u5982\u4e0b\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5bb9\u91cf\u4e3a \\(M\\) \u7684\u80cc\u5305\uff0c\u4ee5\u53ca \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\) \u4e2a item \u7684\u91cd\u91cf\u4e3a \\(w_i\\)\uff0c\u5176\u5229\u6da6\u4e3a \\(p_i\\)\u3002\u8981\u6c42\u5728\u4e0d\u8d85\u8fc7\u80cc\u5305\u5bb9\u91cf\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u5f97\u80cc\u5305\u4e2d\u7684\u5229\u6da6\u6700\u5927\u5316\u3002\uff08\u6211\u4e5f\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48 PPT \u4e0a\u4f1a\u628a\u5bb9\u91cf\u548c\u91cd\u91cf\u5173\u8054\u8d77\u6765\uff0canyway\uff0c\u5bb9\u91cf\u9650\u5236\u4e86 item \u7684\u91cd\u91cf\u548c\u3002\uff09

\u6ce8\u610f

\u6216\u8bb8\u5728\u5b66\u4e60 dp \u7684\u65f6\u5019\u4f60\u5df2\u7ecf\u63a5\u89e6\u8fc7\u80cc\u5305\u95ee\u9898\u4e86\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u8fd9\u91cc\u8ba8\u8bba\u7684\u80cc\u5305\u95ee\u9898\u6709\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u7279\u70b9\u5c31\u662f\uff0c\u5bb9\u91cf\u548c\u5229\u6da6\u90fd\u662f\u5b9e\u6570\uff0c\u66f4\u76f4\u767d\u7684\u6765\u8bf4\uff0c\u4f60\u6ca1\u529e\u6cd5\u901a\u8fc7\u5c06\u5bb9\u91cf\u6216\u5229\u6da6\u4f5c\u4e3a\u72b6\u6001\u6765 dp \u6c42\u51c6\u786e\u89e3\u3002

\u800c\u6839\u636e\u6bcf\u4e00\u4e2a\u7269\u54c1\u80fd\u5426\u81ea\u7531\u62c6\u5206\uff0c\u80cc\u5305\u95ee\u9898\u5206\u4e3a fractional version \u548c 0-1 version \u4e24\u7c7b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#fractional-version","title":"Fractional Version","text":"

\u5982\u679c\u6211\u4eec\u8bb0 \\(x_i\\in[0,1]\\) \u4e3a\u7b2c \\(i\\) \u4e2a item \u7684\u9009\u4e2d\u91cf\uff08\u5373\u5047\u8bbe item \u90fd\u662f\u8fde\u7eed\u53ef\u5206\u7684\uff09\uff0c\u5219\u7ea6\u675f\u6761\u4ef6\u53ef\u4ee5\u8868\u8ff0\u4e3a \\(\\sum_{i}^N w_ix_i \\leq M\\)\uff0c\u73b0\u5728\u6c42 \\(\\sum_{i}^{N} p_ix_i\\) \u7684\u6700\u5927\u503c\u3002

\ud83c\udf30 \u4f8b\u5b50

\u5047\u8bbe\u73b0\u5728 \\(M = 20.0\\)\uff0c\u5e76\u4e14 \\(N = 3\\)\uff0c\u5206\u522b\u662f\uff1a

\u5219\u6700\u4f18\u89e3\u4e3a \\(x_1 = 0, x_2 = 1, x_3 = \\frac{1}{2}\\)\uff0c\u6b64\u65f6 \\(\\sum_{i}^{N} p_ix_i = 31.5\\)\u3002

\u7531\u4e8e \\(x_i\\in[0,1]\\)\uff0c\u7ed9\u4e86\u6211\u4eec\u6781\u5927\u7684\u9009\u62e9\u81ea\u7531\uff0c\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u4efb\u610f\u591a\u7684\u67d0\u4e2a\u7269\u54c1\u3002\u90a3\u4e48\u975e\u5e38\u6734\u7d20\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\uff0c\u5c3d\u53ef\u80fd\u591a\u5730\u9009\u62e9\u201c\u6027\u4ef7\u6bd4\u201d\u9ad8\u7684\u7269\u54c1\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u6309\u7167 \\(\\frac{p_i}{w_i}\\)\uff08PPT \u79f0\u4e4b\u4e3a profit density\uff09\u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4ece\u5927\u5230\u5c0f\u4f9d\u6b21\u9009\u62e9\u7269\u54c1\uff0c\u76f4\u5230\u80cc\u5305\u88c5\u6ee1\u4e3a\u6b62\u3002

\u4e0d\u8fc7\u8be5\u505a\u6cd5\u5df2\u7ecf\u662f\u51c6\u786e\u89e3\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u5bf9\u5b83\u8fdb\u884c\u5173\u4e8e\u8fd1\u4f3c\u7b97\u6cd5\u7684\u8ba8\u8bba\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#0-1-version","title":"0-1 Version","text":"

\u76f8\u8f83\u4e8e fractional version\uff0c0-1 version \u8981\u6c42 \\(x_i \\in \\{0,1\\}\\)\uff0c\u6362\u53e5\u8bdd\u8bf4\u6bcf\u4e00\u4e2a\u7269\u54c1\u8981\u4e48\u9009\u8981\u4e48\u4e0d\u9009\u3002\u8fd9\u662f\u4e00\u4e2a\u7ecf\u5178\u7684 NPC \u95ee\u9898\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528\u8fd1\u4f3c\u7b97\u6cd5\u6765\u6c42\u8f83\u4f18\u89e3\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8d2a\u5fc3\u505a\u6cd5","title":"\u8d2a\u5fc3\u505a\u6cd5","text":"

\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\uff0c\u8d2a\u5fc3\u7b56\u7565\u53ef\u4ee5\u662f\u603b\u662f\u9009\u53ef\u4ee5\u653e\u5f97\u4e0b\u7684\u3001\u8fd8\u6ca1\u653e\u5165\u4e2d\u7684\uff0c\u5229\u6da6\u6700\u5927\u7684\u6216 \\(\\frac{p_i}{w_i}\\) \u6700\u5927\u7684\u3002\u8fd9\u4e9b\u505a\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u90fd\u662f 2\u3002

proof for rho = 2

\u6211\u4eec\u7528 \\(p_\\text{max}\\) \u8868\u793a\u6240\u6709 item \u4e2d\u6700\u5927\u7684\u5229\u6da6\uff0c\u7528 \\(P_\\text{optimal}\\) \u8868\u793a\u51c6\u786e\u89e3\uff0c\\(P_\\text{greedy}\\) \u8868\u793a\u6211\u4eec\u4f7f\u7528\u8d2a\u5fc3\u505a\u6cd5\u5f97\u5230\u7684\u7b54\u6848\u3002\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u8fd1\u4f3c\u6bd4\u7684\u8ba1\u7b97\u8868\u8fbe\u5f0f\u4e3a\uff1a

\\[ \\rho = \\max( \\frac{P_\\text{optimal}}{P_\\text{greedy}}, \\frac{P_\\text{greedy}}{P_\\text{optimal}} ) \\]

\u4e0b\u9762\u662f\u8bc1\u660e\u8fc7\u7a0b\uff1a

\\[ \\left\\{ \\begin{aligned} & p_\\text{max} \\leq P_\\text{greedy} & (1)\\\\ & P_\\text{optimal} \\leq P_\\text{greedy} + p_\\text{max} & (2) \\end{aligned} \\right. \\]

\u5c06 \\((1)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\) \u5f97\uff1a

\\[ \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 1 \\quad (3) \\]

\u5c06 \\((2)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\)\uff0c\u5e76\u4ee3\u5165 \\((3)\\) \u5f97\uff1a

\\[ \\frac{P_\\text{optimal}}{P_\\text{greedy}} \\leq 1 + \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 2 \\]

PPT \u7684\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0d\u7b49\u5f0f\uff0c\u867d\u7136\u6210\u7acb\uff0c\u4f46\u662f\u597d\u50cf\u6ca1\u8d77\u5230\u4f5c\u7528\uff0c\u6211\u5c31\u6269\u5c55\u4e00\u4e0b\u5199\u5728\u8fd9\u91cc\u6c42\u4e2a\u773c\u719f\u4e86\uff1a

\\[ p_\\text{max} \\leq P_\\text{greedy} \\leq P_\\text{optimal} \\leq P_\\text{frac} \\]

\u5176\u4e2d \\(P_\\text{frac}\\) \u6307\u7684\u662f\u540c\u6837\u7684\u6570\u636e\u4e0b fractional version \u7684\u7b54\u6848\u3002

\u8865\u5145\u7ed3\u8bba\uff1a\u80cc\u5305\u95ee\u9898\u5177\u6709 FPTAS\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u52a8\u6001\u89c4\u5212\u505a\u6cd5","title":"\u52a8\u6001\u89c4\u5212\u505a\u6cd5","text":"

\uff08\u771f\u662f\u6df7\u4e71\uff09

\\[ W_{i,p} = \\text{the minimum weight of a collection from } \\{1, \u2026, i\\} \\text{ with total profit being exactly } p \\\\ W_{i,p} = \\left\\{ \\begin{aligned} &\\infty && i = 0 \\\\ &W_{i-1, p} && p_i > p \\\\ &\\min\\{W_{i-1, p}, w_i + W_{i-1, p-p_i}\\} && otherwise \\end{aligned} \\right.\\\\ i = 1, ..., n; p = 1, ..., n\\cdot p_\\text{max} \\\\ O(n^2p_\\text{max}) \\]

\u5982\u679c \\(p_\\text{max}\\) \u5f88\u5927\uff0c\u53ef\u4ee5\u8003\u8651\u5c06\u5b83\u4eec\u8fd1\u4f3c\u53d6\u6574\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u6d6e\u70b9\u6570\u5411\u4e0a\u53d6\u6574\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-the-k-center-problem","title":"[\u6848\u4f8b] The K-center Problem","text":"

link

Berkeley's: https://ugtcs.berkeley.edu/src/approx-sp19/scribe-notes-2.pdf

\uff08\u4e8c\u7ef4\uff09K \u4e2d\u5fc3\u95ee\u9898\u6307\uff1a\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684\u4e00\u7cfb\u5217 site\uff08\u5373\u70b9\uff09\uff0c\u5728\u5e73\u9762\u4e2d\u627e\u51fa \\(k\\) \u4e2a\u4e0d\u540c\u7684 center\uff0c\u8bb0 \\(site_i\\) \u5230\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u4e3a \\(dis_i\\)\uff0c\u6c42 \\(\\max \\{dis_i\\}\\) \u7684\u6700\u5c0f\u503c\u3002

\u6570\u5b66\u8bed\u8a00\u8868\u8fbe

\u8bbe \\(C = \\{c_1, c_2, ..., c_k\\}\\) \u4e3a \\(k\\) \u4e2a center\uff0c\\(S = \\{s_1, s_2, ..., s_n\\}\\) \u4e3a \\(n\\) \u4e2a site\uff0c\u6211\u4eec\u5b9a\u4e49 site \u5230\u5173\u4e8e center \u7684\u96c6\u5408 \\(C\\) \u7684\u8ddd\u79bb\u4e3a\uff1a

\\[ dis(s_i, C) = \\min_{c_i\\in C} \\{ dis(s_i, c_i) \\} \\]

\u5373 \\(s_i\\) \u5230\u8ddd\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u3002

\u5b9a\u4e49\u6700\u5927\u7684\u6700\u5c0f\u8986\u76d6\u534a\u5f84\u4e3a\uff1a

\\[ r(C) = \\max_{s_i\\in S} \\{ dis(s_i, C) \\} \\\\ \\]

\u73b0\u5728\u8981\u5bfb\u627e\u4e00\u4e2a \\(C\\) \u4f7f\u5f97 \\(r(C)\\) \u6700\u5c0f\uff08\\(|C| = k\\)\uff09\u3002

\u5f88\u7ed5\uff0c\u975e\u5e38\u7ed5\u3002\u63a5\u4e0b\u6765\u5f00\u59cb\u8bf4\u4eba\u8bdd\u3002

\u5e73\u9762\u7684\u95ee\u9898\u6211\u4eec\u5c31\u7528\u5e73\u9762\u7684\u601d\u8def\u6765\u770b\uff0c\u5c31\u662f\u4e00\u4e2a\u5e73\u9762\u4e0a\u6709\u4e00\u5806\u70b9\uff0c\u73b0\u5728\u6211\u8981\u5728\u4e0a\u9762\u627e \\(k\\) \u4e2a\u4e2d\u5fc3\u53bb\u753b\u5706\uff0c\u4f7f\u5f97\u8fd9 \\(k\\) \u4e2a\u5706\u80fd\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002\u73b0\u5728\u8981\u6c42\u6700\u5927\u7684\u90a3\u4e2a\u5706\u7684\u534a\u5f84\u6700\u5c0f\u80fd\u591a\u5c0f\u3002

\u5173\u4e8e\u8ddd\u79bb

PPT \u4e0a\u5bf9\u8ddd\u79bb\u505a\u4e86\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\u660e\uff0c\u4f46\u662f\u5176\u5b9e\u5e76\u4e0d\u662f\u8fd9\u4e2a\u95ee\u9898\u7684\u91cd\u70b9\uff0c\u4f46\u662f\u4e3a\u4e86\u4e25\u8c28\u6027\uff0c\u6211\u8fd8\u662f\u5728\u8fd9\u91cc\u653e\u4e0a\u4e09\u6761\u6027\u8d28\uff1a

3 property of 'distance'

\\[ \\begin{aligned} & dis(x,x) = 0 && \\text{(identity)} \\\\ & dis(x,y) = dis(y,x) && \\text{(symmetry)} \\\\ & dis(x,y) \\leq dis(x,z) + dis(z,y) && \\text{(triangle inequality)} \\end{aligned} \\]

\u788e\u788e\u5ff5

\u8fd9\u4e2a\u4e1c\u897f\u548c\u805a\u7c7b\u6709\u70b9\u50cf\u3002\u4e3b\u8981\u96be\u70b9\u5c31\u5728\u4e8e\uff0c\u6211\u4eec\u4e0d\u77e5\u9053\u5e94\u8be5\u4ee5\u4f55\u79cd\u7b56\u7565\u53bb\u8986\u76d6\u8fd9\u4e9b\u70b9\uff0c\u8981\u662f\u628a\u4e24\u4e2a\u8ddd\u79bb\u5f88\u8fdc\u7684\u70b9\u5212\u5728\u540c\u4e00\u4e2a\u5706\u5185\uff0c\u90a3\u7b54\u6848\u80af\u5b9a\u5c0f\u4e0d\u4e86\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u5c1d\u8bd5\u89e3\u51b3\u7684\u8fd9\u4e2a\u95ee\u9898\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#naive-greedy","title":"Naive Greedy","text":"

\u4e00\u4e2a\u505a\u6cd5\u662f\uff0c\u6211\u4eec\u6bcf\u6b21\u90fd\u9009\u62e9\u6700\u53ef\u80fd\u6210\u4e3a\u4e2d\u5fc3\u7684\u90a3\u4e2a\u70b9\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

  1. \u5982\u679c\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u6240\u6709\u70b9\u7684\u4e2d\u5fc3\uff1b
  2. \u5982\u679c\u4e0d\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u80fd\u4e00\u4e2a\u6700\u80fd\u8ba9 \\(r(C)\\) \u4e0b\u964d\u7684\uff1b

\u8fd9\u4e2a\u505a\u6cd5\u7684 bug \u6bd4\u8f83\u5927\uff0c\u5047\u8bbe\u6211\u4eec\u7684\u70b9\u662f\u805a\u7c7b\u975e\u5e38\u660e\u663e\u7684\u4e24\u4e2a\u70b9\u4e91\uff0c\u90a3\u4e48\u7b2c\u4e00\u4e2a\u70b9\u5c31\u4f1a\u843d\u5728\u4e24\u4e2a\u70b9\u4e91\u4e4b\u95f4\uff0c\u8fd9\u5f88\u8822\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u6d6a\u8d39\u8fc7\u591a\u65f6\u95f4\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e0a\u3002

\u6ce8\u610f\uff0c\u968f\u7740 center \u7684\u589e\u52a0\uff0c\u539f\u6765\u4ee5 \\(c_i\\) \u4e3a center \u7684 site \u5f88\u53ef\u80fd\u4ee5\u6700\u65b0\u63d2\u5165\u7684 \\(c_j\\) \u4e3a center\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#2r-greedy","title":"2r-Greedy","text":"

\u65e2\u7136\u6b63\u5411\u505a\u5f88\u56f0\u96be\uff0c\u90a3\u6211\u4eec\u80fd\u4e0d\u80fd\u53cd\u7740\u505a\u5462\uff1f\u6709\u4e00\u79cd\u5957\u8def\u53eb\u4e8c\u5206\u7b54\u6848\uff0c\u5373\u5148\u731c\u7b54\u6848\uff0c\u518d\u9a8c\u8bc1\u662f\u5426\u662f\u7b54\u6848\u3002\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u8fd9\u4e2a\u601d\u60f3\uff0c\u5373\u5148\u731c\u4e00\u4e2a \\(r\\)\uff0c\u7136\u540e\u5c1d\u8bd5\u7528 \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u6240\u6709\u70b9\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u5047\u8bbe\u51c6\u786e\u89e3\u5bf9\u5e94\u7684\u4e00\u4e2a center \u96c6\u5408\u4e3a \\(C^*\\)\uff0c\u90a3\u4e48 \\(\\forall r(C_x) \\geq r(C^*)\\) \u7684 \\(C_x\\) \u90fd\u5fc5\u5b9a\u5b58\u5728\u8986\u76d6\u65b9\u6848\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6211\u4eec\u80fd\u591f\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u7ea6\u675f\u51c6\u786e\u89e3 \\(r(C^*) \\leq r(C_x)\\)\u3002

\u5982\u4f55\u201c\u9a8c\u8bc1\u201d

\u53ef\u662f\uff0c\u4ed4\u7ec6\u4e00\u60f3\u6211\u4eec\u53d1\u73b0\uff0c\u4e8c\u5206\u7b54\u6848\u7684\u8fc7\u7a0b\u4e2d\uff0c\u201c\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\u201d\u8fd9\u4ef6\u4e8b\u4e5f\u4e0d\u597d\u505a\uff0c\u867d\u7136\u6211\u4eec\u6709\u534a\u5f84\uff0c\u4f46\u662f\u6211\u4eec\u4e5f\u5f88\u96be\u627e\u5230\u4e00\u4e2a\u6700\u597d\u7684\u65b9\u6848\u6765\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002

hint: \u8fd1\u4f3c\u7b97\u6cd5

\u4e8e\u662f\u6211\u4eec\u7684\u8fd1\u4f3c\u7b97\u6cd5\u5c31\u53ef\u4ee5\u5927\u5c55\u62f3\u811a\u4e86\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u6240\u8c13\u7684\u8fd1\u4f3c\u7b97\u6cd5\uff0c\u6307\u7684\u662f\u4f7f\u7528\u4e8c\u5206\u7b54\u6848\u6c42\u89e3 \\(r(C)\\) \u8fd9\u4e2a\u7b97\u6cd5\uff0c\u800c\u975e\u5224\u65ad \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u80fd\u5426\u8986\u76d6\u6240\u6709\u70b9\u7684\u7b97\u6cd5\u3002\u8fd9\u4e00\u70b9\u975e\u5e38\u91cd\u8981\uff01

\u800c\u5173\u4e8e\u7b97\u6cd5\u5177\u4f53\u5982\u4f55\u64cd\u4f5c\uff0c\u8bf7\u63a5\u7740\u770b\u3002

\u9996\u5148\uff0c\u6211\u4eec\u518d\u6b21\u68b3\u7406\u4e00\u4e0b\u8fd9\u4e2a\u7b97\u6cd5\uff0c\u5b83\u5305\u542b\u5185\u5916\u4e24\u5c42\uff0c\u9996\u5148\u5916\u90e8\u901a\u8fc7\u5728\u7b54\u6848\u7684\u5019\u9009\u533a\u95f4\uff08\u5373 \\((0, r_\\text{max}]\\)\uff0c\\(r_\\text{max}\\) \u4e3a\u6700\u8fdc\u7684\u4e24\u4e2a\u70b9\u7684\u8ddd\u79bb\uff09\u4e8c\u5206\u5019\u9009\u503c\uff0c\u63a5\u7740\u901a\u8fc7\u5224\u5b9a\u7b97\u6cd5\u6765\u5224\u5b9a\u63a5\u4e0b\u6765\u7684\u4e8c\u5206\u65b9\u5411\u3002

\u7136\u800c\uff0c\u7531\u4e8e\u6211\u4eec\u5f88\u96be\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5b9e\u73b0\u51c6\u786e\u7684\u201c\u5224\u5b9a\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u91c7\u53d6\u8fd9\u6837\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u7b56\u7565\u6765\u8fdb\u884c\u5bbd\u6cdb\u7684\u5fc5\u8981\u6761\u4ef6\u7b5b\u9009\uff1a

\u6d41\u7a0b\u63cf\u8ff0

\u8bbe \\(C_x\\) \u8868\u793a\u9009\u4e2d\u7684 center\uff0c\\(S_x\\) \u8868\u793a\u5c1a\u672a\u88ab\u4efb\u4f55\u5706\u8986\u76d6\u7684 site\uff0c\\(r_x\\) \u8868\u793a\u5f53\u524d\u4e8c\u5206\u51fa\u6765\u7684\uff0c\u8981\u6211\u4eec\u5224\u65ad\u7684\u534a\u5f84\uff0c\\(S\\) \u4f9d\u7136\u8868\u793a\u6240\u6709 site \u7684\u96c6\u5408\uff1a

  1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff1b
  2. \u5f53 \\(S_x \\not = \\emptyset\\) \u65f6\uff08\u5373\u8fd8\u6709\u70b9\u6ca1\u88ab\u8986\u76d6\u65f6\uff09\uff0c\u91cd\u590d\u8fd9\u4e9b\u64cd\u4f5c\uff1a
    1. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff08\u5373\u5c06 \\(s_i\\) \u5f53\u4f5c\u4e00\u4e2a center\uff09\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff08\u5373 \\(s_i\\) \u5fc5\u5b9a\u88ab\u8986\u76d6\uff09\uff1b
    2. \u5220\u9664 \\(S_x\\) \u4e2d\u6240\u6709\u8ddd\u79bb \\(s_i\\) \u4e0d\u8db3 \\(r_x\\) \u7684\u70b9\uff08\u5373\u5220\u9664\u6ee1\u8db3 \\(dis(s_i, s_j) \\leq r_x\\) \u7684\u6240\u6709 \\(s_k \\in S_x\\)\uff09\uff1b
  3. \u5f53\u6240\u6709\u70b9\u90fd\u88ab\u8986\u76d6\u540e\uff1a
    1. \u5982\u679c \\(|C_x| \\leq k\\)\uff0c\u5219\u8fd4\u56de yes\uff1b
    2. \u5426\u5219\u8fd4\u56de no\uff1b

\u5982\u679c\u8fd4\u56de yes\uff0c\u5219\u4e0b\u4e00\u4e2a \\(r_x\\) \u5e94\u5f53\u53d6\u66f4\u5c0f\u7684 \\(r_x\\)\uff1b\u5982\u679c\u8fd4\u56de no\uff0c\u4e0b\u4e00\u6b21\u5e94\u8be5\u53d6\u66f4\u5927\u7684 \\(r_x\\)\uff08\u7a0d\u5019\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\uff09\u3002

\u73b0\u5728\u5bf9\u5176\u505a\u8fdb\u4e00\u6b65\u89e3\u91ca\u3002\u8fd9\u662f\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u505a\u6cd5\uff0c\u65e8\u5728\u6bcf\u6b21\u5bfb\u627e\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4f5c\u4e3a\u65b0\u7684 center\uff0c\u7528\u4e00\u4e2a\u534a\u5f84\u4e3a \\(2r_x\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u70b9\u3002\u901a\u8fc7\u5224\u65ad\u8fd9\u6837\u6240\u9700\u8981\u7684 center \u6570\u91cf\u662f\u5426\u8d85\u8fc7 \\(k\\) \u6765\u5224\u65ad\u662f\u5426\u80fd\u591f\u8986\u76d6\u3002\u63a5\u4e0b\u6765\u5f88\u7ed5\uff0c\u8bf7\u4e00\u6b65\u4e00\u6b65\u7684\u770b\uff1a

  1. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u6210\u529f\u65f6\uff0c\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u53ef\u4ee5\u8986\u76d6\u6240\u6709\u70b9\uff1b
  2. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u5931\u8d25\u65f6\uff0c\u4e0d\u80fd\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u4e0d\u80fd\u8986\u76d6\u6240\u6709\u70b9\uff0c\u56e0\u4e3a\u542f\u53d1\u5f0f\u65b9\u6848\u5e76\u4e0d\u662f\u6700\u4f18\u65b9\u6848\uff1b\u4f46\u662f\u80fd\u8bf4\u660e\u5fc5\u5b9a\u4e0d\u5b58\u5728 \\(r_x\\) \u7684\u8986\u76d6\uff0c\u5373 \\(r_x \\leq r(C^*)\\)\uff08\u8bc1\u660e\u89c1\u4e0b\u65b9 lemma\uff09\uff1b
lemma

\u5047\u8bbe\u534a\u5f84\u4e3a \\(r\\)\uff0c\u4ee5 \\(c\\) \u4e3a\u5706\u5fc3\u7684\u5706 \\(C\\) \u8986\u76d6\u4e86 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\u3002

\u90a3\u4e48\uff0c\u5bf9\u4e8e\u56fa\u5b9a\u7684\u534a\u5f84 \\(r'\\)\uff0c\u8981\u60f3\u53d6\u4efb\u610f\u7684 \\(s_i \\in S\\) \u4e3a\u5706\u5fc3\uff0c\u5f62\u6210\u7684\u5706 \\(C_i\\)\uff0c\u603b\u662f\u80fd\u8986\u76d6 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\uff0c\u5219 \\(r' \\geq 2r\\)\u3002

lemma \u7684\u8bc1\u660e\u5c31\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\u4e86\uff0c\u8bc1\u660e\u7684\u5173\u952e\u662f\u8003\u8651\u4e24\u70b9\u5206\u5e03\u5728\u76f4\u5f84\u4e24\u7aef\u7684\u60c5\u51b5\u3002

\u8fd9\u4e2a\u5f15\u7406\u7684\u9644\u52a0\u7ed3\u8bba\u5c31\u662f\uff1a

\\[ \\forall i \\quad C \\subset C_i \\]

\u5373\u4ee5 \\(r\\) \u4e3a\u534a\u5f84\u7684\u6700\u4f18\u8986\u76d6\u5706\uff0c\u4e00\u5b9a\u80fd\u88ab\u4ee5\u4efb\u610f \\(s_i\\) \u4e3a\u5706\u5fc3\u3001\\(2r\\) \u4e3a\u534a\u5f84\u7684\u5706\u6240\u8986\u76d6\u3002

\u5f53\u6211\u4eec\u53d1\u73b0\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 1. \u65f6\uff0c\u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u6211\u4eec\u786e\u5b9e\u5f97\u5230\u4e86\u4e00\u4e2a\u8ddd\u79bb \\(r(C^*)\\) \u66f4\u8fd1\u7684\u4e0a\u754c \\(2r_x\\)\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 1. \u786e\u5b9a\u7684\u4e0a\u754c\uff0c\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

\u5f53\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 2. \u65f6\uff0c\u6211\u4eec\u4e0d\u77e5\u9053 \\(2r_x\\) \u548c \\(r(C^*)\\) \u7684\u5927\u5c0f\u5173\u7cfb\uff0c\u4f46\u662f\u77e5\u9053 \\(r_x\\) \u548c \\(r(C^*)\\) \u7684\u5173\u7cfb\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 2. \u786e\u5b9a\u7684\u4e0b\u754c\uff0c\u4e5f\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

\u800c\u6700\u7ec8\uff0c\u6211\u4eec\u4f1a\u5f97\u5230\u4e00\u4e2a\u6700\u7ec8\u7684 \\(r_{x_0}\\)\uff0c\u6ee1\u8db3\uff1a\\(r_{x_0} \\leq r(C^*) \\leq 2r_{x_0}\\)\uff08\u5f0f\u4e2d\u54ea\u8fb9\u80fd\u53d6\u7b49\u53d6\u51b3\u4e8e\u6700\u540e\u843d\u5728 1. \u8fd8\u662f 2.\uff09\u3002

\u800c\u6211\u4eec\u6700\u7ec8\u7ed9\u51fa\u7684\u7b54\u6848\u662f \\(2r_{x_0}\\)\uff08\u56e0\u4e3a \\(r_{x_0}\\) \u4e0d\u6ee1\u8db3\u6761\u4ef6\uff0c\u4e0d\u662f\u89e3\uff0c\u66f4\u4e0d\u662f\u8fd1\u4f3c\u89e3\uff09\u3002

\u73b0\u5728\uff0c\u6211\u4eec\u6765\u8ba1\u7b97\u8fd1\u4f3c\u6bd4\uff1a

\\[ \\begin{aligned} & \\begin{aligned} \\because \\;\\;\\; & r_{x_0} \\leq r(C^*) \\leq 2r_{x_0} \\\\ & \\frac{1}{2} \\leq \\frac{r(C^*)}{2r_{x_0}} \\leq 1 \\\\ & 1 \\leq \\frac{2r_{x_0}}{r(C^*)} \\leq 2 \\end{aligned} \\\\ & \\therefore \\; \\rho = \\max\\{ \\frac{ 2 r_{x_0} }{ r(C^*) }, \\frac{ r(C^*) }{ 2 r_{x_0} } \\} = 2 \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#smarter-greedy","title":"Smarter Greedy","text":"

\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u4e0a\u9762\u90a3\u4e2a\u505a\u6cd5\u603b\u662f\u968f\u673a\u7684\u9009\u53d6\u65b0\u7684 \\(c_i\\)\uff0c\u4f46\u662f\u5bf9\u4e8e center \u7684\u9009\u53d6\uff0c\u6211\u4eec\u5176\u5b9e\u53ef\u4ee5\u603b\u662f\u9009\u62e9\u8ddd\u79bb\u5df2\u6709\u7684 center \u6700\u8fdc\u7684\u70b9\uff0c\u6b64\u5916\uff0c\u5f53 \\(|C| > k\\) \u65f6\uff0c\u6211\u4eec\u4e5f\u6ca1\u5fc5\u8981\u7ee7\u7eed\u505a\u4e86\u3002

\u6d41\u7a0b\u63cf\u8ff0

  1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff0c\\(S_x = S\\)\uff1b
  2. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
  3. \u5f53 \\(|C_x| \\leq k\\) \u4e14 \\(S_x \\not = \\emptyset\\) \u65f6\uff0c\u91cd\u590d\u4ee5\u4e0b\u6b65\u9aa4\uff1a
    1. \u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u8fd9\u4e2a site \u6ee1\u8db3 \\(\\forall s_j \\in S_x \\quad dis(s_i, C_x) \\geq dis(s_j, C_x)\\)\uff08\u5373\u8fd9\u4e2a\u70b9\u662f\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4e2d\u8ddd\u79bb \\(C_x\\) \u6700\u8fdc\u7684\u70b9\uff09\uff1b
    2. \u5c06 \\(s_i\\) \u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
  4. \u5982\u679c \\(|C_x| \\leq k\\) \u4e14 \\(S_x = \\emptyset\\)\uff0c\u5219\u8fd4\u56de yes\uff1b\u5426\u5219\u8fd4\u56de no\u3002

\u7531\u4e8e\u8fd9\u4e2a\u505a\u6cd5\u5b9e\u9645\u4e0a\u53ea\u662f\u4f18\u5316\u4e86\u4e00\u4e0b\u542f\u53d1\u5f0f\u7684\u7b56\u7565\uff0c\u5e76\u6ca1\u6709\u6539\u53d8\u5185\u6838\uff0c\u6240\u4ee5\u5176\u8fd1\u4f3c\u6bd4\u4ecd\u7136\u662f \\(2\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u603b\u7ed3","title":"\u603b\u7ed3","text":"

\u5173\u4e8e\u7b97\u6cd5\u7684\u8bbe\u8ba1\uff0c\u6211\u4eec\u8003\u8651\u8fd9\u4e09\u4e2a\u7ef4\u5ea6\uff1a

  1. \u6700\u4f18\u6027(optimality)\uff1a\u5373\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
  2. \u9ad8\u6548\u6027(efficiency)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u9ad8\u6548\uff1b
  3. \u666e\u904d\u6027(all instances)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u666e\u904d\u9002\u7528\u4e8e\u6240\u6709\u7684\u60c5\u51b5\uff1b

\u5018\u82e5\u4e00\u4e2a\u89e3\u6cd5\uff1a

  1. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u9ad8\u6548\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u7279\u6b8a\u60c5\u51b5\u80fd\u9ad8\u6548\u6c42\u51c6\u786e\u89e3\uff1b
  2. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u6240\u6709\u60c5\u51b5\u90fd\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
  3. \u540c\u65f6\u6ee1\u8db3\u9ad8\u6548\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u53ef\u80fd\u662f\u4e2a\u8fd1\u4f3c\u7b97\u6cd5\uff1b

\u5c31\u7b97 N=NP \u6210\u7acb\uff0c\u6211\u4eec\u4ecd\u7136\u65e0\u6cd5\u4fdd\u8bc1\u4e09\u4e2a\u613f\u671b\u4e00\u6b21\u6ee1\u8db3\u3002

\u4e0d\u662f\u5f88\u660e\u767d\u6700\u540e\u4e00\u53e5\u8bdd\u5982\u4f55\u7406\u89e3\uff0c\u4f46\u662f\u8fd9\u4e00\u90e8\u5206\u5e94\u8be5\u5c31\u662f\u770b\u4e2a\u773c\u719f\uff0c\u4e0d\u662f\u5f88\u91cd\u8981\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/","title":"Lecture 12 | Local Search","text":"

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

\u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

\u5373\u5148\u627e\u5230\u4e00\u4e2a\u53ef\u884c\u89e3\uff0c\u4ee5\u53ca\u91cf\u5316\u5176\u4f18\u7a0b\u5ea6\u7684\u76ee\u6807\u51fd\u6570\uff0c\u518d\u5728\u8fd9\u4e2a\u53ef\u884c\u89e3\u4e0a\u5bfb\u6c42\u4f18\u5316\uff0c\u76f4\u5230\u8fbe\u5230\u5c40\u90e8\u6700\u4f18\u89e3\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-vertex-cover-problem","title":"[\u6848\u4f8b] The Vertex Cover Problem","text":"

\u9876\u70b9\u8986\u76d6\u95ee\u9898(vertex cover problem)\u6307\u7ed9\u5b9a\u4e00\u4e2a\u65e0\u5411\u56fe \\(G=(V,E)\\)\uff0c\u627e\u5230\u4e00\u4e2a\u6700\u5c0f\u7684\u9876\u70b9\u96c6 \\(S\\subseteq V\\)\uff0c\u4f7f\u5f97\u6bcf\u6761\u8fb9 \\((u,v)\\) \u90fd\u81f3\u5c11\u6709\u4e00\u4e2a\u7aef\u70b9\u5728 \\(S\\) \u4e2d\uff08\u5373 \\(u\\in S \\lor v\\in S\\)\uff09\u3002

\u8fd9\u4e2a\u95ee\u9898\u7684\u53ef\u884c\u89e3\u4e3a \\(S = V\\)\uff0c\u5373\u5b8c\u5168\u8986\u76d6\uff0c\u5176\u76ee\u6807\u51fd\u6570\u4e3a \\(cost(S) = |S|\\)\u3002\u5373\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528 local search \u6765\u964d\u4f4e \\(|S|\\)\u3002

\u7ed9\u51fa\u51e0\u79cd\u6848\u4f8b\u4ee5\u53ca\u53ef\u89c6\u5316\uff0c\u8bf4\u660e\u5c40\u90e8\u641c\u7d22\u5bb9\u6613\u5931\u6548\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","title":"\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","text":"

\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5(the Metropolis algorithm)\u7684\u8fc7\u7a0b\uff1a

\u51d1\u5408\u4e00\u4e0b\uff0c\u4e4b\u540e\u6709\u7a7a\u518d\u6539\u3002

SolutionType Metropolis() {   Define constants k and T;\nStart from a feasible solution S \\in FS ;\nMinCost = cost(S);\nwhile (1) {\nS\u2019 = Randomly chosen from N(S); CurrentCost = cost(S\u2019);\nif ( CurrentCost < MinCost ) {\nMinCost = CurrentCost;    S = S\u2019;\n}\nelse {\nWith a probability e^{-\\Delta cost / (kT)}, let S = S\u2019;\nelse  break;\n}\n}\nreturn S;\n}\n

\u6ce8\uff1a\u5bf9\u4e8ecase 1\uff0c\u6709\u4e00\u5b9a\u6982\u7387\u53ef\u4ee5\u8df3\u51falocal optimum\u5f97\u5230\u6b63\u786e\u89e3\u3002\u4f46\u662f\u5bf9case 0\uff0c\u6709\u53ef\u80fd\u5728\u52a01\u548c\u51cf1\u4e4b\u95f4\u65e0\u9650\u9707\u8361\u2026\u2026 \u6ce8\uff1a\u5f53\uff08\u6e29\u5ea6\uff09T\u5f88\u9ad8\u65f6\uff0c\u4e0a\u5761\u7684\u6982\u7387\u51e0\u4e4e\u4e3a1\uff0c\u5bb9\u6613\u5f15\u8d77\u5e95\u90e8\u9707\u8361\uff1b\u5f53T\u63a5\u8fd10\u65f6\uff0c\u4e0a\u5761\u6982\u7387\u51e0\u4e4e\u4e3a0\uff0c\u63a5\u8fd1\u539f\u59cb\u7684\u68af\u5ea6\u4e0b\u964d\u6cd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6a21\u62df\u9000\u706b","title":"\u6a21\u62df\u9000\u706b","text":"

\u6a21\u62df\u9000\u706b(simulated annealing)

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-hopfield-neural-networks","title":"[\u6848\u4f8b] Hopfield Neural Networks","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Hopfield_network

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-maximum-cut-problem","title":"[\u6848\u4f8b] The Maximum Cut Problem","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Maximum_cut

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/","title":"Lecture 13 | Randomized Algorithms","text":"

\u7ea6 25 \u4e2a\u5b57

\u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

\u4e00\u4e9b\u6982\u5ff5\u8bf4\u660e

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#the-hiring-problem","title":"The Hiring Problem","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#modified-quick-sort","title":"Modified Quick Sort","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec14/","title":"Lecture 14 | Parallel","text":"

\u7ea6 3 \u4e2a\u5b57

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/","title":"Lecture 15 | External Sorting","text":"

\u7ea6 6424 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f

link

Wikipedia: https://en.wikipedia.org/wiki/External_sorting

\u5916\u6392\u5e8f\u4e0e\u6570\u636e\u5e93\u7cfb\u7edf\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\u6709\u4ea4\u53c9\u5173\u7cfb\uff0c\u5f53\u9700\u8981\u6392\u5e8f\u7684\u6570\u636e\u8fc7\u5927\uff0c\u800c\u65e0\u6cd5\u88ab\u5b8c\u5168\u653e\u5728\u5185\u5b58\u65f6\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u65e0\u6cd5\u88ab\u5e94\u7528\u3002\u6b64\u65f6\u9700\u8981\u4f7f\u7528\u5916\u6392\u5e8f\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u5728\u66f4\u5927\u7684\u5c3a\u5ea6\u4e0a\u8fdb\u884c\u7c7b\u4f3c\u5f52\u5e76\u7684\u64cd\u4f5c\u3002

\u800c\u6b63\u56e0\u4e3a\u6b64\uff0c\u5916\u90e8\u6392\u5e8f\u7684\u8fc7\u7a0b\u4e0e\u786c\u4ef6\u8bbe\u8ba1\u6709\u4e00\u5b9a\u5173\u7cfb\u3002

\u4e0e\u786c\u4ef6\u76f8\u5173\u7684\u4e00\u4e9b\u8bf4\u660e

\u5177\u4f53\u6765\u8bf4\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u6392\u5e8f\u7684\u5bf9\u8c61\u90fd\u662f\u653e\u5728\u5185\u5b58\u91cc\u7684\u4e00\u4e9b\u6570\u636e\uff0c\u4f8b\u5982\u4e00\u4e2a int \u6570\u7ec4\u3002\u7136\u800c\u5916\u90e8\u6392\u5e8f\u6392\u5e8f\u7684\u5bf9\u8c61\uff0c\u6216\u8005\u8bf4\u8981\u6392\u5e8f\u7684\u90a3\u4e2a\u201c\u6570\u7ec4\u201d\uff0c\u6ca1\u6cd5\u88ab\u5b8c\u6574\u5730\u5b58\u5728\u5185\u5b58\u91cc\uff0c\u5b83\u4eec\u90fd\u88ab\u5b58\u50a8\u5728\u786c\u76d8\u4e4b\u7c7b\u7684\u975e\u6613\u5931\u4ecb\u8d28\u4e2d\uff0c\u800c\u4ece\u8fd9\u79cd\u4ecb\u8d28\u91cc\u8bfb\u53d6\u6570\u636e\u5f80\u5f80\u5177\u6709\u8f83\u5927\u7684\u5f00\u9500\uff0c\u6240\u4ee5\u6211\u4eec\u603b\u662f\u201c\u4e00\u5757\u4e00\u5757\u201d\u4ece\u91cc\u9762\u90a3\u6570\u636e\u3002

\u6253\u4e2a\u6bd4\u65b9\uff0c\u4f60\u73b0\u5728\u9700\u8981\u5bf9\u4e00\u6574\u4e2a\u56fe\u4e66\u9986\uff08\u786c\u76d8\uff09\u7684\u4e66\u505a\u6392\u5e8f\uff0c\u4f46\u662f\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u6700\u591a\u653e\u4e0b\u4e09\u5341\u672c\u4e66\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4f60\u4e00\u6b21\u6700\u591a\u5904\u7406\u4e09\u5341\u672c\u4e66\u3002\u800c\u4e3a\u4e86\u4ece\u56fe\u4e66\u9986\u4e2d\u83b7\u53d6\u9700\u8981\u6392\u7684\u4e66\uff0c\u4f60\u5f97\u5148\u627e\u5230\u8fd9\u4e9b\u4e66\u5728\u54ea\uff08seek\uff09\uff0c\u7136\u540e\u518d\u628a\u8fde\u7eed\u7684\u4e09\u5341\u672c\u4e66\u62ff\u51fa\u6765\uff08block transfer\uff09\uff0c\u653e\u5230\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u518d\u6392\u5e8f\uff0c\u800c\u4e3a\u4e86\u7ed9\u63a5\u4e0b\u6765\u4e09\u5341\u672c\u4e66\u817e\u4f4d\u7f6e\uff0c\u4f60\u8fd8\u5f97\u628a\u6392\u597d\u7684\u4e09\u5341\u672c\u4e66\u518d\u653e\u56de\u53bb\uff08\u5373\u8bb0\u5f55\u4e0b\u6392\u5e8f\u7ed3\u679c\uff0c\u540c\u6837\u4e5f\u662f\u4e00\u6b21 block transfer\uff09\u3002

\u7efc\u4e0a\u6240\u8ff0\uff0c\u5916\u90e8\u6392\u5e8f\u4e3b\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u6309\u7167\u600e\u6837\u7684\u7b56\u7565\u6765\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u6392\u5e8f\u3002

\u5bfc\u8bfb

\u7531\u4e8e ADS \u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u548c\u540c\u65f6\u671f\u6570\u636e\u5e93\u7cfb\u7edf\u8fd9\u95e8\u8bfe\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u6709\u540c\u6709\u5f02\uff0c\u6240\u4ee5\u6211\u6253\u7b97\u5148\u5728\u5927\u6982\u8bb2\u5916\u6392\u5e8f\u7684\u6838\u5fc3\u601d\u8def\uff0c\u518d\u5c55\u5f00 ADS \u8bfe\u7a0b\u4e2d\u7684\u5177\u4f53\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

\u5916\u6392\u5e8f\u7684\u57fa\u672c\u601d\u8def\u5c31\u662f\u5c06\u6570\u636e\u5206\u4e3a\u82e5\u5e72\u4e2a\u5c0f\u5757\uff0c\u7136\u540e\u5bf9\u6bcf\u4e2a\u5c0f\u5757\u8fdb\u884c\u6392\u5e8f\uff0c\u6700\u540e\u518d\u5c06\u8fd9\u4e9b\u5c0f\u5757\u5408\u5e76\u8d77\u6765\u3002\u800c\u6211\u4eec\u5e38\u8bf4\u7684\u5f52\u5e76\u6392\u5e8f\uff0c\u6307\u7684\u662f\u9012\u5f52\u5730\u5c06\u4e24\u5757\u5408\u6210\u4e00\u5757\uff0c\u800c\u6240\u8c13\u7684 \\(k\\) \u8def\uff08\\(k\\)-way\uff09\u5f52\u5e76\uff0c\u5c31\u662f\u5c06 \\(k\\) \u5757\u5408\u6210\u4e00\u5757\u3002

\u90a3\u4e48\u5982\u4f55\u5f52\u5e76\u5462\uff1f\u6211\u5c06\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u6765\u7b80\u5355\u9610\u8ff0\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u903b\u8f91\u7ef4\u5ea6","title":"\u903b\u8f91\u7ef4\u5ea6","text":"

\u5916\u90e8\u6392\u5e8f\u6240\u4f7f\u7528\u7684\u5f52\u5e76\u6392\u5e8f\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u548c\u666e\u901a\u7684\u5f52\u5e76\u6392\u5e8f\u4e00\u81f4\uff0c\u603b\u662f\u5c06 \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u5408\u5e76\u4e3a 1 \u4e2a\u6709\u5e8f\u5e8f\u5217\u3002

\u800c\u8fd9\u91cc\u7684\u201c\u6709\u5e8f\u5e8f\u5217\u201d\uff0c\u5728\u5916\u6392\u5e8f\u4e2d\u88ab\u79f0\u4e3a\u201crun\u201d\uff0c\u5373\u6bcf\u6b21\u5f52\u5e76\u6211\u4eec\u53e6 \\(k\\) \u4e2a run \u53d8\u6210\u4e00\u4e2a run\u3002\u6b63\u7740\u8bf4\u5c31\u662f\uff1a

run

\u4e00\u4e2a run \u6307\u7684\u662f\u4e00\u6bb5\u8fc7\u7a0b\u4e2d\u7684\u6570\u636e\uff0c\u5728\u672c\u6587\u4e2d\u7279\u6307\u5f85\u5f52\u5e76\u7684\u6709\u5e8f\u7684\u5e8f\u5217\uff0c\u5728 \\(k\\)-way merge \u4e2d\uff0c\u6211\u4eec\u603b\u662f\u5c06 \\(k\\) \u4e2a run \u5408\u5e76\u4e3a 1 \u4e2a run\u3002

\u8bf4\u660e

\u8fd9\u91cc\u7684 run \u7684\u5b9a\u4e49\u662f\u6211\u81ea\u5df1\u8111\u8865\u51fa\u6765\u7684\uff0c\u5e76\u4e0d\u786e\u5b9a\u662f\u5426\u4e25\u683c\uff0c\u4f46\u662f\u53ef\u4ee5\u4fdd\u8bc1\u7684\u662f\uff1a \u4e00\u4e2a run \u5728\u53c2\u4e0e merge \u4e4b\u524d\u80af\u5b9a\u5df2\u7ecf\u6709\u5e8f\u4e86\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a \"have already run\"\uff0c\u800c\u4e3a\u4e86\u4e0d\u6405\u7cca\u8bfb\u8005\u7684\u8111\u5b50\uff0c\u6211\u8fd9\u91cc\u5c31\u4ee5\u8fd9\u4e2a\u5b9a\u4e49\u4e3a\u51c6\u3002

\u4ece\u6267\u884c\u7684\u987a\u5e8f\u6765\u8bf4\uff0c\u5185\u6392\u5e8f\u4e2d\u7684\u5f52\u5e76\u6392\u5e8f\u662f\u4e00\u4e2a\u81ea\u4e0a\u800c\u4e0b\u4e0d\u65ad \\(\\frac{1}{k}\\) \u5730\u5212\u5206\uff0c\u518d\u81ea\u4e0b\u800c\u4e0a\u4e0d\u65ad\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002\u76f8\u53cd\uff0c\u5916\u6392\u5e8f\u7531\u4e8e\u5176\u7279\u6027\u9650\u5236\uff0c\u5176\u201c\u5f52\u5e76\u6bb5\u201d\u5e76\u4e0d\u662f\u81ea\u4e0a\u800c\u4e0b \\(\\frac{1}{k}\\) \u5212\u5206\u51fa\u6765\u7684\uff0c\u800c\u662f\u6839\u636e\u786c\u4ef6\u5904\u7406\u80fd\u529b\uff0c\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u7136\u540e\u76f4\u63a5\u81ea\u4e0b\u800c\u4e0a\u5f52\u5e76\u3002

\u800c\u8fd9\u6837\u4e00\u4e2a\u5c06 \\(k \\cdot c\\) \u4e2a run merge \u6210 \\(c\\) \u4e2a run \u7684\u8fc7\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e00\u4e2a pass\u3002\uff08\u5728\u5f52\u5e76\u6811\u4e0a\u4f53\u73b0\u4e3a\u4e00\u5c42\u3002\uff09

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u7269\u7406\u7ef4\u5ea6","title":"\u7269\u7406\u7ef4\u5ea6","text":"

\u5173\u4e8e\u7269\u7406\u7ef4\u5ea6\uff0c\u6d89\u53ca\u5230\u4e00\u4e9b\u786c\u4ef6\u77e5\u8bc6\uff0c\u5728 ADS \u4e2d\u4e3a\u4e86\u65b9\u4fbf\u8bf4\u660e\u4f1a\u5c06\u5176\u7b80\u5316\uff0c\u6709\u5173 block \u7684\u6982\u5ff5\u5c06\u88ab\u62bd\u8c61\u5316\u4e3a\u201c\u6570\u636e\u5355\u4f4d\u201d\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u5185\u5b58\u7684\u5927\u5c0f\u662f\u6709\u9650\u7684\uff0c\u5212\u5206\u7ed9\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\u4e5f\u5e94\u5f53\u662f\u6709\u9650\u7684\uff0c\u6211\u4eec\u7528 \\(M\\) \u6765\u8bb0\u5b83\uff0c\u5373\u5185\u5b58\u4e2d\u4e00\u6b21\u53ea\u80fd\u5904\u7406 \\(M\\) \u4e2a\u5355\u4f4d\u7684\u6570\u636e\u3002

\u66f4\u7ec6\u8282\u7684\uff0c\u6211\u4eec\u5e94\u5f53\u66f4\u5177\u7269\u7406\u5927\u5c0f\u6765\u8ba1\u7b97 \\(M\\)\uff0c\u4f8b\u5982\u4e00\u6761\u6570\u636e\u7684\u5927\u5c0f\u662f \\(l \\text{Bytes}\\)\uff0c\u800c\u5185\u5b58\u7684\u5927\u5c0f\u662f \\(m \\text{Bytes}\\)\uff0c\u90a3\u4e48\u4e00\u4e2a\u5185\u5b58\u80fd\u591f\u5bb9\u7eb3\u7684\u6570\u636e\u6570\u91cf\u5e94\u5f53\u4e3a \\(\\lfloor \\frac{m}{l} \\rfloor\\)\u3002

\u4f46\u662f\u65e2\u7136\u8981\u5f52\u5e76\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5c06 \\(k\\) \u8def\u7684\u6570\u636e\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u80af\u5b9a\u5e0c\u671b\u8fd9 \\(k\\) \u8def\u90fd\u80fd\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u662f\u4e0d\u5207\u5b9e\u9645\u7684\uff0c\u6211\u4eec\u6700\u591a\u516c\u5e73\u5730\u8bfb\u5165\u6bcf\u4e00\u8def\u7684\u524d \\(\\lfloor \\frac{M}{k} \\rfloor\\) \u4e2a\u6570\u636e\u2014\u2014\u4f46\u8fd9\u5df2\u7ecf\u8db3\u591f\u2014\u2014\u5bf9\u4e8e \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u7684\u5408\u5e76\u64cd\u4f5c\uff0c\u5176\u5408\u5e76\u8fc7\u7a0b\u4e2d\u4e5f\u6070\u597d\u53ea\u4e0e\u6700\u9760\u524d\u7684\u3001\u672a\u6392\u5e8f\u7684\u4e00\u90e8\u5206\u6570\u636e\u6709\u5173\u3002

\u8bf4\u660e

\u4e4b\u540e\u6240\u63d0\u5230\u7684\uff0c\u6709\u5173\u4e8e\u6392\u5e8f\u6570\u636e\u7684\u201c\u5185\u5b58\u201d\uff0c\u6307\u7684\u90fd\u662f\u5212\u5206\u7ed9\u7b97\u6cd5\uff0c\u7528\u6765\u5b58\u653e\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\uff01

example

\u4e3e\u4f8b\u6765\u8bf4\uff0c\u5047\u8bbe\u73b0\u5728\u6709\u4e24\u4e2a run\uff0c\u5206\u522b\u4e3a\uff1a

  1. 1 3 5 7 9
  2. 0 2 4 6 8

\u4f46\u662f\u5185\u5b58\u53ea\u80fd\u653e 4 \u4e2a\u5355\u4f4d\u6570\u636e\uff0c\u6240\u4ee5\u5bf9\u4e8e\u6bcf\u4e2a run \u603b\u662f\u53ea\u6709\u524d 2 \u4e2a\u6570\u636e\u662f\u53ef\u89c1\u7684\u3002\u4f46\u662f\u8fd9\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u53ef\u4ee5\u786e\u5b9a\u8fd9\u4e24\u4e2a run \u5408\u5e76\u7684\u7ed3\u679c\u4e2d\uff0c\u524d\u4e00\u90e8\u5206\u662f 0 1 2\uff0c\u800c\u81f3\u4e8e 2 \u540e\u9762\u6392\u4ec0\u4e48\uff0c\u5219\u8981\u4ece run2 \u4e2d\u53d6\u51fa\u4e4b\u540e\u7684\u6570\u636e\uff0c\u518d\u4e0e run1 \u4f59\u4e0b\u7684 _ 3 \u5408\u5e76\u3002

\u6613\u9519\u70b9

\u6ce8\u610f\uff0c\u5f53\u5176\u4e2d\u4e00\u4e2a\u6bb5\u7684 buffer \u7a7a\u4e86\u4ee5\u540e\uff0c\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u628a\u5176\u4ed6\u6bb5\u7684 buffer \u76f4\u63a5\u6392\u5e8f\u8fdb\u53bb\uff0c\u800c\u5fc5\u987b\u5148\u586b\u5145\u8fd9\u4e2a\u7a7a buffer \u7684\u5185\u5bb9\uff0c\u518d\u7ee7\u7eed\u6392\u5e8f\u3002

\u60f3\u8c61\u8fd9\u6837\u4e00\u4e2a\u60c5\u51b5\uff0c\u7a7a buffer \u5c06\u8981\u8f7d\u5165\u7684\u4e0b\u4e00\u6bb5\u6570\u636e\u662f 3 4 5\uff0c\u800c\u53e6\u5916\u4e00\u4e2a buffer \u5269\u4e0b\u7684\u6570\u636e\u662f 7\uff0c\u90a3\u4e48\u663e\u7136\uff0c3 4 5 \u5e94\u8be5\u5148\u4e8e 7 \u88ab\u6392\u5e8f\u3002

\u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e5f\u6b63\u662f\u5916\u6392\u5e8f\u80fd\u591f\u8fdb\u884c\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\u3002

\u5176\u4e2d\u6bd4\u8f83\u7279\u522b\u7684\u6b65\u9aa4\u5c31\u662f\uff0c\u6700\u5f00\u59cb\u7684\u6392\u5e8f\uff0c\u5373\u7b2c\u4e00\u4e2a pass\u3002\u5148\u524d\u6211\u4eec\u5728#\u903b\u8f91\u7ef4\u5ea6\u91cc\u63d0\u5230\u4e86\uff0c\u5916\u6392\u5e8f\u7684\u7b2c\u4e00\u4e2a pass \u4f1a\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u7684\u5927\u5c0f\u5c31\u662f \\(M\\)\u3002\u7528\u8bed\u8a00\u63cf\u8ff0\uff0c\u5c31\u662f\u6700\u65e9\u7684 run \u7684\u5927\u5c0f\u5c31\u662f\u5e73\u5747\u6bcf\u4e00\u8def\u80fd\u591f\u5728\u5185\u5b58\u4e2d\u5904\u7406\u7684\u6700\u5927\u6570\u636e\u5355\u4f4d\u91cf\u3002

\u7136\u800c\u95ee\u9898\u51fa\u73b0\u4e86\uff0c\u6839\u636e\u6211\u4e4b\u524d\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0crun \u5e94\u5f53\u662f\u6709\u5e8f\u7684\uff0c\u4f46\u662f\u4ece\u539f\u59cb\u6570\u636e\u91cc\u8bfb\u51fa\u6765\u7684\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u662f\u65e0\u5e8f\u7684\u3002\u4f46\u662f\u5bf9\u4e8e\u6700\u521d\u7684 run\uff0c\u5b83\u5fc5\u7136\u80fd\u591f\u6574\u6bb5\u653e\u5230\u5185\u5b58\u91cc\uff08\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u4e5f\u53ea\u6709\u6700\u521d\u7684 run \u80fd\u591f\u5b8c\u6574\u5730\u653e\u5230\u5185\u5b58\u91cc\uff09\uff0c\u56e0\u6b64\u76f4\u63a5\u5bf9\u5176\u8fdb\u884c\u5185\u6392\u5e8f\u5373\u53ef\u3002

\u903b\u8f91\u8054\u7cfb

\u4e2d\u7ee7

\u4ee5\u4e0a\u5185\u5bb9\u662f\u5bf9\u5916\u6392\u5e8f\u6838\u5fc3\u601d\u60f3\u7684\u4e00\u4e2a\u7b80\u5355\u4ecb\u7ecd\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u4ee5 ADS \u6240\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u8303\u5f0f\uff0c\u6765\u4ecb\u7ecd\u4e00\u4e0b\u5177\u4f53\u7684\u8fc7\u7a0b\u548c\u4e00\u4e9b\u6539\u8fdb\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5177\u4f53\u5206\u6790","title":"\u5177\u4f53\u5206\u6790","text":"

ADS \u4e2d\u76f8\u6bd4\u4e0a\u9762\u4ecb\u7ecd\u7684\u90e8\u5206\uff0c\u53c8\u5f15\u5165\u4e86\u4e00\u4e2a\u53eb tape \u7684\u6982\u5ff5\uff0ctape \u7684\u4e2d\u6587\u662f\u78c1\u5e26\uff0c\u800c\u5728\u8fd9\u4e2a\u6846\u67b6\u4e2d\uff0c\u6211\u66f4\u503e\u5411\u4e8e\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2a\u62bd\u8c61\u7684\u6982\u5ff5\u3002

\u76f8\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u9645\u8fc7\u7a0b\u4e0e\u4e0a\u9762\u63cf\u8ff0\u7684\u65b9\u6cd5\u53ef\u80fd\u6709\u4e00\u4e9b\u611f\u53d7\u4e0a\u7684\u5dee\u522b\uff0c\u5982\u679c\u53ea\u662f\u4e86\u89e3\u601d\u60f3\u7684\u8bdd\u4e0a\u534a\u90e8\u5206\u5df2\u7ecf\u8db3\u591f\uff08\u5f53\u7136\u540e\u9762\u8fd8\u6709\u4e00\u4e9b\u57fa\u4e8e\u5982\u4e0b\u6a21\u578b\u7684\u4f18\u5316\u8ba8\u8bba\uff09\uff0c\u4f46\u662f\u6bd5\u7adf\u8fd8\u662f\u9762\u5411\u8003\u8bd5\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4ee5 ADS \u8bfe\u4ef6\u7684\u65b9\u6cd5\u518d\u4ecb\u7ecd\u4e00\u6b21\u3002

\u8bf4\u660e

\u6211\u4e4b\u540e\u4f1a\u4ee5 run \u4e3a\u5355\u4f4d\uff0c\u6765\u63cf\u8ff0\u5408\u5e76\u8fc7\u7a0b\u3002\u4f46\u662f\u5b9e\u9645\u53d1\u751f\u5728\u8ba1\u7b97\u673a\u91cc\u7684\u6b65\u9aa4\u66f4\u52a0\u590d\u6742\uff1a

\u9700\u8981\u5148\u5c06\u6bcf\u4e00\u6761 tape \u7684\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\u5185\u5b58\u7684 buffer \u4e2d\uff0c\u7136\u540e\u5229\u7528\u8fd9\u4e9b buffer \u6765\u8fdb\u884c\u6392\u5e8f\uff1b\u5f53\u67d0\u4e2a buffer \u7a7a\u4e86\u4ee5\u540e\u8981\u7acb\u523b\u5c06\u5bf9\u5e94 tape \u7684\u4e0b\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\uff0c\u76f4\u5230\u6ca1\u6709\u6570\u636e\u53ef\u4ee5\u586b\u5145\u4e3a\u6b62\u3002

\u4e5f\u6b63\u662f#\u7269\u7406\u7ef4\u5ea6\u6240\u8bf4\u7684\u90a3\u4e9b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","title":"\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","text":"

\u6211\u4eec\u4ee5 2-way merge \u4e3a\u4f8b\uff0c\u7ed3\u5408 ADS \u8bfe\u4ef6\u4e2d\u7684\u914d\u56fe\u6765\u8bf4\u660e\u3002

\u51c6\u5907

\u56fe\u4e2d \\(T_1\\) \u662f\u4e00\u6761 tape \u7684\u7f16\u53f7\uff0c\u6211\u4eec\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u5e8f\u5217\u7684\u7269\u7406\u5730\u5740\uff0c\u6216\u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a\u6570\u7ec4\uff0c\u53ea\u4e0d\u8fc7\u5b83\u7684\u5b9e\u9645\u6570\u636e\u662f\u5728\u786c\u76d8\u4e2d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684 tape \u8868\u793a\u7684\u90fd\u662f\u786c\u76d8\u4e2d\u7684\u6570\u636e\u3002

\u8fd9\u6761 tape \u4e2d\u6709 13 \u4e2a\u5143\u7d20\uff0c\u6211\u4eec\u8bb0\u5176\u4e3a \\(N = 13\\)\u3002\u800c\u8fd9\u6761\u539f\u59cb\u7684 tape \u88ab\u5212\u5206\u4e3a\u4e86 5 \u6bb5\uff0c\u6bcf\u4e00\u6bb5\u90fd\u6709\u4e0d\u8d85\u8fc7 3 \u4e2a\u5143\u7d20\uff0c\u6b64\u65f6 \\(M = 3\\)\u3002\u5373\u6709 \\(\\lceil \\frac{N}{M} \\rceil = 5\\)\u3002

Pass 1

\u73b0\u5728\u6211\u4eec\u8981\u5f00\u59cb merge \u4e86\u3002\u5bf9\u4e8e\u8fd9\u6bb5\u6570\u636e\u6765\u8bf4\uff0c\u8fd9\u662f\u610f\u4e49\u91cd\u5927\u7684\u201c\u4eba\u751f\u7b2c\u4e00\u6b21\u201d\uff0c\u76f8\u6bd4\u4e8e\u5176\u4ed6\u5f52\u5e76\u90fd\u662f\u4ece 2 \u4e2a tape \u5f00\u59cb\u7684 pass\uff0c\u8fd9\u4e00\u6b21\u663e\u5f97\u6709\u4e9b\u7279\u6b8a\u3002

\u5728\u7b2c\u4e00\u8f6e\u4e2d\uff0c\u9762\u5bf9\u5168\u90e8\u90fd\u662f\u65e0\u5e8f\u7684\u6570\u636e\uff0c\u6211\u4eec\u5c06\u8fd9 \\(\\lceil \\frac{N}{M} \\rceil = 5\\) \u4e2a\u6bb5\u5747\u5206\u5230\u4e24\u6761 tape \u4e0a\uff082-way\uff09\uff0c\u8fd9\u91cc\u7ecf\u5386\u4e24\u4e2a\u6b65\u9aa4\uff1a

  1. \u4f9d\u6b21\u8bfb\u53d6 \\(T_1\\) \u4e2d\u6bcf\u4e00\u6bb5\u6570\u636e\uff08\u521a\u597d\u5360\u6ee1\u5185\u5b58\uff09\uff0c\u5e76\u5bf9\u5b83\u4eec\u8fdb\u884c\u5185\u6392\u5e8f\uff1b
  2. \u5c06\u6392\u5e8f\u5b8c\u7684\u6bb5\uff0c\u8ffd\u52a0\u5199\u5230 \\(T_2\\) \u6216 \\(T_3\\) \u4e2d\uff08\u5177\u4f53\u6bcf\u4e00\u4e2a tape \u5199\u51e0\u6761\uff0c\u4f1a\u6709\u4e13\u95e8\u7b56\u7565\u505a\u8c03\u6574\uff0c\u76ee\u524d\u5148\u5e73\u5206\u7740\u653e\uff09\uff1b

\u4e8e\u662f\uff0c\\(T_1\\) \u4e2d\u7684\u6570\u636e\u4fbf\u88ab\u8f6c\u79fb\u5230\u4e86 \\(T_2\\) \u548c \\(T_3\\)\u3002\u4e3a\u4e86\u91cd\u590d\u5229\u7528 tape\uff0c\u6b64\u65f6\u7684 \\(T_1\\) \u88ab\u770b\u4f5c\u53ef\u4ee5\u7528\u7684\u7a7a\u78c1\u76d8\u4e86\u3002

\u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e00\u4e2a pass\u3002

Pass 2

\u4e4b\u540e\u7684 pass \u5219\u57fa\u672c\u9075\u5faa\u540c\u6837\u7684\u89c4\u5219\uff0c\u4e0d\u65ad\u53d6\u6bcf\u4e00\u8def\u7684\u7b2c\u4e00\u4e2a run \u5e76 merge\uff0c\u5e76\u4e14\u5c06\u7ed3\u679c\u5199\u5230\u4e24\u4e2a\uff08k \u4e2a\uff09\u95f2\u7f6e\u7684 tape \u4e0a\uff08\u548c\u524d\u9762\u8bf4\u8fc7\u7684\u4e00\u6837\uff0c\u8fd9\u91cc\u6682\u4e14\u5c06\u5206\u914d\u7b56\u7565\u5b9a\u4e3a\u5e73\u5206\u5230\u6bcf\u4e00\u4e2a tape \u4e0a\uff09\u3002

\u4f8b\u5982\uff0c\u6211\u4eec\u8981\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u6267\u884c\u5f52\u5e76\u64cd\u4f5c\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684\uff0c\u6709 6 \u4e2a\u6570\u636e\u7684 run\uff0c\u5e76\u5199\u5230\u95f2\u7f6e\u7684 \\(T_1\\) \u4e0a\uff1b\u63a5\u4e0b\u6765\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u6b64\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\\(T_1\\)\u3001\\(T_2\\)\u3001\\(T_3\\) \u90fd\u4e0d\u662f\u95f2\u7f6e\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u65b0\u7684 tape\uff0c\u5199\u5230 \\(T_4\\) \u4e0a\u3002

\u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e8c\u4e2a pass\u3002

Pass 3

pass 3 \u548c pass 2 \u7684\u8fc7\u7a0b\u57fa\u672c\u4e00\u81f4\u3002\u73b0\u5728\u7684 tape \u72b6\u6001\u662f \\(\\{T_2, T_3\\}\\) \u95f2\u7f6e\uff0c\u6211\u4eec\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 12 \u4e2a\u5143\u7d20\uff1b\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 1 \u4e2a\u5143\u7d20\u3002\u8fd9\u4e24\u6bb5\u88ab\u5206\u914d\u5230\u4e24\u6761\u7a7a\u95f2 tape \u4e0a\uff0c\u5373 \\(T_2\\) \u548c \\(T_3\\)\u3002

\u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e09\u4e2a pass\u3002

Pass 4

\u540c\u6837\uff0cpass 4 \u548c\u524d\u9762\u4e24\u4e2a pass \u7684\u8fc7\u7a0b\u4e5f\u662f\u4e00\u81f4\u6027\u7684\uff0c\u4e0d\u505a\u8fc7\u591a\u89e3\u91ca\uff0c\u5bf9\u4e8e\u89c4\u6a21\u66f4\u5927\u7684\u6570\u636e\u4e5f\u662f\u4e00\u6837\uff0c\u9664\u4e86\u7b2c\u4e00\u4e2a pass \u6bd4\u8f83\u7279\u6b8a\uff0c\u5176\u5b83 pass \u90fd\u662f\u4e00\u6837\u7684\u3002\u6700\u7ec8\u5f97\u5230\u53ea\u5269\u4e0b\u4e00\u4e2a tape \u4e2d\u5305\u542b\u552f\u4e00\u7684 run \u65f6\uff0c\u6392\u5e8f\u5c31\u7ed3\u675f\u4e86\u3002

\u81f3\u6b64\uff0c\u6392\u5e8f\u7ed3\u675f\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u4f18\u5316\u7a7a\u95f4","title":"\u4f18\u5316\u7a7a\u95f4","text":"

\u53ef\u4ee5\u4f18\u5316\u7684\u90e8\u5206\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\uff1a

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#pass-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"pass \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

\u4f8b\u5b50\u4e2d\u4e00\u5171\u7ecf\u8fc7\u4e86 4 \u6b21 pass\u3002\u5982\u679c\u6211\u4eec\u8bb0 \\(max(\\#run)\\) \u4e3a \\(\\#run\\) \u6700\u591a\u7684 tape \u7684 \\(\\#run\\)\uff0c\u5219\u6bcf\u4e00\u6b21 pass \u4f1a\u4ee4 \\(max(\\#run)\\) \u7f29\u5c0f\u4e00\u534a\uff0c\u76f4\u5230 \\(max(\\#run)\\) \u53d8\u4e3a 1\uff0c\u4e14\u53ea\u6709\u5b83\u4e00\u6761 tape \u8fd8\u6709\u6570\u636e\uff0c\u6807\u5fd7\u7740\u6392\u5e8f\u7ed3\u675f\u3002

\u5982\u679c\u4e13\u6ce8\u4e8e \\(\\#run\\) \u7684\u53d8\u5316\uff0c\u90a3\u4e48\u4e0a\u9762\u7684\u6a21\u62df\u6b65\u9aa4\u5927\u81f4\u662f\u8fd9\u4e48\u4e00\u4e2a\u8fc7\u7a0b\uff1a

Pass 1

\u539f\u5148 \\(T_1\\) \u4e0a \\(\\#run = 5\\)\uff0c\u73b0\u5c06\u5b83\u5206\u914d\u5230\u4e24\u6761 tape \u4e0a\uff0c\u4e8e\u662f\u6709\uff1a

Pass 2

\u4f9d\u6b21\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u5747\u5206\u5230\u53e6\u5916\u4e24\u6761 tape \u4e0a\uff08\u672a\u4f18\u5316\u7684\u505a\u6cd5\uff0c\u4f18\u5316\u505a\u6cd5\u53c2\u8003#tape-\u4f18\u5316\uff09\uff0c\u4e8e\u662f\u6709\uff1a

\u7ee7\u7eed\u53d6\uff0c\u5373\uff1a

\\(T_3\\) \u4e0a\u5df2\u7ecf\u6ca1\u6709\u4e86\uff0c\u4f46\u662f \\(T_2\\) \u8fd8\u6ca1\u53d6\u5b8c\uff0c\u6240\u4ee5\u53ea\u4ece \\(T_2\\) \u62ff\uff1a

\u6a21\u62df\u5230\u4ece\u8fd9\u91cc\u5176\u5b9e\u5df2\u7ecf\u53ef\u4ee5\u770b\u51fa\u6765\u4e86\uff0c\u5bf9\u4e8e 2-way merge \u6765\u8bf4\uff0c\u6392\u9664\u672b\u6bb5\u60c5\u51b5\uff0c\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u57fa\u672c\u4e0a\u6bcf\u6b21\u90fd\u662f\u4ece 2 \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{2}\\)\u3002

\u90a3\u4e48\uff0c\u5bf9\u4e8e \\(k\\)-way merge \u6765\u8bf4\uff0c\u5c31\u662f\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u6bcf\u6b21\u4ece \\(k\\) \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{k}\\)\u3002

\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5f52\u7eb3\u5f97\u5230\u5982\u4e0b\u8ba1\u7b97\u5f0f\uff1a

\\[ \\begin{aligned} \\#pass &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{(\\#run)}\\rceil }_{\\text{rest passes}} \\\\ &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{ \\lceil \\frac{N}{M} \\rceil }\\rceil }_{\\text{rest passes}} \\end{aligned} \\]

\u5176\u4e2d\uff0c\\(k\\) \u8868\u793a\u5f52\u5e76\u8def\u6570\uff0c\\(N\\) \u8868\u793a\u6570\u636e\u91cf\uff0c\\(M\\) \u8868\u793a\u5185\u5b58\u4e00\u6b21\u80fd\u5904\u7406\u7684\u6570\u636e\u91cf\u3002

\u90a3\u4e48\uff0c\u51cf\u5c11 pass \u7684\u65b9\u6cd5\u4e5f\u5f88\u76f4\u89c2\u4e86\uff0c\u53ea\u9700\u8981\u589e\u52a0 \\(k\\) \u5373\u53ef\uff0c\u5373\u91c7\u53d6\u66f4\u591a\u8def\u7684\u5f52\u5e76\uff0c\u5c31\u80fd\u51cf\u5c11 pass\u3002

\u7136\u800c\uff0c\u5176\u4e2d\u5fc5\u7136\u5b58\u5728\u4e00\u4e2a trade-off \u7684\u5173\u7cfb\uff0c\u867d\u7136 \\(k\\) \u589e\u52a0\u53ef\u4ee5\u51cf\u5c11 \\(\\#pass\\)\uff0c\u4f46\u662f\u5728\u63a5\u4e0b\u6765\u4e00\u8282\u4e2d\u6211\u4eec\u4f1a\u77e5\u9053\uff0c\\(k\\) \u8fc7\u5927\u4f1a\u5bfc\u81f4 tape \u9700\u6c42\u91cf\u589e\u52a0\uff0c\u6b64\u5916\uff0c\\(k\\) \u7684\u589e\u52a0\u4e5f\u4f1a\u5bfc\u81f4\u5185\u6392\u5e8f\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff0c\u4e5f\u4f1a\u589e\u52a0 pass \u5185\u7684 seek \u6b21\u6570\u3002

\u5f53\u7136\uff0c\u9664\u4e86\u66b4\u529b\u7684\u589e\u52a0 \\(k\\) \u4ee5\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u66ff\u6362\u9009\u62e9(Replacement Selection)\u7b97\u6cd5\uff0c\u6765\u751f\u6210\u6bd4 \\(M\\) \u5927\u7684\u521d\u59cb run\uff0c\u4ee5\u76f8\u5bf9\u51cf\u5c11 pass \u6570\u91cf\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","title":"\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","text":"

\u66ff\u6362\u9009\u62e9(Replacement Selection) \u5728 hw15 \u4e2d\u88ab\u5e03\u7f6e\u4e3a\u7f16\u7a0b\u9898\uff0c\u6240\u4ee5\u5176\u5b9e\u73b0\u8fc7\u7a0b\u53ef\u4ee5\u7ed3\u5408\u90a3\u9053\u9898\u76ee\u6765\u5b66\u4e60\u3002

Replacement Selection @ PTA

When the input is much too large to fit into memory, we have to do external sorting instead of internal sorting. One of the key steps in external sorting is to generate sets of sorted records (also called runs) with limited internal memory. The simplest method is to read as many records as possible into the memory, and sort them internally, then write the resulting run back to some tape. The size of each run is the same as the capacity of the internal memory.

Replacement Selection sorting algorithm was described in 1965 by Donald Knuth. Notice that as soon as the first record is written to an output tape, the memory it used becomes available for another record. Assume that we are sorting in ascending order, if the next record is not smaller than the record we have just output, then it can be included in the run.

For example, suppose that we have a set of input { 81, 94, 11, 96, 12, 99, 35 }, and our memory can sort 3 records only. By the simplest method we will obtain three runs: { 11, 81, 94 }, { 12, 96, 99 } and { 35 }. According to the replacement selection algorithm, we would read and sort the first 3 records { 81, 94, 11 } and output 11 as the smallest one. Then one space is available so 96 is read in and will join the first run since it is larger than 11. Now we have { 81, 94, 96 }. After 81 is out, 12 comes in but it must belong to the next run since it is smaller than 81. Hence we have { 94, 96, 12 } where 12 will stay since it belongs to the next run. When 94 is out and 99 is in, since 99 is larger than 94, it must belong to the first run. Eventually we will obtain two runs: the first one contains { 11, 81, 94, 96, 99 } and the second one contains { 12, 35 }.

Your job is to implement this replacement selection algorithm.

\u5229\u7528\u66ff\u6362\u9009\u62e9\u7b56\u7565\u4ee5\u540e\uff0c\u6bcf\u4e00\u6b21\u751f\u6210\u7684 run \u4e00\u5b9a\u4e0d\u5c0f\u4e8e \\(M\\)\uff08\u672b\u7aef\u4f59\u6570\u9664\u5916\uff09\uff0c\u4e8e\u662f\u76f8\u5bf9\u6765\u8bf4 \\(\\#pass\\) \u5c31\u4f1a\u51cf\u5c11\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#tape-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"tape \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

\u5982\u679c\u4f7f\u7528#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u7684\u65b9\u6cd5\uff0c\u90a3\u4e48\u6211\u4eec\u4f7f\u7528 \\(k\\)-way merge \u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape\u3002

\u8fd9\u5176\u5b9e\u5f88\u597d\u7406\u89e3\uff0c\u6211\u4eec\u6bcf\u4e00\u4e2a pass \u9700\u8981 \\(k\\) \u4e2a tape \u6765\u5b58\u653e\u6bcf\u4e00\u8def\u7684\u5e8f\u5217\uff0c\u800c\u5176\u7ed3\u679c\u8981\u5e73\u5206\u653e\u590d\u5236\u5230\u4e0b\u4e00\u4e2a pass \u6240\u9700\u8981\u7684 \\(k\\) \u4e2a pass \u4e2d\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape \u8f6e\u6362\u7740\u6765\u5b58\u50a8\u6570\u636e\u3002

\u800c\u8fd9\u4e0d\u5229\u4e8e\u6211\u4eec\u901a\u8fc7\u589e\u52a0 \\(k\\) \u6765\u51cf\u5c11 \\(\\#pass\\)\uff0c\u56e0\u6b64\u6211\u4eec\u8003\u8651\u67d0\u79cd\u7b56\u7565\u6765\u4f18\u5316 tape \u7684\u4f7f\u7528\u3002

\u5728#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u6211\u591a\u6b21\u6697\u793a\uff0c\u4e4b\u540e\u4f1a\u5bf9\u300c\u5c06\u5f52\u5e76\u540e\u7684 run \u5e73\u5206\u5230\u5404 tape\u300d\u8fd9\u4ef6\u4e8b\u505a\u4f18\u5316\u3002

\u6211\u4eec\u53ef\u4ee5\u8003\u8651\uff0c\u4e0d\u5e73\u5747\u7684\u5c06\u5f52\u5e76\u540e\u7684 run \u5206\u914d\u5230\u5404\u4e2a tape \u4e0a\uff0c\u5373\u603b\u6709\u4e00\u4e9b tape \u6bd4\u522b\u7684 tape \u591a\u4e00\u4e9b run\u3002\u867d\u7136\u5728\u5e73\u5206\u7684\u7b56\u7565\u4e2d\uff0c\u4e5f\u6709\u53ef\u80fd\u4f1a\u6709\u591a\u51fa\u6765\u7684 run\uff0c\u4f46\u662f\u53ea\u4f1a\u591a\u4e00\u4e2a\uff08\u4e5f\u5c31\u662f\u5c06 \\(x \\mod k\\) \u7684\u4f59\u6570\u5206\u914d\u5230\u5176\u4e2d\u51e0\u4e2a tape \u4e0a\uff09\u3002\u6b64\u65f6\u8fd9\u4e9b\u591a\u51fa\u6765\u7684 run \u53ef\u80fd\u5c31\u662f\u5355\u7eaf\u7684\u4ece\u4e00\u4e2a tape \u522b\u590d\u5236\u5230\u53e6\u5916\u4e00\u4e2a tape \u4e0a\uff0c\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u6ca1\u5fc5\u8981\u7684\u64cd\u4f5c\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u7559\u4e0b\u5b83\uff0c\u5c06\u5f53\u524d tape \u62ff\u5230\u4e0b\u4e00\u8f6e\u7528\u5462\uff1f

\u4f46\u662f\u7531\u4e8e\u5e73\u5206\u7b56\u7565\u4e0b\uff0c\u8fd9\u4e2a\u60c5\u51b5\u7684\u51fa\u73b0\u5e76\u4e0d\u53ef\u63a7\uff0c\u800c\u4e14\u603b\u662f\u4f1a\u5f15\u8d77\u60ac\u6b8a\u7684 tape \u95f4\u7684\u6570\u91cf\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u80fd\u4e0d\u80fd\u4e3b\u52a8\u5229\u7528\u8fd9\u4e2a\u6027\u8d28\u3002

\u5b9e\u5728\u60f3\u4e0d\u5230\u600e\u4e48\u8fc7\u5ea6\u4e86\uff0c\u800c\u4e14\u6025\u6025\u6025\uff0c\u6240\u4ee5\u76f4\u63a5\u4e0a\u7ed3\u8bba\u3002

\u6211\u4eec\u6309\u7167 Fibonacci \u6570\u5217\u7684\u9879\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\)\uff0c\u6b64\u65f6\u6bcf\u4e00\u4e2a pass \u53ea\u9700\u8981\u4e00\u4e2a\u6709\u4e00\u4e2a\u7a7a\u95f2\u7684 tape \u5373\u53ef\u3002

example

\\[ \\text{Fibonacci}: {1,1,2,3,5,8,13,21,...} \\]

\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u4e24\u4e2a tape\uff0c\u5206\u522b\u6709 23 \u4e2a run \u548c 13 \u4e2a run\uff0c\u5219\uff1a

\\(T_1\\) \\(T_2\\) \\(T_3\\) \u8bf4\u660e 21 13 - \u521d\u59cb\u60c5\u51b5 8 - 13 \\(T_1\\) \u7684\u524d 13 \u4e2a\u4e0e \\(T_2\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_3\\) - 8 5 \\(T_3\\) \u7684\u524d 8 \u4e2a\u4e0e \\(T_1\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_2\\) 5 3 - \u7565 2 - 3 \u7565 - 2 1 \u7565 1 1 - \u7565 0 - 1 \u7565

\u4f7f\u7528 Fibonacci \u6211\u4eec\u603b\u53ef\u4ee5\u6eda\u52a8\u7740\u5c06 \\(\\#run\\) \u7684\u89c4\u6a21\u7f29\u5c0f\u3002

k-way merge with k-order Fibonacci Sequence

\u5bf9\u4e8e \\(k\\)-way merge\uff0c\u6211\u4eec\u53ea\u9700\u8981\u6784\u9020 k \u9636 Fibonacci \u6570\u5217\uff0c\u7136\u540e\u6309\u7167\u8fd9\u4e2a\u6570\u5217\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u5373\u53ef\u3002

k-order Fibonacci Sequence

\u7ed9\u51fa k \u9636 Fibonacci \u6570\u5217\uff08\u4e0e PPT \u7565\u6709\u4e0d\u540c\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e0b\u6807\u4ece\u8c01\u5f00\u59cb\uff0c\u65e0\u4f24\u5927\u96c5\uff09\uff1a

\\[ \\left\\{ \\begin{aligned} F^k_1 &= 1 \\\\ F^k_2 &= 1 \\\\ & \\vdots\\\\ F^k_n &= F^k_{n-1} + F^k_{n-2} + \\cdots + F^k_{n-k} \\quad (n > k) \\end{aligned} \\right. \\]

\u8fd9\u4e2a\u7ed3\u8bba\u770b\u8d77\u6765\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u600e\u4e48\u64cd\u4f5c\u7684\u5462\uff1fPPT \u538b\u6839\u6ca1\u8bb2\uff0c\u56e0\u6b64\uff0c\u6211\u5728\u8be2\u95ee ch \u8001\u5e08\u4ee5\u540e\uff0c\u5199\u4e0b\u4e86\u8fd9\u4e2a\u90e8\u5206\uff0c\u65e8\u5728\u8865\u5145 \\(k\\)-way merge \u4f7f\u7528 k \u9636 Fibonacci \u4f18\u5316\u7684\u65b9\u6cd5\u3002

\u9996\u5148\uff0c\u505a\u4e00\u4e9b\u5f3a\u8c03\uff1a

  1. \u8be5\u65b9\u6cd5\u9648\u8ff0\u8fc7\u7a0b\u4e2d\uff0ck \u8def\u59cb\u7ec8\u76f4\u63a5\u5408\u5e76\u6210\u4e00\u8def\uff08\u5343\u4e07\u4e0d\u8981\u7528\u201citerative\u201d\u7684\u601d\u8def\u6765\u8003\u8651\uff0c\u5c31\u7b97 iterative\uff0c\u8fed\u4ee3\u5b8c\u4e86\u4e5f\u8fd8\u662f k \u8def\u5f52\u4e3a 1 \u8def\uff09\uff1b
  2. \u6211\u4eec\u7684\u76ee\u7684\u662f\u4f18\u5316\u6bcf\u4e00\u4e2a pass \u4e2d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u4e0d\u4e00\u6837\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898\uff08\u4f8b\u5982\u5c34\u5c2c\u7684 \\(n\\) \u548c \\(n+1\\) \u5f52\uff0c\u4e0b\u4e00\u4e2a pass \u5c31\u5f97 \\(1\\) \u548c \\(n\\) \u5f52\u4e86\uff09\uff1b

\u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a pass\uff0c\u6709 \\(k\\) \u4e2a tape\uff0c\u6211\u4eec\u8bb0\u6bcf\u4e00\u4e2a tape \u7684 \\(\\#run\\) \u4e3a \\(r_i\\)\uff0c\u5219\u6709\uff1a

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6bcf\u4e2a pass \u6700\u5927\u548c\u6700\u5c0f\u7684 \\(\\#run\\) \u5206\u522b\u6709 k \u9636 Fibonacci \u4e2d\u76f8\u90bb\u7684\u4e24\u9879\u3002

\u8fd9\u91cc\u5206\u5f00\u7528 i \u548c j \u662f\u60f3\u8868\u8fbe\u8fd9\u4e2a\u5339\u914d\u5173\u7cfb\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6700\u5927\u503c\u6700\u5c0f\u503c\u7531 Fibonacci \u76f8\u90bb\u9879\u6240\u786e\u5b9a\u3002

\u90a3\u4e48\u5939\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u4e2d\u95f4\u7684\u5176\u4ed6 \\(\\#run\\) \u8981\u5982\u4f55\u786e\u5b9a\u5462\uff1f\u9996\u5148\u6211\u4eec\u8fdb\u884c\u4e00\u6bb5\u63a8\u5bfc\uff1a

\u5047\u8bbe \\(\\{r_i\\}\\) \u7ecf\u8fc7\u6392\u5e8f\uff0c\u5e76\u4e14\u521a\u597d\u80fd\u51d1\u4e0a\u6211\u4eec\u6240\u9700\u8981\u7684\u6570\u91cf\uff0c\u6709\uff1a

\\[ r_k > r_{k-1} > ... > r_{2} > r_{1} \\text{where } r_k = F^k_j \\text{ and } r_1 = F^k_{j-1} \\]

\u5728\u8fd9\u4e00\u4e2a pass \u4e2d\uff0c\u6211\u4eec\u5c06\u6240\u6709 tape \u7684\u524d \\(r1\\) \u4e2a run \u62ff\u51fa\u6765 merge\uff0c\u8fd9\u6837\uff0c\u9664\u4e86 \\(r_1\\) \u8fd9\u4e2a tape\uff0c\u5176\u4ed6 tape \u7684 \\(\\#run\\) \u90fd\u53d8\u4e3a \\(r_i-r_1\\)\u3002\u6b64\u65f6\u6709\u4e0d\u7b49\u5173\u7cfb\uff1a

\\[ r_1 > r_k - r_1 > r_{k-1} - r_1 > ... > r_{2} - r_1 \\]

\u8fd9\u91cc\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f \\(r_1 > r_k - r_1\\)\uff1a

proof of the relation \\[ \\begin{aligned} &\\begin{aligned} \\because r_1 &= F^k_{j-1} \\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} + F^k_{j-k-1} \\end{aligned} & (1)\\\\ &\\begin{aligned} \\text{and } r_k &= F^k_{j} \\\\ &= F^k_{j-1} + F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (2)\\\\ &\\begin{aligned} \\therefore r_k - r_1 &= F^k_{j} - F^k_{j-1} \\quad \\text{ i.e. } (2) - (1)\\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (3)\\\\ &\\begin{aligned} \\therefore r_1 - (r_k - r_1) &= F^k_{j-k-1} > 0 \\quad \\text{ i.e. } (1) - (3) \\\\ \\end{aligned} \\\\ &\\begin{aligned} \\therefore r_1 > r_k - r_1 \\end{aligned} \\\\ \\end{aligned} \\]

\u5982\u679c\u6211\u4eec\u5c06\u73b0\u5728\u8fd9\u4e2a\u6392\u5e8f\u540e\u7684\u6570\u5217\u8bb0\u4e3a \\(\\{r_i'\\}\\)\uff0c\u5219\u6709\uff1a

\\[ \\left\\{ \\begin{aligned} r_1' &= r_2 - r_1 \\\\ r_2' &= r_3 - r_1 \\\\ \\vdots \\\\ r_{k-1}' &= r_k - r_1 \\\\ r_k' &= r_1 \\end{aligned} \\right. \\]

\u6b64\u65f6\u6839\u636e\u6211\u4eec\u5173\u4e8e\u6700\u5927\u6700\u5c0f\u503c\u7684\u9648\u8ff0\uff0c\u53c8\u6709\uff1a

\\[ \\left\\{ \\begin{aligned} r_1' &= F^k_{j-2} \\\\ r_k' &= F^k_{j-1} \\end{aligned} \\right. \\]

\u4e8e\u662f\u53ef\u4ee5\u63a8\u5f97\uff1a\\(r_2 = r_1 + F^k_{j-2} = F^k_{j-1} + F^k_{j-2}\\)\u3002\u5173\u4e8e \\(r_3, r_4\\)\uff0c\u4e5f\u662f\u4e00\u6837\u7684\u529e\u6cd5\uff0c\u5c06 \\(r_2\\) \u7684\u7ed3\u8bba\u8fc1\u79fb\u5230 \\(r_2'\\)\uff0c\u518d\u56de\u8fc7\u5934\u5f97\u5230 \\(r_3 = r_1 + r_2'= F^k_{j-1} + F^k_{j-2} + F^k_{j-3}\\)\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff0c\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7ed3\u8bba\uff1a

\\[ \\left\\{ \\begin{aligned} r_1 &= F^k_{j-1} \\\\ r_2 &= F^k_{j-1} + F^k_{j-2} \\\\ r_3 &= F^k_{j-1} + F^k_{j-2} + F^k_{j-3} \\\\ \\vdots \\\\ r_k &= F^k_{j-1} + F^k_{j-2} + ... + F^k_{j-k} = F^k_{j} \\end{aligned} \\right. \\]

\u601d\u8003\u9898

\u53ef\u4ee5\u611f\u53d7\u601d\u8003\u4e00\u4e0b\u8fd9\u4e2a\u7279\u6027\uff08\u8003\u8651 2-way \u5373\u53ef\uff09\u4e0e\u9ec4\u91d1\u6bd4\u4f8b\u7684\u5173\u7cfb\uff01

hint: \u5982\u4f55\u7406\u89e3 \\(\\frac{a_n}{a_{n-1}} \\approx \\frac{a_{n-1}}{a_n - a_{n-1}}\\) \u4e0e\u8fd9\u4e2a\u6027\u8d28\u7684\u5173\u7cfb\uff1f

\u5f53\u7136\uff0c\u521a\u597d\u80fd\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\u81ea\u7136\u662f\u5c11\u6570\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u591a\u4f59\u7684\u90e8\u5206\u5747\u5300\u7684\u5206\u5230\u8f83\u591a\u82e5\u5e72 tape \u4e0a\uff0c\u4ee5\u76f8\u5bf9\u7684\u5229\u7528 Fibonacci \u6570\u5217\u7684\u6027\u8d28\uff08\u8054\u7cfb\u601d\u8003\u9898\u7406\u89e3\uff09\u3002

\u6ce8\u610f

\u6216\u8bb8\u4f60\u5df2\u7ecf\u5f00\u59cb\u4ea7\u751f\u7591\u95ee\u4e86\uff0c\u5982\u679c\u8fd9\u6837\u6765\u505a\uff0c\u524d\u9762\u5bf9 \\(\\#pass\\) \u7684\u5206\u6790\u662f\u4e0d\u662f\u4e0d\u6210\u7acb\u4e86\u5462\uff1f

\u6211\u60f3\u5e94\u8be5\u786e\u5b9e\u4e0d\u518d\u5b8c\u5168\u4e00\u6837\u4e86\uff0c\u4f46\u662f\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u4e4b\u540e\u5229\u7528\u90a3\u4e2a\u7ed3\u8bba\u505a\u5b9a\u6027\u5206\u6790\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\uff0c\u91c7\u53d6 Fibonacci \u7b56\u7565\u6765\u4f18\u5316\u4f1a\u5bfc\u81f4 \\(\\#pass\\) \u589e\u591a\u5373\u53ef\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#k-\u8def\u5185\u6392\u5e8f\u4f18\u5316","title":"k \u8def\u5185\u6392\u5e8f\u4f18\u5316","text":"

\u968f\u7740 \\(k\\) \u7684\u589e\u52a0\uff0c\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u4e24\u8def\u5f52\u5e76\u90a3\u6837\u76f4\u63a5\u8f93\u51fa\u8f83\u5c0f\u7684\u90a3\u4e2a\uff0c\u800c\u662f\u9700\u8981\u7ef4\u62a4\u6570\u636e\u7ed3\u6784\u6765\u603b\u662f\u8f93\u51fa k \u4e2a\u4e2d\u6700\u5c0f\u7684\u90a3\u4e2a\u2014\u2014\u6211\u4eec\u7528\u5806\u6765\u7ef4\u62a4\u6bcf\u4e00\u4e2a run \u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\u7684\u961f\u9996\u5143\u7d20\uff08\u540c\u65f6\u4e5f\u662f\u6700\u5c0f\u5143\u7d20\uff09\uff0c\u6bcf\u5f53\u5806\u9876\u5143\u7d20\u88ab\u8f93\u51fa\uff0c\u5c31\u9700\u8981\u4ece\u5bf9\u5e94\u7684 run \u4e2d\u8bfb\u5165\u4e0b\u4e00\u4e2a\u5143\u7d20\u3002

\u6ce8\u610f

\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u5806\u662f\u989d\u5916\u7ef4\u62a4\u7684\uff0c\u800c\u6bcf\u6b21\u63a8\u5165\u5806\u4e2d\u7684\u5143\u7d20\u90fd\u662f\u4ece\u5bf9\u5e94\u7684 run \u7684 buffer \u4e2d\u62ff\u7684\uff0c\u800c\u4e0d\u662f\u6bcf\u6b21\u90fd\u4ece\u786c\u76d8\u4e2d\u62ff\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u970d\u592b\u66fc\u6811\u4f18\u5316","title":"\u970d\u592b\u66fc\u6811\u4f18\u5316","text":"

\u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u76f4\u63a5 \\(k\\) \u8def\u5408\u5e76\uff0c\u800c\u662f\u91c7\u7528\u4e24\u4e24\u5f52\u5e76\u7684\u65b9\u6cd5\uff0c\u4e5f\u5c31\u662f wiki \u4e2d\u63d0\u5230\u7684\u8fed\u4ee3\u5f52\u5e76\uff08\u6ce8\u610f\uff0c\u8be5\u6761\u76ee\u4e2d\u63d0\u5230\u7684\u5f52\u5e76\u5e76\u6ca1\u6709\u8bf4\u660e\u662f\u5916\u6392\u5e8f\u80cc\u666f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fc1\u79fb\uff09\u3002

\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u82e5\u5e72\u4e2a run\uff0c\u5e76\u4e14\u6211\u4eec\u5c06\u8981\u8fdb\u884c\u4e24\u4e24\u5f52\u5e76\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u6bcf\u4e00\u4e2a run \u7684\u5927\u5c0f\uff0c\u6839\u636e\u970d\u592b\u66fc\u6811\u7684\u89c4\u5f8b\u6765\u8fdb\u884c\u5f52\u5e76\uff0c\u5373\u603b\u662f\u9009\u6700\u5c0f\u7684\u4e24\u4e2a\u8fdb\u884c\u5f52\u5e76\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5e76\u884c\u4f18\u5316","title":"\u5e76\u884c\u4f18\u5316","text":"

\u8fd9\u91cc\u5e76\u884c\u7684\u76ee\u6807\u4e3b\u8981\u662f\u4f7f\u7b97\u6cd5\u652f\u6301\u6570\u636e\u7684\u8bfb-\u7528-\u5199\u7684\u6d41\u6c34\u7ebf\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u8981\u60f3\u529e\u6cd5\u8ba9\u8bfb\u4e0d\u963b\u585e\u7528\uff0c\u7528\u4e0d\u963b\u585e\u5199\u3002

\u5148\u524d\u6211\u4eec\u9700\u8981\u5148\u8bfb\u5165\u6570\u636e\uff0c\u7136\u540e\u8fdb\u884c\u6392\u5e8f\uff0c\u6392\u5e8f\u5b8c\u4e86\u518d\u5199\u5165\u78c1\u76d8\uff0c\u817e\u51fa\u5185\u5b58\u7a7a\u95f4\u4ee5\u4f9b\u4e0b\u4e00\u6b21\u8bfb\u5165\u3002\u90a3\u4e3a\u4ec0\u4e48\u4f1a\u963b\u585e\u5462\uff1f\u56e0\u4e3a\u6211\u4eec\u6ca1\u6cd5\u8bfb\u4e00\u4e2a\u6b63\u5728\u5199\u7684\u6570\u636e\u5757\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e0d\u540c\u7684\u6570\u636e\u5757\u8bfb\u548c\u5199\u5c31\u884c\u4e86\u3002\u5bf9\u4e8e \\(k\\)-way \u4e2d\u7684\u6bcf\u4e00\u8def\uff0c\u6211\u4eec\u90fd\u63d0\u4f9b\u4e24\u4e2a input buffer\uff0c\u4e00\u4e2a\u7528\u4e8e\u5199\uff0c\u4e00\u4e2a\u7528\u4e8e\u6392\u5e8f\u3002\u5f53\u6392\u5e8f buffer \u7a7a\u4e86\u7684\u65f6\u5019\uff0c\u5c31\u548c\u8bfb\u6ee1\u4e86\u7684 input buffer \u4ea4\u6362\uff0c\u65e0\u7f1d\u8854\u63a5\u7ee7\u7eed\u8f93\u51fa\u3002\u4e8e\u6b64\u540c\u65f6\uff0c\u521a\u521a\u88ab\u4ea4\u6362\u8fc7\u53bb\u7684 buffer \u5219\u53ef\u7528\u4e8e\u7ee7\u7eed\u8bfb\u5165\u3002

\u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u6267\u884c direct \\(k\\)-way merge\uff0c\u5c31\u9700\u8981 \\(2k\\) \u4e2a input buffer\uff08\u8fd9\u91cc\u5f3a\u8c03 direct \u662f\u56e0\u4e3a\uff0c\u5982\u679c\u4f7f\u7528 iterative \u7684\u8bdd\uff0cinput buffer \u53ea\u9700\u8981 4 \u4e2a\uff09\u3002

\u800c\u5bf9\u4e8e\u8f93\u51fa\uff0c\u6211\u4eec\u53ea\u9700\u8981 2 \u4e2a output buffer \u4ea4\u66ff\u4f7f\u7528\u5373\u53ef\uff0c\u4e00\u4e2a\u7528\u6765\u63a5\u6536\u6765\u81ea\u6392\u5e8f\u7b97\u6cd5\u7684\u8f93\u51fa\uff0c\u4e00\u4e2a\u7528\u6765\u5c06\u6570\u636e\u5199\u5165\u78c1\u76d8\u3002

\u4f46\u662f\uff0c\u5e76\u884c\u4f18\u5316\u7684\u7f3a\u70b9\u5c31\u662f\u5360\u636e\u4e86\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u2014\u2014\u539f\u5148 \\(k + 1\\) \u4e2a buffer \u5e73\u5206\u7684\u7528\u4e8e\u5904\u7406\u6570\u636e\u7684\u5185\u5b58\uff0c\u73b0\u5728\u9700\u8981\u88ab \\(2k + 2\\) \u4e2a buffer \u5e73\u5206\uff0c\u6240\u4ee5\u6bcf\u4e00\u4e2a buffer \u7684\u5927\u5c0f\u4f1a\u53d8\u5c0f\u3002\u8fdb\u800c\u5bfc\u81f4\u6bcf\u4e00\u6b21\u4ece disk \u4e2d\u8bfb\u53d6\u7684\u6570\u636e\u53d8\u5c11\uff0c\u6240\u4ee5\u8981\u8bfb\u5b8c\u6570\u636e\u6240\u9700\u8981\u7684\u8bfb\u53d6\u6b21\u6570\u5c31\u589e\u52a0\uff0c\u5373 seek \u6b21\u6570\u589e\u52a0\u3002

"},{"location":"cour_note/D2CX_ComputerOrganization/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7ec4\u6210 | Computer Organization","text":"

\u7ea6 57 \u4e2a\u5b57

\u7531\u4e8e\u7b14\u8bb0\u592a\u6d6a\u8d39\u65f6\u95f4\u4e86\uff0c\u6211\u5b66\u4e60\u8ba1\u7ec4\u4f7f\u7528\u7684\u662f xxjj \u7684\u7b14\u8bb0\uff1a

https://xuan-insr.github.io/computer_organization/1_prelude/

\u987a\u4fbf\u61d2\u5f97\u81ea\u5df1\u91cd\u65b0\u8c03\u6574\uff0c\u76f4\u63a5\u5728\u4ed6\u7684\u7b14\u8bb0\u4e0a\u4fee\u6539\u7136\u540e PR \u4e86\u3002

"},{"location":"cour_note/D2HJ_StanfordWriting/","title":"\ud83d\udd2e \u79d1\u5b66\u6587\u7ae0\u5199\u4f5c | Writing in the Sciences","text":"

\u7ea6 1331 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u5410\u69fd

\u4e0d\u662f\u6211\u8bf4\uff0c\u6211\u611f\u89c9\u8fd9\u8bfe\u7684\u7ec4\u7ec7\u6ca1\u6709\u5f88\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6216\u8005\u8bf4\u5b9e\u9645\u4e0a\u5b83\u5e76\u4e0d\u5c5e\u4e8e\u80fd\u591f\u7528\u6846\u67b6\u6027\u7684\u5185\u5bb9\u6982\u62ec\u7684\uff0c\u800c\u662f\u4e0d\u65ad\u7684\u628a\u7ec6\u8282\u5185\u5bb9\u4e22\u51fa\u6765\u5e76\u5728\u6848\u4f8b\u4e2d\u5206\u6790\uff0c\u6240\u4ee5\u611f\u89c9\u7b14\u8bb0\u5f88\u96be\u505a\u554a\uff0c\u7136\u540e\u611f\u89c9\u7b2c\u4e00\u5355\u5143\u7684\u5185\u5bb9\u662f\u5bf9\u6574\u4e2a\u8bfe\u7a0b\u7684\u5927\u81f4\u6897\u6982\uff0c\u6240\u4ee5\u8fd9\u91cc\u653e\u7684\u4e3b\u8981\u662f\u7b2c\u4e00\u7ae0\u7684\u5185\u5bb9\uff0c\u540e\u9762\u5982\u679c\u6709\u9047\u5230\u6211\u89c9\u5f97\u6709\u5fc5\u8981\u4e14\u65b9\u4fbf\u8bb0\u4e0b\u6765\u7684\u4e1c\u897f\u4f1a\u5fd8\u91cc\u9762\u4e22\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u611f\u89c9\u8fd9\u4efd\u7b14\u8bb0\u7684\u8d28\u91cf\u4e0d\u662f\u5f88\u9ad8\uff0c\u6548\u679c\u4e5f\u4e0d\u662f\u5f88\u597d\u2014\u2014\u5bf9\u4e8e\u66ff\u4ee3\u8fd9\u95e8\u8bfe\u6765\u8bf4\u3002

\u6897\u6982

\u79d1\u5b66\u6587\u732e\u662f\u4e3a\u4e86\u89c2\u70b9\u4ea4\u6d41\u5b58\u5728\u7684\uff0c\u800c\u201c\u6587\u7ae0\u201d\u53ea\u662f\u89c2\u70b9\u4ea4\u6d41\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u627f\u8f7d\u5f62\u5f0f\u3002\u6211\u4eec\u8981\u7740\u91cd\u4e8e\u8ba9\u8bfb\u8005\u80fd\u4ee5\u66f4\u5c0f\u7684\u8d1f\u62c5\u7406\u89e3\u6587\u7ae0\u7684\u5185\u6db5\uff0c\u5373\u7528\u7b80\u660e\u627c\u8981\u7684\u3001\u8109\u7edc\u6e05\u6670\u7684\u6587\u5b57\uff0c\u8868\u8fbe\uff08\u6709\u53ef\u80fd\u6bd4\u8f83\u590d\u6742\u7684\uff09\u89c2\u70b9\u548c\u903b\u8f91\u3002

\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u201c\u4e3a\u8bfb\u8005\u670d\u52a1\u201d\uff0c\u8003\u8651\u5230\u6587\u7ae0\u7684\u9605\u8bfb\u8282\u594f\uff0c\u5c3d\u53ef\u80fd\u8ba9\u6587\u7ae0\u80fd\u591f\u88ab\u884c\u4e91\u6d41\u6c34\u5730\u9605\u8bfb\u4e0b\u6765\uff0c\u800c\u975e\u78d5\u78d5\u7eca\u7eca\u6216\u53cd\u53cd\u590d\u590d\u3002

\u4e00\u7bc7\u79d1\u5b66\u6587\u7ae0\u662f\u4e3a\u4e86\u4ea4\u6d41\u89c2\u70b9\u800c\u5b58\u5728\u7684\uff0c\u6240\u4ee5\u5b83\u5e94\u5f53\u80fd\u591f\u8ba9\u4eba \u9ad8\u6548 \u5730\u83b7\u53d6\u6838\u5fc3\u5185\u5bb9\uff0c\u6e05\u6670 \u5730\u641e\u6e05\u695a\u6587\u7ae0\u8bf4\u4e86\u4ec0\u4e48\uff0c\u5c24\u5176\u5728\u64b0\u5199\u6587\u7ae0\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u8981\u5c24\u5176\u6ce8\u91cd\u8fd9\u4e9b\uff1b\u5728\u6b64\u57fa\u7840\u4e0a \u4f18\u96c5 \u7684\u6587\u98ce\u80fd\u8ba9\u6587\u7ae0\u66f4\u4e0a\u4e00\u5c42\u697c\uff0c\u800c\u8fd9\u4e9b\u901a\u5e38\u662f\u5728\u4fee\u6539\u4e0e\u6da6\u8272\u4e2d\u4f53\u73b0\u51fa\u6765\u7684\u3002

\u800c\u4e3a\u4e86\u5b9e\u73b0\u300c\u9ad8\u6548\u300d\u548c\u300c\u6e05\u6670\u300d\uff0c\u4f60\u9996\u5148\u5fc5\u987b\u6e05\u695a\u81ea\u5df1\u5c06\u8981\u8868\u8fbe\u4ec0\u4e48\uff08Have something to say.\uff09\uff0c\u5e76\u4e14\u68b3\u7406\u6e05\u8fd9\u4e9b\u5185\u5bb9\u7684\u8109\u7edc\u548c\u903b\u8f91\u5173\u7cfb\uff08Logical thinking.\uff09\uff0c\u6b64\u5916\uff0c\u4e3a\u4e86\u8f85\u52a9\u6784\u5efa\u8d77\u4e00\u7bc7\u6587\u7ae0\uff0c\u4f60\u8fd8\u9700\u8981\u4e00\u4e9b\u5199\u4f5c\u5957\u8def\uff08A few simple, learnable rules of style.\uff09\u3002

\u8fd9\u91cc\u6709\u4e00\u4e9b\u5176\u5b83\u4e60\u60ef\u80fd\u591f\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u5199\u4f5c\uff1a

  1. \u65e5\u5e38\u591a\u8bfb\u591a\u5199\u591a\u6a21\u4eff\uff0c\u4e0d\u4e00\u5b9a\u8981\u548c\u79d1\u5b66\u6587\u7ae0\u6709\u5173\uff1b
  2. \u6539\u6b63\u4e00\u4e9b\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u517b\u6210\u7684\u574f\u7684\u201c\u5b66\u672f\u201d\u5199\u4f5c\u4e60\u60ef\uff0c\u8bb2\u8005\u79f0\u4e4b\u4e3a deprogramming step\uff1b
  3. \u52a8\u7b14\u4e4b\u524d\u5148\u5c1d\u8bd5\u7740\u7528\u8bed\u8a00\u6765\u8bb2\u8ff0\u6587\u7ae0\u5185\u5bb9\uff0c\u6bd4\u5982\u548c\u4f60\u7684\u670b\u53cb\u8c08\u8c08\uff1b
  4. \u5c1d\u8bd5\u8ba9\u6587\u7ae0\u53d8\u5f97\u6709\u5438\u5f15\u529b\uff1b
  5. \u8ba4\u8bc6\u5230\u5199\u4f5c\u4e0d\u9700\u8981\u7075\u611f\uff0c\u4e0d\u8981\u628a\u7075\u611f\u5f53\u4f5c\u501f\u53e3\uff1b
  6. \u8ba4\u8bc6\u5230\u5199\u4f5c\u672c\u8eab\u662f\u56f0\u96be\u7684\uff0c\u800c\u5927\u5bb6\u90fd\u4e00\u6837\uff1b
  7. \u575a\u6301\u53cd\u590d\u4fee\u6539\uff0c\u751a\u81f3\u662f\u5728\u5199\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u4f18\u5148\u628a\u6587\u7ae0\u6210\u54c1\u5199\u51fa\u6765\uff0c\u518d\u4e0d\u538c\u5176\u70e6\u5730\u4fee\u7f2e\uff1b
  8. \u6740\u4f10\u679c\u65ad\uff0c\u4e0d\u8981\u6267\u7740\u4e8e\u5df2\u7ecf\u5199\u51fa\u6765\u7684\u4f46\u662f\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u7684\u6587\u5b57\uff1b
  9. \u627e\u4e00\u4e2a\u597d\u7f16\u8f91\uff0cta \u4eec\u53ef\u80fd\u4f1a\u7ed9\u4f60\u597d\u7684\u610f\u89c1\u548c\u5efa\u8bae\uff1b
  10. \u53bb\u5192\u9669\uff0c\u52c7\u6562\u5730\u53bb\u7a81\u7834\u684e\u688f\uff1b

\u5177\u4f53\u5230\u5199\u4f5c\u65f6\uff0c\u6211\u4eec\u8981\u5207\u5fcc\u53e5\u5b50\u6666\u6da9\u96be\u61c2\uff0c\u5728\u5199\u4f5c\u8fc7\u7a0b\u4e2d\u6211\u4eec\u53ef\u80fd\u65e0\u610f\u8bc6\u5730\u7528\u6666\u6da9\u590d\u6742\u7684\u8bed\u53e5\u63a9\u76d6\u6211\u4eec\u60f3\u8981\u8868\u8fbe\u7684\u5185\u5bb9\uff0c\u5176\u4e2d\u53ef\u80fd\u7684\u539f\u56e0\u6709\uff1a

\u5c06\u8bb8\u591a\u52a8\u8bcd\u8f6c\u5316\u4e3a\u540d\u8bcd\u4f7f\u7528

Verbs drive sentences along and nouns slow them down.

bad eg

Adoptive cell transfer (ACT) immunotherapy is based on the ex vivo selection of tumor-reactive lymphocytes, and their activation and numerical expression before reinfusion to the autologous tumor-bearing host.

\u4f7f\u7528\u6a21\u7cca\u5bbd\u6cdb\u7684\u8bcd

\u6a21\u7cca\u5bbd\u6cdb\u7684\u3001\u4e0d\u591f\u5177\u4f53\u7684\u3001\u4e0d\u80fd\u8ba9\u8bfb\u8005\u8111\u4e2d\u4ea7\u751f\u76f4\u63a5\u5370\u8c61\u7684\u8bcd\u4f1a\u8ba9\u8bfb\u8005\u611f\u5230\u56f0\u60d1\u3002

\u4f7f\u7528\u4e0d\u5fc5\u8981\u7684\u7f29\u5199\u6216\u672f\u8bed

\u9664\u975e\u662f\u4e00\u4e9b\u5e7f\u4e3a\u4eba\u77e5\u7684\u7f29\u5199\uff0c\u5426\u5219\u5f88\u53ef\u80fd\u4e3a\u8bfb\u8005\u5e26\u6765\u56f0\u6270\u3002\u5373\u4f7f\u4f60\u5728\u524d\u6587\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5b83\u4eec\u5f88\u53ef\u80fd\u9700\u8981\u56de\u8fc7\u5934\u6765\u67e5\u9605\u624d\u80fd\u201c\u8bb0\u8d77\u201d\u8fd9\u4e2a\u7f29\u5199\u7684\u542b\u4e49\u3002

\u4f7f\u7528\u88ab\u52a8\u8bed\u6001

\u8fdd\u53cd\u4e86\u60c5\u7eea\u4e0a\u7684 \u4e3b-\u8c13-\u5bbe \u7684\u987a\u5e8f\u3002\u5f53\u7136\u8981\u6309\u7167\u5b9e\u9645\u60c5\u51b5\u6765\u8bf4\uff0c\u5173\u952e\u662f\u8981\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u8bed\u6cd5\u53d8\u5316\u3002

\u4e3b\u8bed\u548c\u52a8\u8bcd\u592a\u9065\u8fdc

\u8bfb\u8005\u603b\u662f\u5728\u671f\u5f85\u627e\u5230\u4e00\u53e5\u8bdd\u91cc\u7684\u201c\u52a8\u8bcd\u201d\uff0c\u800c\u5982\u679c\u8fd9\u4e2a\u201c\u52a8\u8bcd\u201d\u592a\u96be\u627e\uff0c\u5c06\u4f1a\u5f71\u54cd\u6574\u53e5\u8bdd\u7684\u9605\u8bfb\u6548\u7387\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u4f60\u7684\u5185\u5bb9\u662f\u5426\u590d\u6742\uff0c\u627f\u8f7d\u8fd9\u4e9b\u5185\u5bb9\u7684\u8bed\u53e5\u90fd\u4e0d\u5e94\u5f53\u662f\u590d\u6742\u7684\u3002

\u603b\u7684\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e9b\u539f\u5219\uff1a

  1. \u5220\u51cf\u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u5bf9\u6b64\u4fdd\u6301 \u654f\u611f \u548c \u65e0\u60c5\uff0c\u4e0d\u8981\u6297\u62d2\u91cd\u6784\u5b57\u53e5\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u5b9e\u9645\u542b\u4e49\u7684\u8bcd\uff0c\u4e00\u4e9b\u53ea\u6709\u8bed\u6c14\u4f5c\u7528\u7684\u8bcd\u7b49\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u610f\u4e49\u7684\u7f29\u5199\u548c\u672f\u8bed\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u524d\u540e\u8bed\u4e49\u91cd\u590d\u7684\u8bcd\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1aadv. \u4eec\uff1b
  2. \u66f4\u591a\u5730\u4f7f\u7528\u4e3b\u52a8\u8bed\u6001\uff08\u4e3b\u8c13\u5bbe\uff09\u800c\u975e\u88ab\u52a8\u8bed\u6001\uff1b
  3. \u56f4\u7ed5 \u52a8\u8bcd \u5199\u4f5c\uff1a\u4f7f\u7528\u5f3a\u52a8\u8bcd\uff0c\u907f\u514d\u5c06\u52a8\u8bcd\u53d8\u6210\u540d\u8bcd\uff0c\u5e76\u5c06\u52a8\u8bcd\u653e\u5728\u9192\u76ee\u7684\u4f4d\u7f6e\uff1b
  4. \u9ad8\u8003\u82f1\u8bed\u4f5c\u6587\u600e\u4e48\u5199\uff0c\u79d1\u5b66\u6587\u732e\u5c31\u4e0d\u8981\u600e\u4e48\u5199\uff1b

\u51cf\u5c11\u6587\u7ae0\u4e2d\u7684\u6df7\u4e71\u6709\u5982\u4e0b\u65b9\u6cd5\uff1a

\u8f6c\u5426\u5b9a\u4e3a\u80af\u5b9a

from to not honest dishonest not harmful safe not important unimportant do not have lack do not remember forget do not pay attention to ignore do not succeed fail

\u5220\u53bb\u8fc7\u5269\u7684 \"there are\" / \"there is\"

\u5220\u53bb\u4e0d\u5fc5\u8981\u7684\u4ecb\u8bcd

"},{"location":"cour_note/D2QD_DigitalDesign/","title":"\ud83d\udd2e \u6570\u5b57\u903b\u8f91\u8bbe\u8ba1 | Digital Design","text":"

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

\u6ce8\u610f\uff01

\u672c\u7ad9\u90e8\u7f72\u5728 GitHub pages \u4e0a\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u5361\u987f\u60c5\u51b5\uff0c\u4f7f\u7528\u4ee3\u7406\u53ef\u4ee5\u6781\u5927\u4f18\u5316\u9605\u8bfb\u4f53\u9a8c\u3002

\u8bfe\u7a0b\u4fe1\u606f

\u5f88\u663e\u7136\uff0c\u6211\u70c2\u5c3e\u4e86\uff0c\u7b2c\u4e94\u7ae0\u5185\u5bb9\u5f88\u7b80\u964b\uff0c\u7b2c\u4e03\u7ae0\u57fa\u672c\u6ca1\u5199\uff0c\u5b9e\u5728\u662f\u8003\u524d\u6765\u4e0d\u53ca\u5199\u5b8c\u4e86\u3002\u4f46\u662f\u6211\u53ef\u4ee5\u4fdd\u8bc1\u9664\u6b64\u4e4b\u5916\u7684\u5185\u5bb9\u6211\u90fd\u662f\u4ed4\u7ec6\u63a8\u6572\u540e\u624d\u5199\u51fa\u6765\u7684orz\u3002

\u6b64\u5916\uff0c\u5bf9\u4e8e\u6211\u5df2\u7ecf\u5199\u4e86\u7684\u5185\u5bb9\u6709\u7591\u4e49\uff0c\u6216\u662f\u5e0c\u671b\u80fd\u8865\u5145\u6211\u6ca1\u5199\u7684\u5185\u5bb9\uff0c\u6b22\u8fce\u63d0\u4ea4 PR\uff01

List

\u8865\u5929\u65f6\u5019\u7684\u4e00\u70b9\u60f3\u6cd5\uff0c\u56e0\u4e3a\u8bfe\u672c\u6bcf\u4e00\u7ae0\u90fd\u6709\u4e00\u4e2a summary\uff0c\u6240\u4ee5\u5982\u679c\u8981\u770b\u4e66\u7684\u8bdd\u6216\u8bb8\u53ef\u4ee5\u5148\u770b\u90a3\u4e2a summary \u518d\u770b\u5177\u4f53\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/","title":"Chap 1 Digital Systems and Information","text":"

\u7ea6 2053 \u4e2a\u5b57 9 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4fe1\u606f\u8868\u8fbe--information-representation","title":"\u4fe1\u606f\u8868\u8fbe | Information Representation","text":"

\u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u4fe1\u606f\u5f80\u5f80\u662f \u8fde\u7eed(continuous) \u7684\uff0c\u4f46\u5728\u4eba\u9020\u7269\u7684\u4e16\u754c\u4e2d\uff0c\u5927\u90e8\u5206\u4fe1\u606f\u90fd\u662f \u79bb\u6563(discrete) \u7684\u3002

\u5728\u7535\u5b50\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u4fe1\u53f7\u5206\u4e3a \u6a21\u62df\u4fe1\u53f7(analog signal) \u548c \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e24\u79cd\u3002\u5176\u4e2d\uff0c\u5728 \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e2d\u53c8\u6709\u591a\u79cd\u8868\u793a\u65b9\u6cd5\uff0c\u5982\u4eca\u6211\u4eec\u6700\u5e38\u7528\u7684\u662f \u4e8c\u8fdb\u5236(binary)\u3002\u5bf9\u5e94\u5230\u7535\u8def\u5c42\u9762\uff0c\u6211\u4eec\u5e38\u5e38\u7528 \u9ad8\u7535\u4f4d(HIGH) \u548c \u4f4e\u7535\u4f4d(LOW) \u6765\u8868\u5f81 1 \u548c 0\u3002

\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e2d\uff0c\u9ad8\u4f4e\u7535\u4f4d\u7684\u63a5\u53d7\u8303\u56f4\u662f\u4e0d\u540c\u7684\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8f93\u5165\u7684\u5224\u5b9a\u8303\u56f4\u6bd4\u8f93\u51fa\u7684\u5224\u5b9a\u8303\u56f4\u5927\uff0c\u5373 \u5bbd\u8fdb\u4e25\u51fa\u3002\u5176\u76ee\u7684\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u63d0\u9ad8\u7535\u8def\u5728\u566a\u97f3\u7b49\u5f02\u5e38\u5f71\u54cd\u4e0b\u4e5f\u80fd\u6b63\u5e38\u8868\u73b0\u7684\u80fd\u529b\u3002

HIGH input LOW input HIGH output LOW output 0.6 ~ 1.1 -0.1 ~ 0.4 0.9 ~ 1.1 -0.1 ~ 0.1

\u6216\u8bb8\u4f60\u4e5f\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u5728\u56fe\u4e2d\uff0cHIGH \u7684\u63a5\u53d7\u8303\u56f4\u548c LOW \u7684\u63a5\u53d7\u8303\u56f4\u4e4b\u95f4\u8fd8\u5b58\u5728\u4e00\u6bb5\u533a\u57df\u3002\u843d\u5728\u8fd9\u4e00\u90e8\u5206\u7684\u7535\u5e73\u662f \u672a\u5b9a\u4e49(undefined) \u7684\uff0c\u4e5f\u88ab\u79f0\u4e3a\u662f \u6d6e\u52a8(floating) \u7684\u3002\u5982\u679c\u8f93\u51fa\u7684\u7535\u5e73\u662f\u5728\u6d6e\u52a8\u533a\u95f4\u7684\uff0c\u90a3\u4e48\u5176\u8ba4\u5b9a\u503c\u5c06\u662f\u968f\u673a\u7684\u3002

\u4e8b\u5b9e\u4e0a\uff0c\u5728\u4fe1\u606f\u7684\u5bf9\u5e94\u4e0a\uff0c\u867d\u7136\u5c06\u9ad8\u4f4e\u7535\u5e73\u540c HIGH/LOW \u8054\u7cfb\u662f\u5f88\u81ea\u7136\u7684\uff0c\u4f46\u662f\u5c06\u4ed6\u4eec\u540c true/false \u6216\u8005 1/0 \u8054\u7cfb\u5176\u5b9e\u5e76\u4e0d\u552f\u4e00\u3002\u4f46\u662f\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\uff08\u6211\u4eec\u79f0\u4e4b\u4e3a positive logic\uff09\uff0c\u6211\u4eec\u90fd\u8ba4\u4e3a HIGH ~ true ~ 1\uff0c LOW ~ false ~ 0\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c(b) \u56fe\u4e2d\u7684\u6a21\u62df\u4fe1\u53f7\u5728\u7ecf\u8fc7\u6211\u4eec\u7684\u5668\u4ef6\u540e\uff0c\u4f1a\u88ab\u8ba4\u4e3a\u662f (c) \u56fe\u6240\u793a\u7684\u4fe1\u53f7\u3002\u800c\u8fd9\u4e9b\u64cd\u4f5c\u5728\u786c\u4ef6\u5c42\u9762\uff0c\u6211\u4eec\u901a\u8fc7 \u6676\u4f53\u7ba1(transistors) \u6765\u5b9e\u73b0\u3002

\u8fd9\u4e5f\u7275\u626f\u5230\u6211\u4eec\u4e3a\u4ec0\u4e48\u6700\u7ec8\u4f7f\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u4fe1\u606f\u3002\u4e00\u65b9\u9762\u662f\u56e0\u4e3a\u4e8c\u503c\u5668\u4ef6\u6bd4\u8f83\u5e38\u89c1\uff0c\u4ea6\u5373\u8fd9\u91cc\u63d0\u5230\u7684\u6676\u4f53\u7ba1\uff1b\u53e6\u5916\u4e00\u65b9\u9762\u662f\u4f7f\u7528\u4e8c\u8fdb\u5236\u53ef\u4ee5\u964d\u4f4e\u7535\u8def\u6210\u672c\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42--abstraction-layers-in-computer-systems-design","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42 | Abstraction Layers in Computer Systems Design","text":"\u8d8a\u4e0a\u5c42\u62bd\u8c61\u7a0b\u5ea6\u8d8a\u9ad8 Algorithms Programing Languages Operating Systems Instruction Set Architecture Microarchitecture Register Transfers Logic Gates Transistor Circuits"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u6570\u5b57\u7cfb\u7edf--number-systems","title":"\u6570\u5b57\u7cfb\u7edf | Number Systems","text":"

\u9996\u5148\u9700\u8981\u6d89\u53ca\u7684\u95ee\u9898\u662f\u8fdb\u5236\u8f6c\u6362\u3002

\u5bf9\u4e8e\u4e00\u4e2a \\(r\\) \u8fdb\u5236\u6570\uff0c\u5b83\u4e00\u822c\u88ab\u5199\u6210\u8fd9\u6837\uff1a

\\[ (A_{n-1}A_{n-2}...A_1A_0A_{-1}...A_{-(m-1)}A_{-m})_{r} \\]

\u800c\u5b83\u5bf9\u5e94\u7684\u5341\u8fdb\u5236\u771f\u503c\u4e3a\uff1a

\\[ \\begin{aligned} \\sum_{i=-m}^{n-1} A_ir^i\\;\\; =&A_{n-1}r^{n-1}+A_{n-2}r^{n-2}+...\\\\ +&A_{1}r^{1}+A_0r^0+A_{-1}r^{-1}+...\\\\ +&A_{-(m-1)}r^{m-1}+A_{-m}r^{-m} \\end{aligned} \\]

\u8ba1\u7b97\u673a\u9886\u57df\u5e38\u89c1\u7684\u8fdb\u5236\u4e3b\u8981\u662f \u4e8c\u8fdb\u5236(binary)\uff0c\u516b\u8fdb\u5236(octal)\uff0c\u5341\u8fdb\u5236(decimal) \u548c \u5341\u516d\u8fdb\u5236(hexadecimal)\u3002

\u5176\u4e2d\u4e8c\u3001\u516b\u3001\u5341\u516d\u8fdb\u5236\u4e4b\u95f4\u7684\u8f6c\u6362\u975e\u5e38\u7b80\u5355\uff0c\u5b58\u5728\u591a\u4f4d\u5230\u4e00\u4f4d\u4e4b\u95f4\u7684\u65e0\u540e\u6548\u6027\u6620\u5c04\uff0c\u4f8b\u5982\u4e8c\u8fdb\u5236\u8f6c\u6362\u5230\u5341\u516d\u8fdb\u5236\u53ea\u9700\u8981\u5c06\u4ece\u4f4e\u5230\u9ad8\u6bcf\u56db\u4f4d\u8f6c\u5316\u6210\u5341\u516d\u8fdb\u5236\u4e2d\u7684\u4e00\u4f4d\u5373\u53ef\u3002

\u9700\u8981\u6ce8\u610f\uff0c\u7531\u4e8e\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u5728\u96f6\u4f4d\u4e0a\u7684\u6743\u91cd\u76f8\u540c\uff0c\u8fd9\u610f\u5473\u7740\u5728\u6574\u6570\u90e8\u5206\uff0c\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u662f\u53ef\u4ee5\u76f8\u4e92\u7cbe\u51c6\u8f6c\u5316\u7684\uff08\u5373\u6700\u5c0f\u7cbe\u5ea6\u662f\u4e00\u81f4\u7684\uff0c\u90fd\u662f 1\uff09\uff1b\u7136\u800c\u8be5\u6027\u8d28\u5728\u5c0f\u6570\u90e8\u5206\u5e76\u4e0d\u6210\u7acb\uff08\u56e0\u4e3a\u5c0f\u6570\u90e8\u5206\u4e0d\u5b58\u5728\u201c\u6700\u5c0f\u7cbe\u5ea6\u201d\u4e00\u8bf4\uff09\uff0c\u5373\u5341\u8fdb\u5236\u65e0\u6cd5\u7cbe\u51c6\u8f6c\u5316\u4e3a\u4e8c\u8fdb\u5236\uff0c\u4f46\u4e8c\u8fdb\u5236\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5341\u8fdb\u5236\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7b97\u672f\u8fd0\u7b97--arithmetic-operations","title":"\u7b97\u672f\u8fd0\u7b97 | Arithmetic Operations","text":"

\u8fd9\u91cc\u6d89\u53ca\u7684\u4e3b\u8981\u662f \u52a0\u6cd5(Addition)\u3001\u51cf\u6cd5(Subtraction)\u3001\u4e58\u6cd5(Multiplication)\u3002

\u6574\u4f53\u6d41\u7a0b\u548c\u5c0f\u5b66\u7ad6\u5f0f\u52a0\u6cd5\u662f\u4e00\u81f4\u7684\u3002

\u4e8c\u8fdb\u5236\u8fd0\u7b97

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7f16\u7801--codes","title":"\u7f16\u7801 | Codes","text":"

\u4e8c\u8fdb\u5236\u7f16\u7801\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u72ec\u70ed\u7801--\u72ec\u51b7\u7801","title":"\u72ec\u70ed\u7801 & \u72ec\u51b7\u7801","text":"

\u72ec\u70ed\u7801(one-hot) \u8981\u6c42\u6bd4\u7279\u5411\u91cf\u4e2d\u53ea\u6709\u4e00\u4f4d\u662f 1\uff1b\u5bf9\u5e94\u7684\u8fd8\u6709 \u72ec\u51b7\u7801(one-cold)\u3002

\u4f7f\u7528\u8fd9\u79cd\u7f16\u7801\u7684\u597d\u5904\u662f\uff0c\u51b3\u5b9a\u6216\u6539\u53d8\u72b6\u6001\u673a\u76ee\u524d\u7684\u72b6\u6001\u7684\u6210\u672c\u76f8\u5bf9\u8f83\u4f4e\uff0c\u5bb9\u6613\u8bbe\u8ba1\u4e5f\u5bb9\u6613\u68c0\u6d4b\u975e\u6cd5\u884c\u4e3a\u7b49\u3002

\u4f46\u662f\u76f8\u5bf9\u5e94\u7684\uff0c\u7f3a\u70b9\u662f\u4fe1\u606f\u8868\u793a\u7387\u8f83\u4f4e\uff0c\u975e\u6cd5\u72b6\u6001\u975e\u5e38\u591a\u800c\u6709\u6548\u72b6\u6001\u5f88\u5c11\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#bcd-\u7801","title":"BCD \u7801","text":"

\u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6570\u636e\u8868\u8ff0\u90fd\u662f\u4ee5\u5341\u8fdb\u5236\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7814\u7a76\u5982\u4f55\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u5341\u8fdb\u5236\u3002

\u9996\u5148\uff0c\u4e00\u4f4d\u4e8c\u8fdb\u5236\u6570\u80fd\u5305\u542b\u7684\u4fe1\u606f\u662f 1bit\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u201c\u771f\u201d\u6216\u8005\u4e00\u4e2a\u201c\u5047\u201d\u3002\u6211\u4eec\u79f0\u4e00\u4e2a\u62e5\u6709 n \u4e2a\u5143\u7d20\u7684\u4e8c\u8fdb\u5236\u5411\u91cf\u4e3a\u4e00\u4e2a n\u4f4d\u4e8c\u8fdb\u5236\u7f16\u7801(n-bit binary code)\u3002\u4e00\u4e2a n \u4f4d\u4e8c\u8fdb\u5236\u6570\u62e5\u6709 \\(2^{n}\\) \u79cd\u53ef\u80fd\u7684\u7ec4\u5408\uff0c\u56e0\u800c\u53ef\u4ee5\u8868\u793a \\(2^n\\) \u79cd\u4fe1\u606f\u3002

\u800c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u7684\u7f16\u7801\u7cfb\u7edf\uff0c\u5c31\u662f\u5c06\u6211\u4eec\u9700\u8981\u7684\u4fe1\u606f\u6620\u5c04\u5230\u8fd9 \\(2^n\\) \u4e2a\u201c\u7a7a\u4f4d\u201d\u4e2d\u3002\u5f53\u7136\uff0c\u5f53\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u4fe1\u606f\u6570\u91cf\u5e76\u4e0d\u662f 2 \u7684\u5e42\u6b21\u65f6\u5019\uff0c\u4f1a\u51fa\u73b0\u4e00\u4e9b \u672a\u5206\u914d(unassigned) \u7684\u6bd4\u7279\u7ec4\u5408\u3002

\u800c\u5728\u8fd9\u79cd\u7f16\u7801\u4e2d\uff0c\u6700\u5e38\u7528\u7684\u5c31\u662f BCD\u7801(binary-coded demical)\u3002\u5176\u6838\u5fc3\u601d\u8def\u5c31\u662f\uff0c\u5c06\u5341\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d \u5206\u522b \u7528 \u771f\u503c\u76f8\u7b49\u7684 4 \u4f4d\u4e8c\u8fdb\u5236 \u8868\u793a\uff0c\u5373 0 ~ 9 \u5206\u522b\u7528 0000 ~ 1001 \u8868\u793a\u3002

DecimalSymbol BCDDigit 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001

eg

\\[ \\mathrm{ (185)_{10}\\;=\\;(0001\\;1000\\;0101)_{BCD}\\;=\\;(10111001)_2 } \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4f59\u4e09\u7801","title":"\u4f59\u4e09\u7801","text":"

\u4e00\u79cd BCD\u7801 \u7684\u6539\u8fdb\u662f \u4f59\u4e09\u7801(Excess3)\u3002\u5176\u6838\u5fc3\u601d\u8def\u662f\u5728 BCD\u7801\u7684\u57fa\u7840\u4e0a\uff0c\u589e\u52a0\u4e00\u4e2a\u5927\u5c0f\u4e3a 3 \u7684\u504f\u79fb\u91cf\u3002

DecimalSymbol Excess3Digit 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100

\u4e3a\u4ec0\u4e48\u662f 3 \u5462\uff1f\u9996\u5148\u8fd9\u4e2a 3 \u6765\u81ea\u4e8e \\(\\frac{16-10}{2}\\)\uff0c\u4e5f\u5c31\u662f 8421 \u7801\u7684\u5bb9\u91cf\u51cf\u53bb\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u6570\u5b57\u6570\u91cf\uff0c\u518d\u9664\u4ee5\u4e8c\u3002\u8fd9\u6837\u7684\u597d\u5904\u662f\uff0c\u5341\u8fdb\u5236\u4e0b\u80fd\u8fdb\u4f4d\u7684\u4e24\u4e2a\u6570\uff0c\u5728\u4f59\u4e09\u7801\u4e0b\u76f8\u52a0\u4e5f\u521a\u597d\u8fdb\u4f4d\u3002

\u4f46\u662f\u9700\u8981\u5f3a\u8c03\u7684\u4e00\u70b9\u662f\uff0c\u7f16\u7801\u548c\u6570\u503c\u662f\u5b58\u5728\u533a\u522b\u7684\uff0c\u867d\u7136\u6211\u4eec\u63d0\u5230\u4e86\u4f59\u4e09\u7801\u76f8\u52a0\uff0c\u4f46\u662f\u7f16\u7801\u505a\u8fd0\u7b97\u591a\u6570\u60c5\u51b5\u4e0b\u662f\u6ca1\u6709\u610f\u4e49\u7684\u3002\u201c\u8fd0\u7b97\u201d\u7684\u4e3b\u4f53\u66f4\u591a\u662f\u6570\u503c\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u683c\u96f7\u7801","title":"\u683c\u96f7\u7801","text":"

\u6b64\u5916\uff0c\u8fd9\u91cc\u4e0d\u5f97\u4e0d\u63d0\u7684\u53e6\u5916\u4e00\u4e2a\u7f16\u7801\u662f \u683c\u96f7\u7801(Gray Codes)\u3002\u683c\u96f7\u7801\u7684\u7279\u5f81\uff0c\u4e5f\u662f\u4ed6\u7684\u4f18\u70b9\uff0c\u5c31\u662f\u76f8\u90bb\u7684\u4e24\u4e2a\u6570\u5728\u4e8c\u8fdb\u5236\u4e0b\u7684\u8868\u793a\u53ea\u5dee\u4e00\u4f4d\uff08\u5f53\u5728\u5360\u6ee1\u65f6\uff0c\u5bf9\u4e8e\u6574\u4e2a\u7f16\u7801\u5e8f\u5217\uff0c\u73af\u72b6\u6ee1\u8db3\u8be5\u6761\u4ef6\uff09\u3002

\u6bd4\u5982\u6709\u5982\u4e0b\u5e94\u7528\uff1a

\u4ee5\u53ca\u5728\u8bb8\u591a\u72b6\u6001\u63a7\u5236\u4e2d\u90fd\u6709\u7740\u5e7f\u6cdb\u7684\u5e94\u7528\u3002

\u4ece\u7b14\u8bd5\u505a\u9898\u89d2\u5ea6\u6765\u8bf4\uff0c\u683c\u96f7\u7801\u6700\u9ebb\u70e6\u7684\u5176\u5b9e\u662f\u4e0e\u5341\u8fdb\u5236\u6570\u7684\u8f6c\u6362\u3002\uff08\u6b64\u5904 @CSP-S2019-Day1-T1\uff09

\u4e2a\u4eba\u8ba4\u4e3a\u6700\u597d\u505a\u7684\u505a\u6cd5\u5c31\u662f\uff0c\u5047\u8bbe\u6211\u4eec\u8981\u627e\u7684\u662f\u7b2c k \u4e2a\u683c\u96f7\u7801\uff0c\u5219\u5bf9\u5e94\u7684\u683c\u96f7\u7801\u4e3a\uff1a

\\[ k \\;\\;\\mathrm{XOR}\\;\\; (k>>1) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#ascii-\u7801","title":"ASCII \u7801","text":"

\u5b57\u7b26\u7f16\u7801\u6240\u4f7f\u7528\u7684\u4e00\u822c\u662f ASCII \u7f16\u7801\uff0c\u7531\u4e8e ASCII \u5df2\u7ecf\u662f\u8001\u751f\u5e38\u8c08\u4e86\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e0d\u518d\u5c55\u5f00\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u5947\u5076\u6821\u9a8c\u4f4d","title":"\u5947\u5076\u6821\u9a8c\u4f4d","text":"

\u4fe1\u9053\u7f16\u7801\u4e0e\u4fe1\u6e90\u7f16\u7801\uff1a

\u5728\u4fe1\u53f7\u4f20\u8f93\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u80fd\u7531\u4e8e\u73af\u5883\u5e72\u6270\u7b49\u539f\u56e0\uff0c\u51fa\u73b0\u5404\u79cd\u4fe1\u53f7\u6296\u52a8\uff0c\u6240\u4ee5\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u4fe1\u5ea6\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u9519\u8bef\u68c0\u6d4b\u673a\u5236\u3002

\u4e00\u79cd\u5e38\u89c1\u7684\u65b9\u6cd5\u662f \u5197\u4f59(Redundancy)\uff0c\u5373\u52a0\u5165\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u7528\u4ee5\u6821\u9a8c\u3002

graph TD\nA[Error Detection Techniques]\nB[Single Parity Check]\nC[Cyclic Redundancy Check]\nD[Check Sum]\n\nA-->B\nA-->C\nA-->D

\u5176\u4e2d\u4e00\u79cd\u505a\u6cd5\u662f\u5f15\u5165 \u5947\u5076\u6821\u9a8c\u4f4d(Parity Bit)\u3002\u5b83\u5206\u4e3a \u5947\u6821\u9a8c(Odd Parity) \u548c \u5076\u6821\u9a8c(Even Parity)\u3002\u5206\u522b\u901a\u8fc7\u5f15\u5165\u989d\u5916\u7684\u4e00\u4f4d\uff0c\u6765\u4fdd\u8bc1\u6574\u4e2a\u4fe1\u606f\u4e32\u4e2d 1 \u7684\u6570\u91cf\u662f\u5947\u6570/\u5076\u6570\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/","title":"Chap 2 Combinational Logic Circuits","text":"

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

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u8fd0\u7b97","title":"\u903b\u8f91\u8fd0\u7b97","text":"

\u903b\u8f91\u8fd0\u7b97\u7684\u5bf9\u8c61\u662f\u5e03\u5c14\u53d8\u91cf\uff0c\u4e5f\u5c31\u662f 0/1 \u4e8c\u503c\u3002

\u4e3b\u8981\u7684\u8fd0\u7b97\u5c31\u662f \u4e0e(AND)\uff0c\u6216(OR)\uff0c\u975e(NOT)\uff0c\u5f02\u6216(XOR)\uff0c\u4ee5\u53ca \u4e0e\u975e(NAND)\uff0c\u6216\u975e(NOR)\uff0c\u540c\u6216(XNOR)\u3002

\u9ad8\u7ef4

\u591a\u8f93\u5165\u7684\u5f02\u6216\u548c\u540c\u6216\u88ab\u79f0\u4e3a\u5947\u51fd\u6570\u548c\u5076\u51fd\u6570\u3002

\u53ef\u4ee5\u7528\u5b83\u4eec\u6765\u5b9e\u73b0\u5947\u6821\u9a8c\u548c\u5076\u6821\u9a8c\u3002

\u800c\u4e14\u89c2\u5bdf\u5176\u5361\u8bfa\u56fe\u7684\u5f62\u72b6\uff08\u68cb\u76d8\u5f62\uff09\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u4eec\u662f\u5929\u7136\u4f18\u5316\u7684\uff0c\u5373\u4e0d\u53ef\u4f18\u5316\u7684\u3002

\u8fd0\u7b97\u89c4\u5219\u633a\u7b80\u5355\u7684\uff0c\u5728\u6b64\u7565\u53bb\u3002

\u6bd4\u8f83\u57fa\u7840\u7684\uff0c\u9700\u8981\u4e86\u89e3\u4e0e\u6216\u975e\u7684\u7b26\u53f7\u8868\u793a\u3002

\u7531\u6b64\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u7ec4\u5408\uff0c\u4f8b\u5982\uff1a

\u518d\u6b21\u8fd8\u9700\u8981\u63d0\u5230\u7684\u662f \u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b(De Morgan's Laws)\uff0c\u5176\u8868\u8ff0\u4e3a\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u95e8","title":"\u903b\u8f91\u95e8","text":"

\u903b\u8f91\u95e8\u662f\u5728\u786c\u4ef6\u5c42\u9762\u4e0a\u5b9e\u73b0\u5e03\u5c14\u4ee3\u6570\u7684\u903b\u8f91\u5355\u5143\u3002\u5176\u64cd\u4f5c\u5bf9\u8c61\u4e3a\u9ad8\u4f4e\u7535\u5e73\u3002

\u5982\u56fe\uff0c(a)\u4e2d\u7ed8\u5236\u4e86\u4e09\u4e2a\u5e38\u7528\u903b\u8f91\u95e8\u7684\u7b26\u53f7\uff1b(b)\u4e2d\u5219\u63cf\u8ff0\u4e86\u8fd9\u4e9b\u8fd0\u7b97\u5728 \u65f6\u5e8f\u56fe(timing diagram) \u4e2d\u7684\u72b6\u6001\uff1b(c)\u5219\u63cf\u8ff0\u4e86\u5728\u5ef6\u65f6\uff08\u89c1\u4e0b\uff09\u6548\u5e94\u4e0b\u7684\u65f6\u5e8f\u56fe\u3002

\u8fd8\u6709\u4e00\u4e2a\u6ce8\u610f\u70b9\u662f\uff0c\u975e\u95e8\u5176\u5b9e\u66f4\u591a\u7684\u88ab\u79f0\u4e3a inverter\uff0c\u800c\u975e NOT\u3002

\u4f46\u662f\u7531\u4e8e\u662f\u7269\u7406\u5c42\u9762\u7684\u5b9e\u73b0\uff0c\u6240\u4ee5\u4f1a\u6709\u4e00\u4e9b\u903b\u8f91\u8fd0\u7b97\u5c42\u9762\u4e0d\u4f1a\u51fa\u73b0\u7684\u95ee\u9898\uff0c\u6bd4\u5982 \u5ef6\u65f6(delay)\u3002

Source: https://en.wikipedia.org/wiki/Signal_propagation_delay#Electronics

\u5ef6\u65f6\u7684\u957f\u77ed\u4e0e\u5f88\u591a\u56e0\u7d20\u6709\u5173\uff0c\u53d6\u51b3\u4e8e\u903b\u8f91\u95e8\u7684\u5b9e\u73b0\u6280\u672f\u3002\u800c\u4e14\u901a\u5e38\u6765\u8bf4\uff0c\u5bf9\u4e8e\u4e0d\u540c\u8fd0\u7b97\u53c2\u6570\uff0c\u5176\u5ef6\u65f6\u4e5f\u4f1a\u6709\u4e0d\u540c\u3002

\u6b64\u5916\uff0c\u4e0e\u95e8\u548c\u6216\u95e8\u53ef\u80fd\u6709\u66f4\u591a\u7684\u8f93\u5165\u5f15\u811a\uff0c\u5982\u4e0b\uff1a

\u81f3\u6b64\uff0c\u7ed9\u51fa\u4e86 AND, OR, NOT \u4e09\u4e2a\u95e8\u7684\u7b26\u53f7\u8868\u793a\uff0c\u7c7b\u4f3c\u4e0a\u4e00\u5c0f\u8282\u63d0\u5230\u7684\u90a3\u6837\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5229\u7528\u8fd9\u4e09\u4e2a\u57fa\u7840\u7684\u95e8\u7535\u8def\u6765\u6784\u6210\u5176\u4ed6\u7684\u95e8\u7535\u8def\uff08\u867d\u7136\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u662f\u901a\u8fc7 NAND + NOT \u6765\u5b9e\u73b0 AND \u7684\uff09\u3002

\u4e8e\u662f\u53c8\u5f15\u7533\u51fa\u4e00\u4e2a\u6982\u5ff5\u2014\u2014\u901a\u7528\u95e8(Universal Gate)\u3002\u4e00\u4e2a\u529f\u80fd\u5b8c\u5168\u7684\uff0c\u80fd\u591f\u8868\u793a\u5176\u4ed6\u6240\u6709\u95e8\u7684\u903b\u8f91\u95e8\u88ab\u79f0\u4e3a\u901a\u7528\u95e8\uff0c\u5728\u6211\u4eec\u5b66\u8fc7\u7684\u903b\u8f91\u95e8\u4e2d\uff0cNAND \u548c NOR \u90fd\u662f\u901a\u7528\u95e8\u3002

\u63a8\u8350\u9605\u8bfb

Universal Logic gates can be used to produce any other logic or Boolean function with the NAND and NOR gates being minimal

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5e03\u5c14\u4ee3\u6570","title":"\u5e03\u5c14\u4ee3\u6570","text":"

literal ~ \u5b57\u9762\u91cf\uff0c\u4e5f\u5c31\u662f\u201c\u53d8\u91cf\u201d\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b","title":"\u8fd0\u7b97\u5f8b","text":"

\u8fd9\u5f20\u56fe\u7247\u603b\u7ed3\u4e86\u5e03\u5c14\u8fd0\u7b97\u4e2d\u7684\u8fd0\u7b97\u5f8b\uff0c\u4e2a\u4eba\u611f\u89c9\u6700\u9700\u8981\u5f3a\u5316\u8bb0\u5fc6\u7684\u662f 15 \u6761\uff0c\u56e0\u4e3a\u5e03\u5c14\u4ee3\u6570\u501f\u7528\u4e86\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\uff0c\u4f46\u7b2c 15 \u6761\u5728\u666e\u901a\u4ee3\u6570\u4e2d\u5e76\u4e0d\u6210\u7acb\uff0c\u6240\u4ee5\u5bf9\u4e8e\u4e60\u60ef\u8fd9\u5957\u7b26\u53f7\u7684\u4eba\u6765\u8bf4\u53ef\u80fd\u4e0d\u592a straightfoward\u3002

\u5728\u8bb0\u5fc6\u8fd9\u5957\u8fd0\u7b97\u89c4\u5f8b\u7684\u65f6\u5019\uff0c\u6211\u4e2a\u4eba\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u4e00\u5b9a\u8981\u5efa\u7acb \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\u89c2\u5ff5\u3002\u6211\u4eec\u4e60\u60ef\u7528\u201c\u771f\u201d\u53bb\u7406\u89e3\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5982\u679c\u4f60\u4ee5\u201c\u5047\u201d\u4e3a\u4e3b\u4f53\u53bb\u5206\u6790\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f1a\u53d1\u73b0\u548c\u201c\u771f\u201d\u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u3002\u6362\u8a00\u4e4b\uff0c \u4e0e \u548c \u6216 \u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u8fd0\u7b97\uff0c\u800c\u975e\u50cf\u4ed6\u4eec\u501f\u7528\u7684\u7b26\u53f7 \\(\\times\\) \u548c \\(+\\) \u90a3\u6837\u5b58\u5728\u975e\u5bf9\u79f0\u5173\u7cfb\u3002

\u4f46\u662f\u8ba9\u8fd9\u4ef6\u4e8b\u53d8\u5f97\u53c8\u6ca1\u90a3\u4e48\u7b80\u5355\u7684\u4e8b\u60c5\u662f\uff0c\u867d\u7136 \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u501f\u7528\u666e\u901a\u4ee3\u6570\u7b26\u53f7\u4f53\u7cfb\u7684\u540c\u65f6\uff0c\u53c8\u4eba\u4e3a\u5730\u7ed9\u4ed6\u4eec\u6dfb\u52a0\u4e86\u4f18\u5148\u7ea7\uff08\u4f46\u662f\u8fd9\u4e5f\u662f\u5fc5\u8981\u7684\uff0c\u5426\u5219\u8868\u8fbe\u5f0f\u5c31\u4f1a\u5145\u6ee1\u62ec\u53f7\uff09\u3002

\u4f18\u5148\u7ea7\u4ece\u9ad8\u5230\u4f4e\u4f9d\u6b21\u4e3a\uff1a

  1. \u62ec\u53f7 / ()\uff1b
  2. \u975e / NOT / \\(\\overline A\\)\uff1b
  3. \u4e0e / AND / \\(\\cdot\\)\uff1b
  4. \u6216 / OR / \\(+\\)\uff1b

\u4e2a\u4eba\u611f\u89c9\uff0c\u8fd9\u4e00\u79cd\u601d\u8def\u5e76\u4e0d\u76f4\u89c9\uff0c\u5c24\u5176\u662f\u501f\u7528\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\u4f53\u7cfb\u4ee5\u540e\u66f4\u52a0\u6df7\u6dc6\uff0c\u6240\u4ee5\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u7ec3\u4e60\u6765\u6446\u8131\u8fd9\u4e9b\u201c\u523b\u677f\u5370\u8c61\u201d\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b\u63a8\u5e7f","title":"\u8fd0\u7b97\u5f8b\u63a8\u5e7f","text":"

\u9664\u6b64\u4e4b\u5916\uff0c\u4ece\u4e0a\u9762\u63d0\u5230\u7684\u8fd0\u7b97\u5f8b\u4e2d\u8fd8\u80fd\u63a8\u5e7f\u51fa\u5982\u4e0b\u51e0\u4e2a\u6a21\u578b\uff1a

\u5bf9\u6bd4\u524d\u4e09\u4e2a\u548c\u540e\u4e09\u4e2a\uff0c\u6211\u4eec\u518d\u6b21\u53d1\u73b0\uff0c\u4e0e \u548c \u6216 \u5728\u903b\u8f91\u4e0a\u662f\u5bf9\u79f0\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5bf9\u5076\u6cd5\u5219","title":"\u5bf9\u5076\u6cd5\u5219","text":"

\u5bf9\u5076\u6cd5\u5219(Duality Rule)\uff1a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u7684 \u5bf9\u5076(dual) \u4e3a\uff0c\u5c06\u6240\u6709\u7684 \u4e0e \u548c \u6216 \u5bf9\u8c03\u5f97\u5230\u7684\u5f0f\u5b50\uff08\u6ce8\u610f\uff01\u9700\u8981\u4fdd\u8bc1\u53c2\u4e0e\u8fd0\u7b97\u7684\u7ed3\u6784\u4e0d\u80fd\u53d8\uff08\u662f\u201c\u5e26\u62ec\u53f7\u201d\u7684\u5b8f\u5c55\u5f00\uff09\uff0c\u6bd4\u5982 \u4e00\u822c\u60c5\u51b5\u4e0b \\(A\\cdot B\\) \u4f1a\u88ab\u5bf9\u5076\u4e3a \\((A+B)\\) \u4ee5\u4fdd\u8bc1\u8fd0\u7b97\u987a\u5e8f\uff09\u3002

eg

\u800c\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u9664\u975e\u67d0\u4e2a\u8868\u8fbe\u5f0f\u662f \u81ea\u5bf9\u5076(self-dual) \u7684\uff0c\u90a3\u4e48\u5b83\u7684\u8868\u73b0\u90fd\u4e0e\u539f\u8868\u8fbe\u5f0f\u4e0d\u540c\u3002

\u5bf9\u5076\u8868\u8fbe\u5f0f\u5177\u6709\u5982\u4e0b\u6027\u8d28\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e92\u8865\u51fd\u6570","title":"\u4e92\u8865\u51fd\u6570","text":"

\u4e00\u4e2a \u51fd\u6570\u7684\u4e92\u8865(Complement of a Function) \u6307\u7684\u662f\uff0c\u5c06\u5b83\u7684 \u5bf9\u5076\u51fd\u6570 \u4e2d\u6bcf\u4e00\u4e2a \u53d8\u91cf \u90fd\u53d6\u53cd\u5f97\u5230\u7684\u51fd\u6570\uff0c\u800c\u8be5\u51fd\u6570\u6b63\u597d\u7b49\u4e8e\u539f\u51fd\u6570\u7684 \u975e\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u66ff\u4ee3\u6cd5\u5219","title":"\u66ff\u4ee3\u6cd5\u5219","text":"

\u66ff\u4ee3\u6cd5\u5219(Substitution Rules): \u5982\u679c\u5c06\u4e00\u4e2a\u7b49\u5f0f\u4e2d \u6240\u6709\u7684 \u67d0\u4e2a\u53d8\u91cf \u90fd\u66ff\u6362\u4e3a\u540c\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u5219\u7b49\u5f0f\u4f9d\u7136\u6210\u7acb\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e00\u81f4\u6027\u5b9a\u7406","title":"\u4e00\u81f4\u6027\u5b9a\u7406","text":"

\u5728\u7b80\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u7684\u65f6\u5019\uff0c\u4e00\u81f4\u6027\u5b9a\u7406(Consensus Theorem) \u4e5f\u5f88\u6709\u7528\uff1a

\\[ XY+\\overline{X}Z+YZ=XY+\\overline{X}Z \\]

\u5176\u8bc1\u660e\u7684\u7b2c\u4e00\u6b65\u662f\u8fd9\u6837\u7684\uff1a \\(XY+\\overline{X}Z+YZ=XY+\\overline{X}Z+(X+\\overline{X})YZ\\)\uff0c\u90a3\u540e\u9762\u5c31\u5f88\u7b80\u5355\u4e86\u3002\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7b49\u5f0f\u662f\u5229\u7528\u4e86\u88c2\u9879\uff0c\u9700\u8981\u5c06\u5176\u4e2d\u6700\u672c\u8d28\u7684\u90e8\u5206\uff0c\u6700\u5c0f\u7684\u7c92\u5ea6\u7ed9\u88c2\u5f00\u6765\uff0c\u7136\u540e\u518d\u6162\u6162\u6d88\u6389\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","title":"\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","text":"

\u7531\u4e8e\u672c\u8d28\u4e0a\u76f8\u7b49\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u5b9e\u9645\u4e0a\u6709\u5f88\u591a\u79cd\u5199\u6cd5\uff0c\u800c\u4e14\u968f\u7740\u53d8\u91cf\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u4ed6\u4eec\u4e4b\u95f4\u7684\u6bd4\u8f83\u4f1a\u5f88\u56f0\u96be\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u5f62\u5f0f\uff0c\u4f7f\u5f97\u6240\u6709\u76f8\u540c\u7684\u8868\u8fbe\u5f0f\u90fd\u80fd\u6bd4\u8f83\u65b9\u4fbf\u7684\u201c\u5316\u7b80\u201d\u4e3a\u540c\u4e00\u4e2a\u5f62\u5f0f\uff0c\u540c\u65f6\u4e5f\u80fd\u8fa8\u522b\u51fa\u4e24\u4e2a\u8868\u8fbe\u5f0f\u662f\u4e0d\u540c\u7684\u3002\u8fd9\u5c31\u5f15\u5165\u4e86 \u6807\u51c6\u5f62\u5f0f(Standard Forms)\uff0c\u5305\u62ec SOP \u548c POS\uff1b\u4ee5\u53ca \u89c4\u8303\u5f62\u5f0f(Canonical Forms)\uff0c\u5206\u522b\u4e3a \u6700\u5c0f\u9879\u4e4b\u548c(Sum of Minterms, SOM) \u548c \u6700\u5927\u9879\u4e4b\u79ef(Product of Maxterms, POM)\u3002

\u4e3a\u4e86\u65b9\u4fbf\u63cf\u8ff0\uff0c\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u5148\u7ed9\u51fa\u8fd9\u6837\u4e00\u5f20 \ud83c\udf30 \u771f\u503c\u8868\u3002

\ud83c\udf30 Index X Y Z Output 0 / 000 0 0 0 0 1 / 001 0 0 1 0 2 / 010 0 1 0 1 3 / 011 0 1 1 0 4 / 100 1 0 0 1 5 / 101 1 0 1 1 6 / 110 1 1 0 0 7 / 111 1 1 1 1

\u6570\u503c\u662f\u968f\u4fbf\u6413\u7684\uff0c\u8bf7\u7559\u610f\u4e3a\u4ec0\u4e48\u4e3a\u8981\u5728 Index \u7279\u5730\u5199\u51fa\u4e8c\u8fdb\u5236\u7684\u8868\u8ff0\u3002

\u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u9700\u8981\u5f3a\u8c03\uff0c\u6211\u4eec\u5f15\u5165 SOM \u548c POM \u7684\u76ee\u7684\u662f\u5bfb\u627e\u4e00\u79cd\u6bd4\u8f83\u5178\u578b\u7684 \u8868\u8fbe\uff0c\u4f7f\u5f97\u4ed6\u4eec\u80fd\u591f \u786e\u5b9a \u4e00\u5f20\u771f\u503c\u8868\u3002\u5373\uff0c\u77e5\u9053\u8fd9\u79cd \u8868\u8fbe \u6211\u4eec\u5c31\u8db3\u591f\u5199\u51fa\u8fd9\u5f20\u771f\u503c\u8868\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5c0f\u9879\u4e4b\u548c-som","title":"\u6700\u5c0f\u9879\u4e4b\u548c SOM","text":"

\u8bfe\u672c\u4e2d\u5bf9\u6700\u5c0f\u9879\u7684\u63cf\u8ff0\u662f\uff1a

A product term in which all the variables appear exactly once, either complemented or uncomplemented, is called minterm.

Its characteristic property is that it represents exactly one combination of binary variable values in the truth table.

\u7528\u6211\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u5c31\u662f\u6311\u51fa\u771f\u503c\u8868\u4e2d\u6240\u6709\u7ed3\u679c\u662f 1 \u7684\u6700\u5c0f\u9879\uff08\u6bd4\u8f83\u6a21\u7cca\u4f46\u76f4\u89c2\uff0c\u6240\u4ee5\u8bf7\u5148\u56eb\u56f5\u541e\u67a3\uff0c\u6211\u5728\u201c\u8ffd\u52a0\u8bf4\u660e\u201d\u4f1a\u8fdb\u4e00\u6b65\u8bf4\u660e\uff09\u7136\u540e OR \u8d77\u6765\u3002\u663e\u7136\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u542b\u4e49\u5c31\u662f\uff0c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u4e86\u8fd9\u51e0\u4e2a\u201c\u6700\u5c0f\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f 1\uff0c\u7b26\u5408\u4e86 OR \u7684\u201c\u67091\u5f971\u201d\u7684\u89c4\u5219\u3002

\u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(m_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5c0f\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

\u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 1 \u7684\u9879\u6709\uff1a010 100 101 111 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(m_{2}=\\overline{X}Y\\overline{Z}, \\; m_{4}=X\\overline{Y}\\overline{Z}, \\; m_{5}=X\\overline{Y}Z, \\; m_{7}=XYZ\\)\uff0c\u8fd9\u4e9b\u53d8\u91cf\u8868\u8fbe\u5f0f\u90fd\u662f\u5f53\u4e14\u4ec5\u5f53\u53d8\u91cf\u7ec4\u5408\u4e3a\u5bf9\u5e94\u9879\u65f6\u624d\u4f1a\u53d6 1 \u7684\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u8fd9\u5199\u8868\u8fbe\u5f0f\u552f\u4e00\u8868\u8fbe\u4e86\u8fd9\u4e9b\u771f\u503c\u8868\u4e2d\u7684 1\u3002

\u8ffd\u52a0\u8bf4\u660e\uff08\u7b80\u5355\uff0c\u4f46\u662f\u5efa\u8bae\u770b\u4e00\u770b\uff09

\u6216\u8bb8\u60a8\u89c9\u5f97\u6700\u5c0f\u9879\u7684\u5f97\u5230\u975e\u5e38\u7684\u81ea\u7136\u4e14\u7b80\u5355\uff0c\u6211\u5efa\u8bae\u60a8\u4e5f\u5c1d\u8bd5\u7740\u770b\u4e00\u770b\u8ffd\u52a0\u8bf4\u660e\uff0c\u56e0\u4e3a\u8fd9\u5bf9\u7406\u89e3\u6700\u5927\u9879\u633a\u6709\u5e2e\u52a9\u7684\u3002

\u90a3\u4e48\u4ec0\u4e48\u662f\u201c\u5217\u4e3e\u201d\u5462\uff1f\u8ba9\u6211\u4eec\u518d\u770b\u4e00\u773c\u4e0a\u9762\u5bf9\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u63cf\u8ff0\uff1a\u201c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5c0f\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f\u771f\u201d\uff0c\u8ffd\u672c\u6eaf\u6e90\uff0c\u5728\u6700\u5c0f\u9879\u4e2d\uff0c\u6211\u4eec\u5c31\u9700\u8981\u505a\u5230\u53ea\u6709\u5f53\u4e00\u4e2a\u7535\u8def\u7684\u72b6\u6001\u662f\u7279\u5b9a\u7ec4\u5408\u65f6\uff0c\u5176\u8fd4\u56de\u503c\u4e3a 1\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(m_{5}=X\\overline{Y}Z\\)\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u4e00\u79cd\u66f4\u5570\u55e6\u7684\u65b9\u5f0f\u8868\u8fbe\u51fa\u6765\u662f\u8fd9\u6837\u7684\uff1a

if(X == 1 && Y == 0 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

\uff08\u5faa\u5e8f\u6e10\u8fdb\uff09\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u53d8\u5316\u4e3a\u8fd9\u6837\uff1a

if(X == 1 && (!Y) == 1 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

\u5982\u679c\u4f60\u719f\u6089\u201c\u538b\u884c\u201d\u6280\u5de7\uff0c\u90a3\u4e48\u8fd9\u4e00\u6bb5\u90fd\u53ef\u4ee5\u5199\u6210\uff1a

Output = (X == 1 && (!Y) == 1 && Z == 1);\n

\u800c\u8fd9\u4e2a\u903b\u8f91\u8868\u8fbe\u5f0f\uff0c\u5b9e\u9645\u4e0a\u5df2\u7ecf\u548c \\(m_5=X\\overline{Y}Z\\) \u4e00\u6a21\u4e00\u6837\u4e86\u3002

\u5728\u8fd9\u91cc\u7ed9\u51fa\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002\uff08\u8fd9\u91cc\u4e4b\u6240\u4ee5\u5199\u7684\u662f \\(f\\) \u800c\u4e0d\u662f 1\uff0c\u662f\u4e3a\u4e86\u7ed9\u4e4b\u540e\u5206\u6790 POM \u505a\u94fa\u57ab\uff0c\u5bf9\u4e8e POM\uff0c0 \u624d\u662f\u552f\u4e00\u8868\u8fbe\u7684\u7279\u5f81\u7ed3\u679c\u3002\uff09

\u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 SOM\uff1a

\\[ \\begin{array}{l} F(X,Y,Z) & = \\sum m(2,4,5,7) \\\\ & = m_2+m_4+m_5+m_7 \\\\ & = \\overline{X}Y\\overline{Z}+X\\overline{Y}\\,\\overline{Z}+X\\overline{Y}Z+XYZ \\end{array} \\]

\u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 1 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u548c\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff08\u4e8b\u5b9e\u4e0a\u4e0d\u505a\u5316\u7b80\u7684\u8bdd\u4f60\u4e5f\u53ea\u80fd\u6ee1\u8db3\u4e00\u9879\u7684\u503c\u53d6\u5230 1\uff09\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 1\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 0\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5927\u9879\u4e4b\u79ef-pom","title":"\u6700\u5927\u9879\u4e4b\u79ef POM","text":"

\u5c31\u50cf\u6211\u4e4b\u524d\u4e0d\u65ad\u4e0d\u65ad\u4e0d\u65ad\u5f3a\u8c03\u7684\uff0c\u6240\u8c13\u7684 1 \u548c 0 \u90fd\u53ea\u662f\u4eba\u4e3a\u5b9a\u4e49\u7684\uff0c\u6446\u8131\u6f5c\u610f\u8bc6\u91cc\u5bf9\u8fd9\u4e24\u8005\u4e4b\u4e00\u7684\u503e\u5411\uff08\u4f8b\u5982\u6211\u672c\u4eba\u5c31\u4e00\u76f4\u5f88\u503e\u5411\u4e8e\u4ee5 1 \u4e3a\u4e3b\u4f53\u7814\u7a76\u95ee\u9898\uff09\u4f1a\u5bf9\u7406\u89e3\u6700\u5927\u9879\u4e4b\u79ef\u548c\u903b\u8f91\u8868\u8fbe\u5f0f\u5316\u7b80\u5f88\u6709\u5e2e\u52a9\u3002

\u800c\u6700\u5927\u9879\u4e4b\u79ef\u2014\u2014\u4ee5\u6211\u4e2a\u4eba\u7684\u611a\u89c1\u2014\u2014\u5c31\u662f\u4ee5 0 \u4e3a\u4e3b\u4f53\u6765\u7814\u7a76\u771f\u503c\u8868\u7684\u7279\u5f81\u7684\u3002

\u8bfe\u672c\u4e2d\u5bf9\u6700\u5927\u9879\u7684\u63cf\u8ff0\u662f\uff1a

A sum term that contains all the variables in complemented or uncomplemented form is called a maxterm.

\u4e0e\u6700\u5c0f\u9879\u5bf9\u6bd4\uff0c\u65e0\u975e\u662f\u628a \"product term\" \u6362\u6210\u4e86 \"sum term\"\uff0c\u4e5f\u5c31\u662f\u628a AND \u6362\u6210\u4e86 OR\u3002

\u800c\u6700\u5927\u9879\u4e4b\u79ef\uff0c\u5c31\u662f\u6311\u51fa\u6240\u6709\u7ed3\u679c\u4e3a 0 \u7684\u6700\u5927\u9879\uff08\u201c\u6311\u51fa\u201d\u7684\u5b9a\u4e49\u6211\u5df2\u7ecf\u5728 SOM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u7ed9\u51fa\uff0c\u5728 POM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u6211\u8fd8\u4f1a\u518d\u4e00\u6b21\u63d0\u53ca\uff09\uff0c\u518d\u505a AND\u3002\u4ee5 1 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u662f\u201c\u90fd1\u51fa1\u201d\uff0c\u800c\u4ee5 0 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u5219\u662f\u201c\u67090\u51fa0\u201d\uff0c\u8fd9\u4e0e OR \u7684\u201c\u67091\u51fa1\u201d\u4e5f\u662f\u9ad8\u5ea6\u5bf9\u79f0\u7684\uff08\u53cd\u4e4b\u4ea6\u7136\uff09\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u7684\u542b\u4e49\u662f\uff0c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u201c\u6700\u5927\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u3002

\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(M_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5927\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

\u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 0 \u7684\u9879\u6709\uff1a000 001 011 110 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(M_{0}=X+Y+Z, \\; M_{1}=X+Y+\\overline{Z}, \\; M_{3}=X+\\overline{Y}+\\overline{Z}, \\; M_{6}=\\overline{X}+\\overline{Y}+Z\\)\u3002\u53ef\u4ee5\u68c0\u9a8c\uff0c\u53ea\u6709\u4ee3\u5165\u4ed6\u4eec\u5bf9\u5e94\u7684\u90a3\u4e00\u884c\u771f\u503c\u8868\u7ec4\u5408\u65f6\uff0c\u4ed6\u4eec\u624d\u4f1a\u5f97\u5230 0\u3002

\u8ffd\u52a0\u8bf4\u660e

\u540c\u6837\u7684\uff0c\u56de\u987e\u6700\u5927\u9879\u4e4b\u79ef\u7684\u63cf\u8ff0\uff1a\u201c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5927\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u201d\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u5982\u4e0b\u63cf\u8ff0\uff1a

if(X == 1 && Y == 1 && Z == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

\u56de\u987e\u6700\u5927\u9879\u7684\u76ee\u7684\u662f\u6ee1\u8db3\u8fd9\u4e2a\u5206\u652f\u6761\u4ef6\u7684\u60c5\u51b5\u4e0b\u8f93\u51fa 0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u9700\u8981\u8868\u8fbe (X == 1 && Y == 1 && Z == 0) \u8fd9\u4e2a\u903b\u8f91\u6761\u4ef6\u3002\u4f46\u7531\u4e8e\u6700\u5927\u9879\u7684\u5b9e\u73b0\u5f62\u5f0f\u662f OR\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 && \u7684\u5f0f\u5b50\u4ee5 || \u7684\u5f62\u5f0f\u8868\u8fbe\u3002

\u5f53\u7136\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u5404\u79cd\u8fd0\u7b97\u5f8b\u6765\u5316\u7b80\uff0c\u4f46\u662f\u4e0d\u59a8\u60f3\u4e00\u60f3 AND \u548c OR \u7684\u8fd0\u7b97\u7279\u5f81\uff0c\u524d\u8005\u662f\u201c\u67090\u51fa0\u201d\uff0c\u540e\u8005\u662f\u201c\u67091\u51fa1\u201d\u3002\u800c\u5bf9\u4e8e AND \u6765\u8bf4\uff0c\u60f3\u8981\u505a\u5230\u6761\u4ef6\u7b5b\u9009\uff0c\u5c31\u9700\u8981\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 1\uff0c\u6700\u540e\u5982\u679c\u7b5b\u9009\u6210\u529f\u7ed3\u679c\u5c31\u662f 1\uff1b\u5bf9\u4e8e OR \u6765\u8bf4\uff0c\u5c31\u662f\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 0\uff0c\u5982\u679c \u7b5b\u9009\u6210\u529f \u7684\u7ed3\u679c\u5c31\u662f 0\u3002\u4e5f\u5c31\u662f\u8bf4\u5bf9\u4e8e\u6216\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8868\u793a\uff1a

if((X == 0 || Y == 0 || (!Z) == 0) == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

\u540c\u6837\u8fdb\u884c\u4e00\u4e0b\u538b\u884c\uff1a

// It might be too complex.\nOutput = !((X == 0 || Y == 0 || (!Z) == 0) == 0);\n// So we can simplify it.\nOutput = (X == 0 || Y == 0 || (!Z) == 0);\n

\u8fd9\u4e5f\u6b63\u5bf9\u5e94\u4e86 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\u3002

\u518d\u6b21\u7ed9\u51fa\u8fd9\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002

\u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 POM\uff1a

\\[ \\begin{aligned} F(X,Y,Z) & = \\prod M(0,1,3,6) \\\\ & = M_0M_1M_3M_6 \\\\ & = (X+Y+Z)(X+Y+\\overline{Z})(X+\\overline{Y}+\\overline{Z})(\\overline{X}+\\overline{Y}+Z) \\end{aligned} \\]

\u540c\u6837\u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 0 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u79ef\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 0\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 1\u3002

\u4e0e\u6700\u5c0f\u9879\u76f8\u6bd4\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u7684 1 \u7684\u53ef\u80fd\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u662f 0 \u7684\u53ef\u80fd\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u503c\u8868\u8fbe\u5f0f\u6765\u8bf4\uff0c\u4e24\u79cd \u8868\u8fbe \u90fd\u662f\u5145\u8981\u7684\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u8fd8\u80fd\u53d1\u73b0\uff1a

\u4f8b\u5982\uff1a\\(M_5 = \\overline{X} + Y + \\overline{Z} = \\overline{ X\\overline{Y}Z } = \\overline{m}_5\\)

\u5173\u4e8e\u8fd9\u4e2a\u53d1\u73b0\u7684\u66f4\u591a\u7684\u4f8b\u5b50\u548c\u8bf4\u660e\uff0c\u53ef\u4ee5\u770b\u4e0b\u9762\u7684\u7b2c\u4e00\u4e2a\u7ec3\u4e60\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ec3\u4e60","title":"\u7ec3\u4e60","text":"

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u4e00\u4e9b\u4f8b\u5b50\u6765\u8fdb\u4e00\u6b65\u5f3a\u5316\u8fd9\u4e9b\u7406\u89e3\uff0c\u5e76\u4e14\u6316\u6398\u4e00\u4e9b\u795e\u5947\u7684\u7279\u6027\u3002

\u9898\u9762\u7b54\u6848

\u8bf7\u5206\u522b\u5199\u51fa\u5982\u4e0b\u771f\u503c\u8868\u4e2d \\(F\\) \u548c \\(\\overline{F}\\) \u7684 SOM \u548c POM\u3002

\u7b54\u6848\uff1a \\begin{array}{l} \\overline{F}(X,Y,Z) & = \\sum m(1,3,4,6) \\\\ & = \\overline{X}\\,\\overline{Y}Z + \\overline{X}YZ + X\\overline{Y}\\,\\overline{Z} + XY\\overline{Z} \\\\ & = \\prod M(0,2,5,7) \\\\ & = (X+Y+Z)(X+\\overline{Y}+Z)(\\overline{X}+Y+\\overline{Z})(\\overline{X}+\\overline{Y}+\\overline{Z}) \\end{array} \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u4e00\u4ef6\u5f88\u6709\u610f\u601d\u7684\u4e8b\u60c5\uff0c\\(F\\) \u7684 SOM \u7684\u4e0b\u6807\u4e0e \\(\\overline{F}\\) \u7684 POM \u7684\u4e0b\u6807\u662f\u4e00\u6837\u7684\uff1b\u5f53\u7136\u5bf9\u4e8e \\(F\\) \u7684 POM \u548c \\(\\overline{F}\\) \u7684 SOM \u4e5f\u662f\u4e00\u6837\u7684\u3002\u8fd9\u53c8\u5370\u8bc1\u4e86\u5bf9\u79f0\u6027\u3002

\u4e4b\u540e\u7684\u7ec3\u4e60\u7b49\u6211\u505a\u4e86\u518d\u6dfb\u52a0x \u5982\u679c\u505a\u4e86\u7684\u8bddx \ud83d\ude0b

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","title":"\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","text":"

\u5f15\u5165

\u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u6807\u51c6\u5f62\u5f0f\u6765\u5f97\u5230\u5bf9\u5e94\u7684\u7535\u8def\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u60c5\u51b5\u4e2d\uff0c\u8fd9\u6837\u505a\u4f1a\u5bfc\u81f4\u6210\u672c\u8fc7\u9ad8\u4ee5\u53ca\u7535\u8def\u590d\u6742\uff08\u56e0\u4e3a\u95e8\u592a\u591a\u4e86\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5bf9\u7535\u8def\u8fdb\u884c\u4f18\u5316\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u4ecb\u7ecd\u901a\u8fc7 \u5361\u8bfa\u56fe(Karnaugh map) \u6765\u4f18\u5316\u903b\u8f91\u7535\u8def\u7684\u65b9\u6cd5\u3002

\u4e0d\u8fc7\u518d\u5f00\u59cb\u201c\u4f18\u5316\u201d\u7684\u8bdd\u9898\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4ec0\u4e48\u662f\u201c\u4f18\u201d\uff0c\u4e5f\u5c31\u662f\u7ed9\u51fa\u4e00\u4e2a\u7535\u8def\u6210\u672c\u7684\u8861\u91cf\u4f9d\u636e\uff0c\u5373 \u6210\u672c\u6807\u51c6(cost criteria)\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6210\u672c\u6807\u51c6","title":"\u6210\u672c\u6807\u51c6","text":"

\u5728\u6210\u672c\u6807\u51c6\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u7684\u4e3b\u8981\u6709\u4e09\u79cd\u6807\u51c6\uff0c\u5206\u522b\u662f\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","title":"\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","text":"

\u5f88\u76f4\u767d\uff0c\u5c31\u662f\u6309\u7167\u8868\u8fbe\u5f0f\u4e2d\u6709\u591a\u5c11\u5b57\u9762\u91cf\u6765\u8ba1\u7b97\uff0c\u4f8b\u5982\uff1a

\u53ef\u4ee5\u60f3\u8c61\uff0c\u867d\u7136\u8fd9\u79cd\u8ba1\u7b97\u65b9\u6cd5\u975e\u5e38\u7684\u7b80\u5355\uff0c\u4f46\u662f\u611f\u89c9\u4e0d\u592a\u9760\u8c31\u3002\u6bd4\u5982\uff0c\u540e\u9762\u4e24\u4e2a\u4f8b\u5b50\uff0c\u867d\u7136\u4ed6\u4eec\u7684 literal cost \u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\u663e\u7136\u5f00\u9500\u4e0d\u592a\u4e00\u6837\uff08\u56e0\u4e3a\u4e00\u4e2a\u662f 3+3 \u4e00\u4e2a\u662f 2+2+2\uff09\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u5408\u9002\u7684\u8ba1\u7b97\u65b9\u6cd5\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u95e8\u8f93\u5165\u8ba1","title":"\u6309\u95e8\u8f93\u5165\u8ba1","text":"

\u6309\u7167\u95e8\u8f93\u5165\u8ba1\u5c31\u662f\u6309\u7167\u903b\u8f91\u95e8\u8f93\u5165\u5f15\u811a\u7684\u603b\u4e2a\u6570\u6765\u8ba1\u7b97\uff0c\u8fd9\u91cc\u7684\u8f93\u5165\u5e76\u4e0d\u4ec5\u4ec5\u662f\u76f4\u63a5\u6765\u81ea\u4e8e\u5b57\u9762\u91cf\u8f93\u5165\u7684\u90a3\u4e9b\u5f15\u811a\uff0c\u4e5f\u5305\u62ec\u5b57\u9762\u91cf\u505a\u8fd0\u7b97\u540e\u5f97\u5230\u7684\u7ed3\u679c\u4f5c\u4e3a\u8f93\u5165\u4f20\u5165\u4e0b\u4e00\u7ea7\u903b\u8f91\u95e8\u7684\u5f15\u811a\u3002

\u6ce8\u610f

\u867d\u7136\u975e\u95e8\u4e5f\u662f\u95e8\uff0c\u4f46\u662f\u6211\u4eec\u901a\u5e38\u4e0d\u628a\u975e\u95e8\u76f4\u63a5\u8ba1\u5165 gate-input cost\uff0c\u6240\u4ee5\u63a5\u4e0b\u6765\u63d0\u5230\u7684\u201c\u8f93\u5165\u5f15\u811a\u201d\u9ed8\u8ba4\u662f\u4e0d\u5305\u542b\u975e\u95e8\u7684\u8f93\u5165\u5f15\u811a\u7684\u3002

\u4f8b\u5982\u8fd9\u5f20\u5bf9\u5e94\u8868\u8fbe\u5f0f \\(F = A+BC+\\overline{B}\\,\\overline{C}\\) \u7684\u56fe\u4e2d\uff1a

\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u4e00\u5171\u6709 5 + 2 = 7 \u4e2a\u8f93\u5165\u5f15\u811a\uff0c\u4ee5\u53ca 2 \u4e2a\u975e\u95e8\u8f93\u5165\u5f15\u811a\u3002

\u4ece\u8868\u8fbe\u5f0f\u6765\u770b\uff0c\u5b83\u53ef\u4ee5\u770b\u4f5c\u662f\u6bcf\u4e00\u5c42\u8fd0\u7b97\u7684\u53c2\u6570\u6570\u91cf\u6c42\u548c\uff0c\u4e0d\u8fc7\u6211\u4eec\u5ffd\u7565\u975e\u95e8\u3002

\u4f8b\u5982\uff0c\u5f0f\u5b50 \\(F=AB+\\overline{B}C+C\\overline{D}\\) \u4e2d\uff0c\u6700\u9876\u5c42\u7684\u8fd0\u7b97\u662f\u4e00\u4e2a\u4e09\u8f93\u5165\u6216\u8fd0\u7b97\uff0c\u6240\u4ee5\u6709 3 \u4e2a\u8f93\u5165\uff1b\u63a5\u4e0b\u6765\u6709\u4e09\u4e2a\u4e8c\u8f93\u5165\u4e0e\u8fd0\u7b97\uff0c\u6240\u4ee5\u5404\u8ba1 2 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171 2 * 3 = 6 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171\u662f 9 \u4e2a\u8f93\u5165\u3002

\u5f53\u7136\uff0c\u5b9e\u9645\u4e0a\u4ece\u5e95\u5c42\u5f80\u4e0a\u6570\u66f4\u65b9\u4fbf\uff1a

\u603b\u4e4b\uff0c\u5c31\u662f\u7c7b\u4f3c\u4e8e\u5728\u505a\u7b97\u5f0f\u5316\u7b80\uff0c\u6bcf\u505a\u4e00\u6b21\u5316\u7b80\u90fd\u9700\u8981\u8ba1\u5165\u4e00\u6b21\u64cd\u4f5c\u6570\u7684\u6570\u91cf\u3002

\u800c\u5bf9\u4e8e gate-input cost with NOTs\uff0c\u53ea\u8981\u518d\u989d\u5916\u8ba1\u5165\u975e\u95e8\u7684\u8f93\u5165\u5373\u53ef\u3002\u4f8b\u5982\u4e0a\u9762\u90a3\u4e2a\u5f0f\u5b50\uff1a

\u6ce8\u610f

\u5982\u679c\u51fa\u73b0\u4e86\u6bd4\u5982 \\(F=\\overline{A}B+\\overline{A}C\\) \u7684\u60c5\u51b5\uff0c\u975e\u95e8\u53ea\u9700\u8981\u8ba1 1 \u4e2a\uff0c\u56e0\u4e3a\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u628a\u975e\u4e86\u4ee5\u540e\u7684\u4e1c\u897f\u5f53\u4f5c\u4e86\u4e00\u4e2a\u5b57\u9762\u91cf\u518d\u7528\u7684\uff0c\u5728\u5b9e\u9645\u7535\u8def\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u975e\u4e00\u6b21\uff0c\u4e4b\u540e\u53ea\u9700\u8981\u628a\u8fd9\u4e2a\u8f93\u51fa\u503c\u62ff\u8d70\u53bb\u7528\u5c31\u884c\u3002

\u63a5\u4e0b\u6765\u653e\u51e0\u9053\u4f8b\u9898\u3002

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=ABC+\\overline{A}\\,\\overline{B}\\,\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=(A+\\overline{C})(\\overline{B}+C)(\\overline{A}+B)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=(A+\\overline{B})(A+D)(B+C+\\overline{D})(\\overline{B}+\\overline{C}+D)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=BD+A\\overline{B}C+A\\overline{B}\\,\\overline{D}+AB\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=\\overline{A}\\,\\overline{C}(B+\\overline{D})+AC(B+\\overline{D})\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u8fd0\u7b97\uff0c\u4ee5 \\(\\overline{A}\\,\\overline{C}(B+\\overline{D})\\) \u4e3a\u4f8b\uff0c\u81ea\u9876\u5411\u4e0b\u662f\uff1a\u24f5\u4e09\u8f93\u5165\u4e0e\u95e8\uff0c\u24f6\u4e8c\u8f93\u5165\u6216\u95e8\uff1b\u6240\u4ee5\u5e94\u8be5\u662f \\(1^{\\overline{A}} + 1^{\\overline{C}} + 1^{B} + 1^{\\overline{D}} + 1^{B+\\overline{D}} + 1^{\\overline{A}\\,\\overline{C}(B+\\overline{D})}\\)\uff0c\u5373 6\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe","title":"\u5361\u8bfa\u56fe","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u601d\u60f3","title":"\u5361\u8bfa\u56fe\u7684\u601d\u60f3","text":"

\u4f18\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u6700\u76f4\u767d\u7684\u601d\u60f3\u5c31\u662f\u51cf\u5c11\u95e8\u7535\u8def\uff0c\u4e5f\u5c31\u662f\u53bb\u51cf\u5c11 gate-input cost\u3002\u90a3\u4e48\u8981\u5982\u4f55\u505a\u5462\uff1f

\u6211\u4eec\u8003\u8651\u5230\u903b\u8f91\u8fd0\u7b97\u5f8b\u4e2d\u7684\u8fd9\u4e2a\u63a8\u5e7f\uff1a\\(XY+X\\overline{Y}=X(Y+\\overline{Y})=X\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u4e24\u4e2a\u6700\u5c0f\u9879\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u90a3\u4e48\u4ed6\u4eec\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u5f53\u7136\uff0c\u5bf9\u79f0\u7684\uff0c\u6839\u636e\\((X+\\overline{Y})(X+Y)=X+Y\\overline{Y}=X\\)\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u7ed3\u8bba\u5bf9\u6700\u5927\u9879\u4e5f\u6210\u7acb\u3002

\u662f\u4e0d\u662f\u89c9\u5f97\u201c\u53ea\u5dee\u4e00\u4e2a\u201d\u5f88\u8033\u719f\uff1f\u662f\u7684\uff01\u6211\u4eec\u60f3\u5230\u4e86\u683c\u96f7\u7801\uff01\u5047\u8bbe\u6211\u4eec\u5c06 n \u4e2a\u5b57\u9762\u91cf\u6392\u5217\u6210\u4e00\u4e2a n bits \u7684\u5411\u91cf\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u6309\u7167\u683c\u96f7\u7801\u6392\u5e8f\uff0c\u4e00\u65e6\u53d1\u73b0\u6709\u76f8\u90bb\u7684\u6700\u5c0f\u9879\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5408\u5e76\u4ed6\u4eec\u3002

\u4f46\u8fd9\u8fd8\u4e0d\u591f\u5145\u5206\uff0c\u4f8b\u5982\u5728\u4e00\u4e2a\u6709\u4e09\u4e2a\u5b57\u9762\u91cf\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e2d\uff0c\u201c\u4e0e\u4e00\u4e2a\u8868\u8fbe\u5f0f\u76f8\u90bb\u201d\u7684\u8868\u8fbe\u5f0f\u5176\u5b9e\u6709\u4e09\u4e2a\uff0c\u4f46\u662f\u7528\u7ebf\u6027\u7684\u8868\u793a\u65b9\u6cd5\u53c8\u6ca1\u6cd5\u5f88\u597d\u7684\u8868\u793a\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u60f3\u5230\u5c06\u5b83\u5199\u6210\u4e00\u5f20\u4e8c\u7ef4\u7684\u8868\uff0c\u5373\u5c06\u5b57\u9762\u91cf\u62c6\u6210\u4e24\u7ec4 bit \u5411\u91cf\uff0c\u5404\u81ea\u6309\u7167\u683c\u96f7\u7801\u6392\u5217\uff0c\u5f62\u6210\u4e00\u5f20\u4e8c\u7ef4\u8868\uff0c\u8fd9\u5c31\u662f \u5361\u8bfa\u56fe(Karnaugh Map)\uff0c\u4e5f\u53eb K-map\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4efb\u610f\u4e24\u4e2a\u76f8\u90bb\u7684\u683c\u5b50\u90fd\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u800c\u4e14\u662f\u5145\u8981\u7684\uff0c\u5373\u6240\u6709\u201c\u76f8\u90bb\u201d\u90fd\u53ef\u4ee5\u5728\u8fd9\u5f20\u56fe\u8868\u73b0\u51fa\u6765\u3002

\u8bf4\u660e

\u7531\u4e8e\u683c\u96f7\u7801\u7684\u6027\u8d28\u662f\u4e00\u4e2a\u5728\u201c\u6ee1\u201d\u72b6\u6001\u4e0b \u73af\u72b6\u6210\u7acb \u7684\u6027\u8d28\uff0c\u6240\u4ee5\u5361\u8bfa\u56fe\u4e5f\u9700\u8981\u7528\u201c\u73af\u72b6\u201d\u7684\u601d\u8def\u53bb\u770b\uff0c\u8fd9\u91cc\u53ef\u4ee5\u8054\u60f3\u4e00\u4e0b\u884c\u5217\u5f0f\u7684\u5f62\u8c61\u5316\u8ba1\u7b97\u65b9\u6cd5\uff0c\u5c06\u8fd9\u5f20\u8868\u5f53\u4f5c\u4e00\u4e2a\u65e0\u9650\u6269\u5c55\u7684\u8868\u683c\u3002

\u601d\u8003\u9898

\u5728\u8fd9\u91cc\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u7740\u611f\u53d7\u4e00\u4e0b\u4e24\u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\u4e0b\uff0c\u5373\u5b9e\u9645\u4e0a\u201c\u76f8\u90bb\u4e5f\u53ea\u67092\u4e2a\u201d\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u3002\u4e8b\u5b9e\u4e0a\uff0c\u4e09\u4e2a\u5b57\u9762\u91cf\u4e5f\u53ea\u6709\u201c3\u4e2a\u76f8\u90bb\u201d\uff0c\u4f46\u662f\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u7528\u660e\u660e\u6709\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u6765\u5b9e\u73b0\u5462\uff1f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","title":"\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","text":"

\u7136\u800c\uff0c\u4e0a\u9762\u7684\u8bf4\u6cd5\u5176\u5b9e\u5f88\u7275\u5f3a\u3002\u56e0\u4e3a\u4e00\u5f20\u4e8c\u7ef4\u8868\u4e2d\uff0c\u80fd\u4e0e\u4e00\u4e2a\u5143\u7d20\u76f8\u90bb\u7684\u5143\u7d20\u6700\u591a\u53ea\u6709\u56db\u4e2a\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u6491\u6b7b\u4e5f\u53ea\u80fd\u7528\u5361\u8bfa\u56fe\u8868\u793a 4 \u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\uff08\u5f53\u7136\u66f4\u591a\u7684\u53d8\u91cf\u4e5f\u6709\u5904\u7406\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u591a\u5c11\u6709\u70b9\u9ebb\u70e6\u4e86\uff09\u3002\u56e0\u6b64\uff0c\u5b9e\u9645\u4e0a\u5361\u8bfa\u56fe\u53ea\u80fd\u7528\u4e8e\u5316\u7b80\u975e\u5e38\u7b80\u5355\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u3002

cm \u8001\u5e08\u5982\u662f\u8bf4

\u66f4\u591a\u60c5\u51b5\u4e0b\uff0c\u5361\u8bfa\u56fe\u5b9e\u9645\u4e0a\u53ea\u9002\u5408\u6211\u4eec\u505a\u9898\u3002\u4f46\u662f\u5176\u601d\u8def\u662f\u975e\u5e38\u6709\u610f\u601d\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","title":"\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","text":"

\u8fd9\u91cc\u6211\u4eec\u4ee5 3 \u5143\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e3a\u4f8b\uff0c2 \u5143\u548c 4 \u5143\u7684\u601d\u8def\u662f\u4e00\u6837\u7684\u3002

\u540c\u6837\uff0c\u4e3e\u4e00\u4e2a \ud83c\udf30 \uff1a\\(F(X,Y,Z) = \\sum m(2,3,4,5)\\)

\u9996\u5148\u6211\u4eec\u6309\u7167\u6bd4\u7279\u5411\u91cf\u7684\u5f62\u5f0f\u628a\u6700\u5c0f\u9879\u5199\u51fa\u6765\uff1a

\u503c X Y Z 2 0 1 0 3 0 1 1 4 1 0 0 5 1 0 1

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u7ed8\u5236\u5361\u8bfa\u56fe\uff0c\u6211\u4eec\u5c06 bit \u5411\u91cf [x, y, z] \u62c6\u6210 [x] \u548c [y, z] \u505a\u5982\u4e0b\u8868\u683c\uff1a

yz = 00 yz = 01 yz = 11 yz = 10 x = 0 0 0 1 1 x = 1 1 1 0 0

\u53e6\u5916\u4e00\u79cd\u6807\u6ce8\u8868\u683c\u7684\u65b9\u5f0f\u662f\u8fd9\u6837\uff0c\u5b83\u53ef\u80fd\u66f4\u6e05\u6670\uff1a

\u4f46\u662f\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u683c\u96f7\u7801\u3002

4 \u5143\u5b57\u9762\u91cf\u7684\u5361\u8bfa\u56fe\u5219\u957f\u8fd9\u4e2a\u6837\u5b50\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","title":"\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","text":"

\u5df2\u7ecf\u8bb2\u4e86\u601d\u60f3\u548c\u5361\u8bfa\u56fe\u7684\u7ed3\u6784\uff0c\u90a3\u4e48\u5230\u5e95\u8981\u5982\u4f55\u5229\u7528\u5361\u8bfa\u56fe\u8fdb\u884c\u4f18\u5316\u5462\uff1f

\u8ba9\u6211\u4eec\u56de\u987e\u4f18\u5316\u7684\u65b9\u6cd5\uff0c\u5373\u5408\u5e76\u76f8\u90bb\u4e24\u9879\uff0c\u4e5f\u5c31\u662f\u627e\u5230\u5361\u8bfa\u56fe\u4e2d\u76f8\u90bb\u7684\u90e8\u5206\u3002\u4f46\u662f\u8fd9\u4e0d\u591f\uff0c\u6211\u4eec\u8fd8\u8981\u601d\u8003\u662f\u4e0d\u662f\u80fd\u5408\u5e76\u5df2\u7ecf\u76f8\u90bb\u7684\u90e8\u5206\uff0c\u6bd4\u5982\uff1a

\u6211\u4eec\u901a\u8fc7\u5361\u8bfa\u56fe\uff0c\u9996\u5148\u5408\u5e76\u4e86 \\(WXYZ\\) \u548c \\(WXY\\overline{Z}\\)\uff0c\\(WX\\overline{Y}Z\\) \u548c \\(WX\\overline{Y}\\,\\overline{Z}\\)\uff0c\u5206\u522b\u5f97\u5230\u4e86 \\(WXY\\) \u548c \\(WX\\overline{Y}\\)\uff0c\u663e\u7136\u8fd9\u4e24\u4e2a\u4e1c\u897f\u4e5f\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u800c\u5728\u5361\u8bfa\u56fe\u4e0a\uff0c\u8fd9\u8868\u73b0\u4e3a\u4e24\u4e2a\u76f8\u90bb\u7684 1*2 \u7684\u77e9\u5f62\u3002

\u603b\u800c\u8a00\u4e4b\uff0c\u8fd9\u79cd\u8fed\u4ee3\u5408\u5e76\u7684\u884c\u4e3a\u6700\u7ec8\u53ef\u4ee5\u5212\u5f52\u4e3a\u8fd9\u6837\u4e00\u4e2a\u884c\u4e3a\uff1a

\u6211\u4eec\u5728\u5361\u8bfa\u56fe\u4e2d\u5bfb\u627e\u82e5\u5e72 \u6781\u5927 \u7684 2 \u5e42\u77e9\u5f62\uff0c\u5373\u5143\u7d20\u4e2a\u6570\u4e3a 2 \u7684\u5e42\u6b21\uff08\u81ea\u7136\u8fb9\u957f\u4e5f\u90fd\u4e3a 2 \u7684\u5e42\u6b21\uff09\u7684\u77e9\u5f62\uff0c\u800c\u6bcf\u4e00\u4e2a\u77e9\u5f62\u6240\u8986\u76d6\u7684\u5143\u7d20\u90fd\u5e94\u8be5\u662f \u6700\u5c0f\u9879/\u6700\u5927\u9879\uff08\u4e00\u822c\u90fd\u662f\u505a\u6700\u5c0f\u9879\uff09\u3002\u9700\u8981\u6ce8\u610f\uff0c\u201c\u5faa\u73af\u201d\u7684\u6027\u8d28\u4ecd\u7136\u6ee1\u8db3\uff0c\u5373\u7b2c\u4e00\u5217\u548c\u6700\u540e\u4e00\u5217\uff0c\u7b2c\u4e00\u884c\u548c\u6700\u540e\u4e00\u884c\u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u76f8\u90bb\u7684\u3002

\u4f8b\u5982\uff1a

\u4f8b\u5982\uff1a

\u518d\u4f8b\u5982\uff1a

\u90fd\u662f\u5408\u7406\u7684\u5361\u8bfa\u56fe\u5212\u5206\u3002

\u5728\u5f97\u5230\u8fd9\u4e9b\u5212\u5206\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5c06\u8fd9\u4e9b\u9879\u62ce\u51fa\u6765\uff0c\u5199\u51fa\u5b83\u4eec\u7684\u8868\u8fbe\u5f0f\u3002

\u800c\u81f3\u4e8e\u5982\u4f55\u62ce\u51fa\u6765\u2014\u2014\u4e0d\u96be\u53d1\u73b0\uff0c\u5982\u679c\u4e00\u4e2a\u65b9\u6846\u4e2d\uff0c\u67d0\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u503c\u65e2\u53ef\u4ee5\u662f 0\uff0c\u53c8\u53ef\u4ee5\u662f 1 \u65f6\uff08\u8fd9\u91cc\u6307\u7684\u662f\u8f93\u5165\u7684\u503c\uff0c\u5e76\u975e\u8f93\u51fa\u7ed3\u679c\uff09\uff0c\u5728\u8fd9\u4e2a\u4f18\u5316\u9879\u7684\u7ed3\u679c\u4e2d\u5c31\u53ef\u4ee5\u4e0d\u7528\u5199\u51fa\u8fd9\u4e2a\u5b57\u9762\u91cf\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u8fd9\u4e2a\u5b57\u9762\u91cf \\(X\\) \u7684\u503c\u90fd\u662f 0\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(\\overline{X}\\)\uff0c\u5982\u679c\u90fd\u662f 1\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(X\\)\u3002

\u9898\u9762\u7b54\u6848

\u5229\u7528\u5361\u8bfa\u56fe\u4f18\u5316 \\(F(X,Y,Z) = \\sum m(0,1,2,4,6,7)\\) \u7684\u7ed3\u679c\u3002

\u753b\u51fa\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u5bf9\u5e94\u7684\u5361\u8bfa\u56fe\uff1a

\u7136\u540e\u5212\u51fa\u5176\u4e2d\u7684\u6781\u5927\u6700\u5c0f\u9879\u4f18\u5316\u9879\uff1a

\u5199\u51fa\u6765\u662f\uff1a

\u7efc\u4e0a\u6240\u8ff0\uff0c\u4f18\u5316\u7ed3\u679c\u662f \\(F = \\overline{X}\\,\\overline{Y} + \\overline{Z} + XY\\)

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e0d\u5b9a\u9879","title":"\u4e0d\u5b9a\u9879","text":"

\u63a8\u8350\u9605\u8bfb

https://www.geeksforgeeks.org/dont-care-x-conditions-in-k-maps/

\u4e0d\u5b9a\u9879(Don't Cares) \u6307\u7684\u662f\u9700\u8981\u5316\u7b80\u7684\u903b\u8f91\u51fd\u6570\u4e2d\uff0c\u6ca1\u6709\u7ed9\u51fa\u5b9a\u4e49\u7684\u51e0\u9879\uff0c\u5b83\u4eec\u53ef\u80fd\u662f\uff1a

\u5bf9\u4e8e\u8fd9\u79cd\u9879\uff0c\u5728\u5361\u8bfa\u56fe\u4e2d\u7528 X \u6765\u8868\u793a\uff0c\u5728\u6700\u5c0f\u9879\u4e4b\u548c\u4e2d\u7528 \\(\\sum d(...)\\) \u8868\u793a\u3002\u6211\u4eec\u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\u5b83\u4eec\u7684\u8f93\u51fa\uff0c\u6b64\u65f6\u5c31\u53ef\u4ee5\u5229\u7528\u8fd9\u4e9b\u9879\u6765\u65b9\u4fbf\u6211\u4eec\u7684\u4f18\u5316\u2014\u2014\u5f53\u6211\u4eec\u753b\u51fa\u6765\u7684\u6781\u5927\u77e9\u9635\u8d8a\u5927\uff0c\u6210\u672c\u5c31\u8d8a\u4f4e\u3002

\u4f8b\u5982\uff0c\u6211\u4eec\u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\uff0c\u5f53\u8f93\u5165\u7684 BCD \u7801\u8868\u793a\u7684\u6570\u5b57\u5927\u4e8e\u7b49\u4e8e 5 \u65f6\u8fd4\u56de 1\uff0c\u5219\u5b83\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u7684\u5f62\u5f0f\u6765\u4f18\u5316\uff1a

\u6839\u636e\u7ed3\u679c\uff0c\u5199\u51fa\u4f18\u5316\u540e\u7684\u8868\u8fbe\u5f0f\u4e3a\uff1a\\(F(W,X,Y,Z) = W + XY + XZ\\)\u3002

\u7531\u5361\u8bfa\u56fe\u5f97\u5230\u4e58\u79ef\u7ed3\u679c

\u5c3d\u7ba1\u6211\u4eec\u4e0d\u505c\u5f3a\u8c03 \u4e0e \u548c \u6216 \u662f\u5bf9\u79f0\u7684\uff0c\u4f46\u662f\u4ecd\u7136\u6709\u5f88\u591a\u64cd\u4f5c\u662f\u9274\u4e8e\u6211\u4eec\u5bf9 1 \u7684\u504f\u7231\u624d\u4f1a\u987a\u624b\u7684\uff08\u4f60\u4f1a\u53d1\u73b0\uff0c\u628a\u4e58\u9664\u6362\u6210\u6211\u4eec\u5b8c\u5168\u4e0d\u719f\u6089\u7684\u7b26\u53f7\uff0c\u4f60\u751a\u81f3\u53ef\u80fd\u65e0\u4ece\u4e0b\u624b\uff09\u3002

\u6240\u4ee5\uff0c\u5728\u5361\u8bfa\u56fe\u7684\u95ee\u9898\u4e2d\uff0c\u5982\u679c\u8981\u5229\u7528\u5361\u8bfa\u56fe\u5f97\u5230 \\(F\\) \u4f18\u5316\u540e\u7684\u4e58\u79ef\u5f62\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u6c42 \\(\\overline{F}\\) \u4f18\u5316\u540e\u7684\u548c\u5f62\u5f0f\uff0c\u7136\u540e\u518d\u5bf9\u5176\u53d6\u53cd\u8fc7\uff0c\u5229\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u53cd\u8f6c K-map \u4e2d\u6240\u6709\u7684 0 \u548c 1\uff0c\u7136\u540e\u7740\u773c\u4e8e SOM \u8fdb\u884c\u4f18\u5316\uff0c\u6700\u540e\u518d\u5bf9\u7ed3\u679c\u53d6\u53cd\uff0c\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8574\u542b\u9879\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","title":"\u8574\u542b\u9879\u3001\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","text":"

\u8574\u542b\u9879(implicant) \u5206\u4e3a \u4e3b\u8574\u542b\u9879(prime implicant) \u548c \u57fa\u672c\u4e3b\u8574\u542b\u9879(essential prime implicant)\u3002

\u5982\u56fe\uff0c\u5de6\u4fa7\u7684\u4e24\u4e2a\u4e3b\u8574\u542b\u9879\u56e0\u4e3a\u5305\u62ec\u4e86 \u24f5 \u548c \u24f6 \u8fd9\u4e24\u4e2a\u552f\u4e00\u7684 1\uff0c\u6240\u4ee5\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\uff1b

\u800c\u53f3\u4fa7\u7684\u8574\u542b\u9879\u5219\u662f\u4e00\u4e2a\u5197\u4f59\u7684\u8574\u542b\u9879\uff1b

\u6ce8\u610f

\u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\uff0c\u4e3b\u8574\u542b\u9879\u4e00\u5b9a\u5b58\u5728\uff0c\u4f46\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\u4e0d\u4e00\u5b9a\u5b58\u5728\u3002

\ud83e\udd14

\u6b63\u56e0\u4e3a\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u5b58\u5728\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4efb\u610f\u51fd\u6570\uff0c\u4f18\u5316\u7684\u591a\u89e3\u7ed3\u679c\u603b\u6709\u4e00\u90e8\u5206\u662f\u4e0d\u53d8\u7684\uff08\u53ea\u4e0d\u8fc7\u6ca1\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u65f6\u5019\u8fd9\u90e8\u5206\u4e3a\u96f6\uff09\u3002

\u9ea6\u514b\u62c9\u594e\u56e0\u7b97\u6cd5

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ecf\u5178\u7ec4\u5408\u7535\u8def","title":"\u7ecf\u5178\u7ec4\u5408\u7535\u8def","text":"

\u5f15\u5165

\u5728\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u73b0\u6210\u7684\u7ec4\u5408\u7535\u8def\u80fd\u591f\u4f7f\u7528\uff0c\u6765\u65b9\u4fbf\u6211\u4eec\u8bbe\u8ba1\u3002

\u4e0d\u8fc7\u6211\u6ca1\u6709\u5168\u5199\u51fa\u6765\uff1b

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e09\u6001\u95e8","title":"\u4e09\u6001\u95e8","text":"

\u4e09\u6001\u7f13\u51b2\u5668(3-State Buffer)

\u9664\u4e86\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u5b83\u8fd8\u6709\u4e00\u4e2a \u4f7f\u80fd\u7aef(enable) \u6765\u63a7\u5236\u8f93\u51fa\u3002

\u6240\u8c13\u7684\u4e09\u6001\u6307\u7684\u662f\uff1a

\u4f5c\u7528

\u6211\u4eec\u53ef\u4ee5\u7528\u4e09\u6001\u95e8\u6765\u89e3\u51b3\u591a\u8def\u8f93\u51fa\u4e92\u8054\u7684\u95ee\u9898\u3002\u6b63\u5982\u5728 ICS \u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\uff0c\u53ef\u4ee5\u8ba9\u591a\u4e2a\u8f93\u5165\u5728\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u88ab\u8f93\u51fa\u5230\u603b\u7ebf\u4e2d\u2014\u2014\u5b9e\u73b0\u7684\u624b\u6bb5\u5c31\u662f\u901a\u8fc7\u7535\u8def\u6765\u4f7f\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u4f7f\u80fd\u7aef\u4e3a 1\u3002

\u5728\u6570\u5b57\u903b\u8f91\u8bbe\u8ba1\u4e2d\uff0c\u4e09\u6001\u95e8\u5b9e\u73b0\u603b\u7ebf\u7684\u76f8\u5173\u77e5\u8bc6\u5c06\u5728 \u7b2c\u516d\u7ae0 \u63d0\u5230\u3002

\u788e\u788e\u5ff5

\u6240\u4ee5\u4ec0\u4e48\u662f\u300c\u9ad8\u963b\u6001\u300d\uff1f\u5b83\u8981\u5982\u4f55\u7406\u89e3\uff1f\u4ee5\u4e0b\u662f\u6211\u6839\u636e\u5b83\u7684\u5e94\u7528\u53cd\u63a8\u5f97\u5230\u7684\u7ed3\u8bba\uff1a

\u9ad8\u963b\u6001\u540c\u5b83\u5b57\u9762\u610f\u601d\u76f8\u540c\uff0c\u6211\u4eec\u53ef\u4ee5\u5f53\u5b83\u6b64\u65f6\u662f\u65ad\u8def\uff0c\u800c\u9ad8\u963b\u6001\u91cd\u70b9\u8981\u4e0e\u4f4e\u7535\u5e73\u505a\u533a\u5206\uff1a\u5982\u679c\u73b0\u5728\u5b58\u5728\u4e00\u4e2a\u201c\u5bfc\u7ebf\u201d\uff0c\u5b83\u6709\u4e09\u4e2a\u7aef\uff0c\u5176\u4e2d\u6211\u4eec\u4eba\u4e3a\u5730\u8ba4\u4e3a\u5176\u4e2d\u4e24\u4e2a\u662f\u8f93\u5165\uff0c\u5206\u522b\u547d\u540d\u4e3a a \u548c b\uff0c\u53e6\u5916\u4e00\u4e2a\u8ba4\u4e3a\u662f\u8f93\u51fa\uff0c\u547d\u540d\u4e3a c\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u662f\u4e0d\u5141\u8bb8 a \u548c b \u4e00\u4e2a\u4e3a\u9ad8\u7535\u5e73\uff0c\u4e00\u4e2a\u4e3a\u4f4e\u7535\u5e73\u7684\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd9\u91cc\u4eba\u4e3a\u5b9a\u4e49\u7684\u8f93\u5165\u8f93\u51fa\u5e76\u4e0d\u5f71\u54cd\u7535\u6d41\u7684\u6d41\u52a8\u65b9\u5411\uff0c\u6240\u4ee5\u5f53 a \u4e3a 1\uff0cb \u4e3a 0 \u65f6\uff0c\u7535\u6d41\u5f88\u53ef\u80fd\u4f1a\u53d8\u6210\u4ece a \u6d41\u5411 b\uff0c\u7535\u6e90\u53ef\u80fd\u76f4\u63a5\u63a5\u5730\uff0c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u770b\u5230\u7684\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u6216\u95e8\u6765\u5b9e\u73b0\u8fd9\u4e2a\u903b\u8f91\u884c\u4e3a\uff08\u6362\u8a00\u4e4b\uff0c\u8fd9\u79cd\u201c\u4e09\u7aef\u201d\u7535\u8def\u662f\u76f8\u5f53\u5371\u9669\u7684\uff0c\u4e0d\u8fc7\u5f53\u6211\u4eec\u4eba\u4e3a\u5b9a\u4e49\u591a\u4e2a\u8f93\u51fa\u65f6\uff0c\u4e00\u822c\u4f5c\u4e3a\u63a5\u6536\u7aef\u7684\u7535\u8def\u90fd\u6709\u4e8c\u6781\u7ba1\u9632\u6b62\u9006\u6d41\uff0c\u6240\u4ee5\u5355\u8f93\u5165\u591a\u8f93\u51fa\u662f\u5f88\u5e38\u89c1\u7684\uff09\u3002

\u4ece\u66f4\u62bd\u8c61\u5730\u89d2\u5ea6\u6765\u7406\u89e3\uff0c\u4e00\u6839\u5bfc\u7ebf\u6700\u591a\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\uff0c\u7136\u800c\u6709\u4e24\u4e2a\u8f93\u5165\u4ecb\u5165\uff0c\u6b64\u65f6\u6211\u4eec\u53ea\u6709 0/1 \u4e24\u6001\uff0c\u4e0d\u7ba1\u600e\u4e48\u6837\uff0c\u6211\u4eec\u90fd\u540c\u65f6\u62ff\u5230\u4e86\u6765\u81ea\u4e24\u4e2a\u8f93\u5165\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8e\u53ea\u80fd\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\u7684\u5bfc\u7ebf\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u4fe1\u606f\u51b2\u7a81\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981 MUX \u6765\u9009\u62e9\u6211\u4eec\u9700\u8981\u7684\u5230\u5e95\u662f\u54ea\u4e2a\u4fe1\u606f\uff0c\u7136\u540e\u518d\u7ed9\u5bfc\u7ebf\u3002

\u800c\u4e09\u6001\u95e8\uff0c\u5728\u9ad8\u4f4e\u7535\u5e73\u5916\u5f15\u5165\u4e86\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u975e\u5e38\u5de7\u5999\u5730\u89e3\u51b3\u4e86\u8fd9\u4e2a\u300c\u591a\u8f93\u5165\u300d\u5371\u9669\u7684\u95ee\u9898\uff0c\u5f53\u6211\u4eec\u4e0d\u5e0c\u671b\u8fd9\u4e2a\u6570\u636e\u88ab\u8f93\u5165\u65f6\uff0c\u6211\u4eec\u76f4\u63a5\u628a\u5b83\u65ad\u5f00\uff0c\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u628a\u5f00\u5173\u65ad\u5f00\uff0c\u53ea\u8981\u6211\u4eec\u8ba9\u5bfc\u7ebf\u7684\u82e5\u5e72\u8f93\u5165\u4e2d\u53ea\u6709\u4e00\u4e2a\u4e09\u6001\u95e8\u4e0d\u5728\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u80fd\u591f\u4f18\u96c5\u5730\u5b9e\u73b0\u591a\u8def\u8f93\u51fa\u4e92\u8054\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u590d\u6742\u95e8","title":"\u590d\u6742\u95e8","text":"

\u901a\u8fc7\u4e00\u4e9b\u57fa\u672c\u95e8\u7ec4\u5408\u51fa\u6765\u7684\u95e8\uff0c\u5b83\u4eec\u7684\u8868\u793a\u65b9\u6cd5\u5927\u81f4\u5982\u4e0b\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/","title":"Chap 3 Combinational Logic Design","text":"

\u7ea6 4261 \u4e2a\u5b57 7 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 14 \u5206\u949f

\u5f15\u5165

\u6309\u7167\u529f\u80fd\uff0c\u903b\u8f91\u7535\u8def\u5206\u4e3a\u4e24\u7c7b\uff1a

\u800c\u672c\u7ae0\u5c06\u7740\u773c\u4e8e\u7ec4\u5408\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\u5c06\u5728 \u4e0b\u4e00\u7ae0 \u4ecb\u7ecd\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","title":"\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","text":"

\u8868\u793a\u903b\u8f91\u7684\u65b9\u6cd5

  1. \u771f\u503c\u8868(Truth Table)\uff1b
  2. \u5e03\u5c14\u51fd\u6570(Boolean Function)\uff1b
  3. \u5361\u8bfa\u56fe(Karnaugh Maps)\uff1b
  4. \u65f6\u5e8f\u56fe(Timing Diagram)\uff1b
  5. \u903b\u8f91\u7535\u8def\u56fe(Logic Circuit)\uff1b

\u5176\u4e2d\uff0c\u4e0b\u5212\u7ebf\u7684\u65b9\u6cd5\u5728\u529f\u80fd\u786e\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u5176\u8868\u793a\u662f\u552f\u4e00\u7684\u3002

\u800c\u6211\u4eec\u7684\u8bbe\u8ba1\uff0c\u5c31\u662f\u5728\u6ee1\u8db3\u529f\u80fd\u7684\u524d\u63d0\u4e0b\uff0c\u5c3d\u53ef\u80fd\u4f18\u5316\u548c\u627e\u5230\u6700\u597d\u7684\u8bbe\u8ba1\u3002

\u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u5982\u4e0b\uff1a

  1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
  2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
  3. \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u4ee5\u51cf\u5c11\u6210\u672c(\u6bd4\u5982\u4f7f\u7528\u5361\u8bfa\u56fe)\uff1b
  4. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
  5. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
graph LR;\n\nA[\"\u5b9e\u9645\u95ee\u9898\"] ===> B[\"\u771f\u503c\u8868\"]\n\nB ==>|\"\u5316\u7b80\"| C[\"\u6700\u7b80\u529f\u80fd\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D[\"\u7f51\u8868\"]\n\nB ==>|\"\u53d8\u6362\"| E[\"\u5408\u9002\u7684\u8868\u8fbe\u5f0f\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D
"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5206\u5c42\u8bbe\u8ba1","title":"\u5206\u5c42\u8bbe\u8ba1","text":"

\u5206\u5c42\u8bbe\u8ba1\u5373\u5c06\u590d\u6742\u95ee\u9898\u6a21\u5757\u5316\u5206\u89e3\u4e3a\u82e5\u5e72\u5c42\u6b21\uff0c\u7136\u540e\u9010\u4e2a\u62bd\u8c61\u89e3\u51b3\u3002

\u5176\u8bbe\u8ba1\u65b9\u6cd5\u5206\u4e3a \u81ea\u9876\u5411\u4e0b(Top-Down) \u548c \u81ea\u5e95\u5411\u4e0a(Bottom-Up)\u3002

\u524d\u8005\u4ece\u9700\u6c42\u5f00\u59cb\uff0c\u81ea\u9876\u5411\u4e0b\u5206\u89e3\u529f\u80fd\u8bbe\u8ba1\uff1b\u540e\u8005\u6839\u636e\u73b0\u6709\u7684\u5143\u4ef6\u53bb\u7ec4\u5408\u6210\u76ee\u6807\u529f\u80fd\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u96c6\u6210\u7535\u8def","title":"\u96c6\u6210\u7535\u8def","text":"

\u96c6\u6210\u7535\u8def(integrated circuits) \u53c8\u53eb \u82af\u7247(chip)\uff0c\u5206\u4e3a\u5982\u4e0b\u82e5\u5e72\u7b49\u7ea7\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6280\u672f\u53c2\u6570","title":"\u6280\u672f\u53c2\u6570","text":"

\u95e8\u7684\u5b9e\u73b0\u4e3b\u8981\u901a\u8fc7\u8fd9\u4e9b\u53c2\u6570\u7279\u6027\u6765\u63cf\u8ff0\uff1a

Name Description Fan-in \u4e00\u4e2a\u95e8\u53ef\u7528\u7684\u8f93\u5165 Fan-out \u4e00\u4e2a\u6805\u6781\u8f93\u51fa\u9a71\u52a8\u7684\u6807\u51c6\u8d1f\u8f7d\u6570\u91cf Logic Levels \u88ab\u8ba4\u4e3a\u662f\u9ad8\u4f4e\u7535\u5e73\u7684\u8f93\u5165\u8f93\u51fa\u7535\u538b\u8303\u56f4 Noise Margin \u5bf9\u5916\u754c\u566a\u58f0\u7684\u5bb9\u5fcd\u80fd\u529b(\u5177\u4f53\u6765\u8bf4\u662f\u4e0d\u4f1a\u5bfc\u81f4\u884c\u4e3a\u5f02\u53d8\u7684\u6700\u5927\u566a\u58f0\u538b\u503c) Cost for a gate \u7ee7\u627f\u7535\u8def\u7684\u95e8\u6210\u672c Propagation Delay \u4fe1\u53f7\u6539\u53d8\u540e\u4ece\u8f93\u5165\u5230\u8f93\u51fa\u6240\u9700\u7684\u53d8\u5316\u65f6\u95f4 Power Dissipation \u7535\u6e90\u8f93\u51fa\u80fd\u8017\u548c\u95e8\u7684\u80fd\u8017"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6247\u5165\u6247\u51fa","title":"\u6247\u5165\u6247\u51fa","text":"

\u6247\u5165\u63cf\u8ff0\u4e86\u4e00\u4e2a\u95e8\u80fd\u591f\u63a5\u53d7\u7684\u6700\u591a\u8f93\u5165\u91cf\uff0c\u5982\u4e00\u4e2a\u56db\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6247\u5165\u5c31\u662f 4\uff1b\u800c\u6247\u51fa\u63cf\u8ff0\u7684\u5219\u662f\u4e00\u4e2a\u95e8\u7684\u8f93\u51fa(\u6805\u6781\u8f93\u51fa)\u5728\u4e0d\u964d\u4f4e\u5de5\u4f5c\u6027\u80fd\u7684\u60c5\u51b5\u4e0b\u80fd\u591f\u8d1f\u8f7d\u591a\u5c11\u95e8\uff0c\u4f8b\u5982\u4e00\u4e2a\u975e\u95e8\u7684\u8f93\u51fa\u80fd\u591f\u540c\u65f6\u8d1f\u8f7d 4 \u4e2a\u975e\u95e8\u5e76\u4e14\u90fd\u80fd\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u5176\u6247\u51fa\u4e3a 4\uff0c\u5176\u4e5f\u80fd\u901a\u8fc7\u6807\u51c6\u8d1f\u8f7d\u6765\u5b9a\u4e49\u3002

\u6807\u51c6\u8d1f\u8f7d

\u6240\u8c13\u7684\u6807\u51c6\u8d1f\u8f7d\uff0c\u662f\u8861\u91cf\u201c\u8d1f\u8f7d\u201d\u7684\u4e00\u4e2a\u201c\u5355\u4f4d\u781d\u7801\u201d\u3002\u5176\u5927\u5c0f\u7b49\u4e8e\u4e00\u4e2a\u975e\u95e8(\u9006\u53d8\u5668)\u8d21\u732e\u7684\u8d1f\u8f7d\u538b\u529b\u3002

\u90a3\u4e48\u8981\u5982\u4f55\u8bc4\u4f30\u8d1f\u8f7d\u5462\uff1f\u9996\u5148\u6211\u4eec\u5f15\u5165 \u8fc7\u6e21\u65f6\u95f4(transition time)\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8f6c\u6362\u65f6\u95f4","title":"\u8f6c\u6362\u65f6\u95f4","text":"

\u8f6c\u6362\u65f6\u95f4\u5206\u4e3a \\(\\mathrm{t_{LH}}\\)(rise time) \u548c \\(\\mathrm{t_{HL}}\\)(fall time) \u4e24\u4e2a\u90e8\u5206\u3002

\u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

\u968f\u7740\u8d1f\u8f7d\u589e\u52a0\uff0c\u8f6c\u6362\u65f6\u95f4\u4e5f\u4f1a\u589e\u52a0\uff08\u7ed9\u7535\u5bb9\u5145\u7535\u7684\u65f6\u95f4\u589e\u52a0\uff09\uff0c\u800c\u6247\u51fa\u5b9a\u4e49\u4e2d\u63d0\u5230\u7684\u201c\u6700\u5927\u8d1f\u8f7d\u201d\uff0c\u5c31\u662f\u6307\u5b83\u7684\u8f6c\u6362\u65f6\u95f4\u4e0d\u8d85\u8fc7\u5b83\u9884\u5b9a\u7684\u6700\u5927\u8f6c\u6362\u65f6\u95f4\u3002

\u4ece\u5de6\u5230\u53f3\u8868\u793a\u8d1f\u8f7d\u4e0d\u65ad\u589e\u52a0\u65f6\uff0crise time \u7684\u53d8\u5316\u8d8b\u52bf\u3002

\u5b9e\u9645\u4e0a\uff0c\u7c7b\u4f3c\u7684\uff0c\u8d85\u51fa\u6247\u5165\u540e\uff0c\u95e8\u5bf9\u8f93\u5165\u7684\u53cd\u5e94\u5c31\u592a\u6162\u4e86\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4f20\u64ad\u5ef6\u8fdf","title":"\u4f20\u64ad\u5ef6\u8fdf","text":"

\u4f20\u64ad\u5ef6\u8fdf(propagation delay) \u8861\u91cf\u4e86\u95e8\u7684\u8f93\u5165\u53d8\u5316\u5bfc\u81f4\u8f93\u51fa\u53d8\u5316\u6240\u9700\u8981\u7684\u65f6\u95f4\u3002\u7531\u4e8e\u4ece\u4f4e\u7535\u5e73\u8f6c\u5316\u5230\u9ad8\u7535\u5e73\u548c\u9ad8\u7535\u5e73\u8f6c\u5316\u5230\u4f4e\u7535\u5e73\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u4f20\u64ad\u5ef6\u8fdf\u540c\u6837\u6709\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u4f7f\u7528 \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}} \u6765\u8868\u793a\\)\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u4f20\u64ad\u5ef6\u8fdf\u7684\u8ba1\u7b97\u65b9\u6cd5\u662f\u8f93\u5165\u548c\u8f93\u51fa\u7684\u53d8\u5316\u4e2d\u70b9\uff08\u5373\u53d8\u5316\u5230 \\(\\frac{1}{2}V_{CC}\\) \u65f6\uff09\u7684\u65f6\u95f4\u5dee\uff0c\u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5f15\u5165 \\(\\mathrm{ t_{pd} }\\) \u6765\u7edf\u4e00\u8868\u793a \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}}\\)\u3002\u6570\u503c\u4e0a\uff0c\\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\) \u6216 \\(\\mathrm{ t_{pd} } = max(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

\u9898\u9762\u7b54\u6848

\u6839\u636e\u65f6\u5e8f\u56fe\uff0c\u5199\u51fa\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\uff0c\u6b64\u5904 \\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

Transition Time vs. Propagation Delay

\u8f6c\u6362\u65f6\u95f4\u4e13\u6ce8\u4e8e\u8f93\u51fa\u7684\u53d8\u5316\uff0c\u800c\u4f20\u64ad\u5ef6\u8fdf\u5219\u5305\u542b\u4e86\u8f93\u5165\u7684\u53d8\u5316\u548c\u8f93\u51fa\u7684\u53d8\u5316\u6574\u4e2a\u8fc7\u7a0b\u3002

\u4ece\u65f6\u5e8f\u56fe\u4e0a\u7684\u8868\u793a\u6765\u770b\uff0c\u8f6c\u6362\u65f6\u95f4\u53ea\u9700\u8981\u8f93\u51fa\u7684\u65f6\u5e8f\u56fe\u5373\u53ef\u8868\u793a\uff1b\u4f46\u4f20\u64ad\u5ef6\u8fdf\u5219\u662f\u901a\u8fc7\u6bd4\u8f83\u8f93\u5165\u548c\u8f93\u51fa\u7684\u504f\u5dee\u6765\u8868\u793a\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u6a21\u578b","title":"\u5ef6\u8fdf\u6a21\u578b","text":"

\u4e3a\u4e86\u7814\u7a76\u4e3a\u4ec0\u4e48\u4f1a\u5b58\u5728\u95e8\u5ef6\u8fdf\uff0c\u523b\u753b\u95e8\u7684 \u56fa\u6709\u95e8\u5ef6\u8fdf(inherent gate delay)\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5176\u5efa\u6a21\uff0c\u5e38\u89c1\u7684 \u5ef6\u8fdf\u6a21\u578b(delay model) \u6709\u4ee5\u4e0b\u4e24\u79cd\uff1a

\u5c06\u4e0d\u5b58\u5728\u5ef6\u8fdf\u7684\u6a21\u578b\u3001\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u548c\u60ef\u6027\u5ef6\u8fdf\u6a21\u578b\u505a\u6bd4\u8f83\u5730\u6765\u770b\uff0c\u5c31\u662f\u5982\u4e0b\u60c5\u51b5\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","title":"\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","text":"

\u5f15\u5165

\u7531\u4e8e\u5b9e\u9645\u7535\u8def\u4e2d\u5b9e\u73b0\u5ef6\u8fdf\uff0c\u6570\u5b66\u4e0a\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e0e\u5b9e\u9645\u7535\u8def\u60c5\u51b5\u4f1a\u5b58\u5728\u4e0d\u540c\u2014\u2014\u5373\u5b58\u5728\u82e5\u5e72\u6570\u5b66\u4e0a\u65e0\u6cd5\u76f4\u63a5\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u6240\u4ee5\u7814\u7a76\u5ef6\u8fdf\u662f\u975e\u5e38\u5fc5\u8981\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u8ba1\u7b97","title":"\u5ef6\u8fdf\u8ba1\u7b97","text":"

\u8ba1\u7b97\u4e00\u4e2a\u7535\u8def\u7684\u5ef6\u8fdf\u65f6\uff0c\u6709\u4e24\u65b9\u9762\u9700\u8981\u8003\u8651\uff0c\u4e00\u65b9\u9762\u662f\u7535\u8def\u81ea\u8eab\u6240\u5bfc\u81f4\u7684\u4e00\u4e2a\u56fa\u5b9a\u5ef6\u8fdf\uff0c\u53e6\u5916\u4e00\u65b9\u9762\u5219\u662f\u7531\u4e8e\u4e0d\u540c\u7684\u8d1f\u8f7d\u5bfc\u81f4\u7684\u989d\u5916\u5ef6\u8fdf\u3002

\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c0.07 \u4e3a\u56fa\u5b9a\u5ef6\u8fdf\uff0c0.021 \u4e3a\u4e00\u4e2a\u6807\u51c6\u8d1f\u8f7d\u5e26\u6765\u7684\u5ef6\u8fdf\u7cfb\u6570\uff0cSL(4.5 here) \u5219\u662f\u6807\u51c6\u5316\u7684\u8d1f\u8f7d\u91cf\u3002

\u800c\u5177\u4f53\u7684\u8868\u8fbe\u5f0f\uff0c\u4f1a\u5728 Cell Library \u91cc\u5199\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","title":"\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","text":"

\u7531\u4e8e\u5b58\u5728\u5ef6\u8fdf\uff0c\u8bb8\u591a\u5728\u6570\u5b66\u610f\u4e49\u4e0a\u6ca1\u6709\u95ee\u9898\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u5728\u7535\u8def\u4e2d\u5c31\u5b58\u5728\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002

\u4f8b\u5982\uff0c\u4ece\u6570\u5b66\u89d2\u5ea6\u770b\uff0c\\(\\mathrm{Y=\\overline{A}A}\\) \u7684\u503c\u6052\u4e3a 0\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u7531\u4e8e\u5ef6\u8fdf\uff0c\u5176\u4eff\u771f\u6ce2\u5f62\u4e2d\u4f1a\u51fa\u73b0\u8fd9\u6837\u4e00\u4e2a \u6bdb\u523a(glitch)\uff0c\u800c\u8fd9\u5728\u5de5\u7a0b\u610f\u4e49\u4e0a\u6709\u5f88\u5927\u7684\u95ee\u9898\u3002

\u66f4\u590d\u6742\u7684 \ud83c\udf30

\u8ba9\u6211\u4eec\u5206\u6790\u4e0b\u9762\u8fd9\u4e2a\u4e8c\u8def\u9009\u62e9\u5668\uff0c\u5176\u529f\u80fd\u662f\u901a\u8fc7 S \u63a7\u5236\u8f93\u51fa\u8868\u8fbe\u7684\u662f A \u8fd8\u662f B\uff0c\u5728\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u4e0b\uff0c\u5176\u6ce2\u5f62\u5982\u4e0b\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0cY \u4e2d\u51fa\u73b0\u4e86\u610f\u6599\u4e4b\u5916\u7684\u6bdb\u523a\u3002

\u800c\u8fd9\u4e2d\u6bdb\u523a\u53ef\u4ee5\u7528\u6dfb\u52a0\u5197\u4f59\u9879\u6765\u89e3\u51b3\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","title":"\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","text":"

\u6b63\u903b\u8f91(positive logic) \u5c31\u662f 1 \u662f\u6709\u6548\u4fe1\u53f7\uff0c\u8d1f\u903b\u8f91(negative logic) \u5c31\u662f 0 \u662f\u6709\u6548\u4fe1\u53f7\u3002\u800c\u5728\u6b63\u903b\u8f91\u4e2d AND \u95e8\u7684\u4f5c\u7528\u5c31\u7b49\u6548\u4e8e\u8d1f\u903b\u8f91\u4e2d OR \u95e8\u7684\u4f5c\u7528\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u524d\u9762\u51e0\u7ae0\u7684\u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\u5bf9\u79f0\u3002

\u800c\u6b63\u903b\u8f91\u7684\u7535\u8def\u7684\u7b26\u53f7\u4e00\u822c\u5c31\u662f\u6b63\u5e38\u7684\u903b\u8f91\u95e8\u7b26\u53f7\uff0c\u800c\u8d1f\u903b\u8f91\u7684\u903b\u8f91\u95e8\u7b26\u53f7\u5219\u53ef\u80fd\u6709\u5c0f\u4e09\u89d2\u6807\uff0c\u5373 \u6781\u6027\u6307\u793a\u5668(polarity indicator)\uff1a

\u5982\u56fe\uff0c\u5de6\u4fa7\u662f\u6b63\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\uff0c\u53f3\u4fa7\u662f\u8d1f\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5de5\u827a\u6620\u5c04","title":"\u5de5\u827a\u6620\u5c04","text":"

\u5de5\u827a\u6620\u5c04(technology mapping) \u662f\u6307\u5c06\u903b\u8f91\u56fe\u6216\u7f51\u8868\u8f6c\u5316\u4e3a\u53ef\u4ee5\u7528\u5de5\u827a\u5b9e\u73b0\u7684\u5fc3\u7684\u56fe\u6216\u7f51\u8868\u7684\u8fc7\u7a0b\u3002

\u6709\u65f6\u6211\u4eec\u4f1a\u4f7f\u7528\u4e0e\u975e\u95e8\u548c\u975e\u95e8\u66ff\u6362\u4e0e\u95e8\u548c\u6216\u95e8(\u56e0\u4e3a\u7535\u8def\u5c42\u9762\uff0c\u4e0e\u95e8\u5b9e\u9645\u4e0a\u5c31\u662f\u901a\u8fc7\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684)\uff0c\u7136\u540e\u4f1a\u53d1\u73b0\u6709\u4e00\u4e9b\u8fde\u7eed\u5bf9\u975e\u95e8\u53ef\u4ee5\u76f8\u4e92\u62b5\u6d88\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

\u84dd\u7eff\u8272\u5757\u4e2d\u5373\u4e3a\u88ab\u66ff\u6362\u540e\u7684\u5185\u5bb9\uff0c\u7136\u540e\u6211\u4eec\u53d1\u73b0\u51fa\u73b0\u4e86\u82e5\u5e72\u53ef\u4ee5\u62b5\u6d88\u7684\u975e\u95e8\u3002

\u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6216\u975e\u95e8\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u9a8c\u8bc1\u6b63\u786e\u6027","title":"\u9a8c\u8bc1\u6b63\u786e\u6027","text":"

\u9a8c\u8bc1\u6b63\u786e\u6027(Verification)\u6307\u7684\u662f\u8bc1\u660e\u6700\u7ec8\u8bbe\u8ba1\u7684\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u9884\u671f\u4ea7\u54c1\u89c4\u683c\uff08Specification\uff09\u3002 \u7b80\u5355\u7684\u4ea7\u54c1\u89c4\u683c\u53ef\u4ee5\u7528\u771f\u503c\u8868\u3001\u5e03\u5c14\u4ee3\u6570\u5f0f\u3001HDL \u4ee3\u7801\u7b49\u63cf\u8ff0\u3002

\u6700\u57fa\u672c\u7684\u9a8c\u8bc1\u6b63\u786e\u6027\u65b9\u6cd5\u6709\uff1a

Why Simulate?

\u6211\u4eec\u66fe\u5728\u6570\u903b\u5b9e\u9a8c\u4e2d\u9a8c\u8bc1\u8fc7\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\uff0c\u90a3\u65f6\u6211\u4eec\u91c7\u7528\u4eba\u5de5\u903b\u8f91\u5206\u6790\uff0c\u901a\u8fc7\u6d4b\u8bd5\u786e\u5b9a\u4e86\u5f85\u6d4b\u95e8\u7684\u771f\u503c\u8868\uff0c\u5e76\u5c06\u5176\u4e0e\u6807\u51c6\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u771f\u503c\u8868\u6bd4\u8f83\uff0c\u4ece\u800c\u5224\u65ad\u6211\u4eec\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u662f\u5426\u6b63\u786e\u5b9e\u73b0\uff1b

\u4f46\u5982\u679c\u6211\u4eec\u9700\u8981\u9a8c\u8bc1\u4e00\u4e2a\u4e00\u767e\u4e07\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\u5462\uff1f\uff08\u4ec5\u7528\u4e8e\u4e3e\u4f8b\uff09

\u6211\u4eec\u53d1\u73b0\uff0c\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u4eba\u5de5\u6c42\u89e3\u8fd9\u4e2a\u7535\u8def\u7684\u771f\u503c\u8868\u6216\u5e03\u5c14\u4ee3\u6570\u5f0f\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u8bbe\u8ba1\u4e00\u7ec4\u5177\u6709\u4ee3\u8868\u6027\u7684\u8f93\u5165\uff08\u4ecd\u7136\u662f\u4e2a\u4e0d\u5c0f\u7684\u6570\u76ee\uff09\uff0c\u8ba9\u8ba1\u7b97\u673a\u5728\u4eff\u771f\u73af\u5883\u4e2d\u7528\u8fd9\u7ec4\u8f93\u5165\u53bb\u6d4b\u8bd5\u7535\u8def\uff0c\u5e76\u5c06\u6d4b\u8bd5\u7ed3\u679c\u4e0e\u9884\u671f\u7ed3\u679c\u8fdb\u884c\u5bf9\u6bd4\u3002\u6211\u4eec\u65e0\u6cd5\u786e\u4fdd\u9a8c\u8bc1\u662f\u5426\u5145\u5206\uff0c\u4f46\u81f3\u5c11\u8fd9\u662f\u5b9e\u8df5\u610f\u4e49\u4e0a\u8db3\u591f\u5145\u5206\u7684\u9a8c\u8bc1\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u903b\u8f91","title":"\u7ec4\u5408\u903b\u8f91","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u903b\u8f91\u51fd\u6570","title":"\u57fa\u672c\u903b\u8f91\u51fd\u6570","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u529f\u80fd\u5757","title":"\u57fa\u672c\u529f\u80fd\u5757","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8bd1\u7801\u5668","title":"\u8bd1\u7801\u5668","text":"

\u7a77\u4e3e\u53ef\u80fd\u6027\uff0c\u7a20\u5bc6 -> \u7a20\u5bc6/\u7a00\u758f

\u4e3a\u4e86\u8282\u7701\u95e8\u8f93\u5165\u6210\u672c\uff0c\u6211\u4eec\u5e38\u5e38\u4f7f\u7528 \u5206\u7ea7 \u7684\u601d\u60f3\u6765\u6784\u9020\u591a\u8f93\u5165\u591a\u8bd1\u7801\u5668\u3002

eg

\u7531\u4e8e\u5e95\u5c42\u7684\u7535\u8def\u80fd\u591f\u76f4\u63a5\u5b9e\u73b0\u7684\u8fd0\u7b97\u5341\u5206\u5c40\u9650\uff0c\u6240\u4ee5\u9700\u8981\u7528\u8bd1\u7801\u5668\u6765\u5b9e\u73b0\u4e00\u4e9b\u57fa\u7840\u8fd0\u7b97\uff0c\u4f8b\u5982\u52a0\u6cd5\u3002

\u4e00\u4f4d\u52a0\u6cd5\u5668\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bd1\u7801\u5668\u548c\u6216\u95e8\u5b9e\u73b0\uff0c\u6838\u5fc3\u5c31\u662f\u679a\u4e3e\u8f93\u5165\u7684\u5404\u79cd\u60c5\u51b5\uff0c\u7136\u540e\u7528\u6216\u95e8\u62fe\u53d6 sum \u548c carry \u7684\u6700\u5c0f\u9879\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7f16\u7801\u5668","title":"\u7f16\u7801\u5668","text":"

\u7a20\u5bc6/\u7a00\u758f -> \u7a20\u5bc6

\u5982\u4e0a\u5b9a\u4e49\u7684\u7f16\u7801\u5668\u6709\u4e00\u4e2a\u9650\u5236\uff0c\u5373\u4efb\u4f55\u65f6\u5019\u8f93\u5165\u53ea\u80fd\u6709\u4e00\u4e2a\u662f\u6d3b\u52a8\u7684\uff0c\u5373\u8f93\u5165\u662f one-hot \u7684\u3002

\u4f18\u5148\u7f16\u7801\u5668

\u4f18\u5148\u7f16\u7801\u5668\u80fd\u591f\u5b9e\u73b0\u4f18\u5148\u7ea7\u51fd\u6570\uff0c\u5b83\u4e0d\u8981\u6c42\u8f93\u5165\u662f one-hot \u7684\uff0c\u800c\u662f\u603b\u662f\u5173\u6ce8\u6709\u6548\u8f93\u5165\u4e2d\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4e2a\u3002\u5373\u6bd4\u5982\u5f53\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4f4d\u662f 1 \u65f6\uff0c\u5176\u5b83\u6240\u6709\u4f18\u5148\u7ea7\u4e0d\u5982\u5b83\u7684\u4f4d\u7f6e\u7684\u503c\u90fd\u662f\u6211\u4eec\u4e0d\u5173\u5fc3\u7684\u5185\u5bb9\u4e86\u3002

\u4e2d\u65ad(interrupt)\u5224\u4f18\u5668

\u4f18\u5148\u7f16\u7801\u5668\u7684\u4e00\u79cd\u5e94\u7528\u5c31\u662f\u4e2d\u65ad\u5224\u4f18\u5668\u3002

\u5176\u4e2d \\(V\\) \u8868\u793a\u8f93\u51fa\u662f\u5426\u6709\u6548\uff0c\u5728\u4e2d\u65ad\u5224\u4f18\u7cfb\u7edf\u4e2d\u5373\u8868\u793a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u591a\u8def\u590d\u7528\u5668","title":"\u591a\u8def\u590d\u7528\u5668","text":"

\u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u51fa\u7684\u662f\u82e5\u5e72\u8f93\u5165\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

\u901a\u8fc7\u4e09\u6001\u95e8\u6765\u5b9e\u73b0 MUX \u80fd\u591f\u964d\u4f4e\u95e8\u8f93\u5165\u4ee3\u4ef7\u3002

eg

\u5b8c\u5168\u4f7f\u7528\u4e09\u6001\u95e8\u6765\u5b9e\u73b0\u56db\u8f93\u5165 MUX\uff0c\u95e8\u8f93\u5165\u5927\u5927\u51cf\u5c11\u3002

MUX \u8fd8\u53ef\u4ee5 \u5b9e\u73b0\u4efb\u610f\u7684\u903b\u8f91\u51fd\u6570\uff1a

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u5c06\u539f\u6765\u7684\u63a7\u5236\u7aef\u5f53\u4f5c\u8f93\u5165\u7aef\uff0c\u5e76\u5728\u539f\u6765\u7684\u8f93\u5165\u7aef\u5199\u5165\u903b\u8f91\u51fd\u6570\u7684\u771f\u503c\u8868\uff0c\u4ee5\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\u3002

\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u628a\u4e00\u90e8\u5206\u7684\u8f93\u5165\u5f53\u4f5c\u5e38\u91cf\u7aef\u6765\u7b80\u5316\u5143\u4ef6\uff08\u964d\u7ef4\uff09\uff1a

\u89c2\u5bdf\u5176\u6700\u5c0f\u9879\uff0c\u4f7f\u5176\u8f93\u51fa\u6240\u6709\u6700\u5c0f\u9879\u3002\u4f46\u662f\u5728\u964d\u7ef4\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u9700\u8981\u5168\u90fd\u662f C\uff0c\u5982\u679c\u5361\u8bfa\u56fe\u4e2d\u5b58\u5728\u53cc 1 \u6216\u8005\u53cc 0\uff0c\u4e5f\u53ef\u4ee5\u4ecd\u7136\u4f7f\u7528\u5e38\u91cf\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4fe1\u53f7\u5206\u914d\u5668","title":"\u4fe1\u53f7\u5206\u914d\u5668","text":"

\u7b80\u5199\u4e3a DEMUX\uff0c\u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u5165\u7ed9\u5230\u82e5\u5e72\u8f93\u51fa\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

\u540e\u7eed \ud83d\udc49 \u53ef\u91cd\u7f16\u7a0b\u6280\u672f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7b97\u672f\u903b\u8f91\u7535\u8def","title":"\u7b97\u672f\u903b\u8f91\u7535\u8def","text":"

\u6211\u4eec\u4e3b\u8981\u8ba8\u8bba\u7684\u8ba1\u7b97\u4e3b\u8981\u5305\u62ec\u903b\u8f91\u8fd0\u7b97\u548c\u7b97\u672f\u8fd0\u7b97\uff0c\u524d\u8005\u7531\u4e8e\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u57fa\u672c\u95e8\u5f88\u65b9\u4fbf\u5b9e\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u8fc7\u591a\u8003\u8651\uff1b\u5728\u6b64\u4e3b\u8981\u4ecb\u7ecd\u7b97\u6570\u8fd0\u7b97\u3002\u5728\u8ba1\u7b97\u673a\u786c\u4ef6\u4e2d\uff0c\u627f\u62c5\u8ba1\u7b97\u5de5\u4f5c\u7684\u4e3b\u8981\u90e8\u4ef6\u4e3a ALU(Arithmetic Logical Unit)\u3002

\u5f15\u5165

\u5728\u4e4b\u524d #\u8bd1\u7801\u5668 \u548c #\u591a\u8def\u590d\u7528\u5668 \u7684\u90e8\u5206\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e00\u4e9b\u5b9e\u73b0 1 bit \u52a0\u6cd5\u5668\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u6765\u8be6\u7ec6\u770b\u770b\u52a0\u6cd5\u5668\u8fd9\u4e2a\u4e1c\u897f\u3002

\u9996\u5148\u6211\u4eec\u9700\u8981\u4e86\u89e3\u52a0\u6cd5\u5668\u6700\u5e95\u5c42\u7684\u5355\u5143\uff0c\u5373\u5b9e\u73b0 1 bit \u8fd0\u7b97\u7684 \u534a\u52a0\u5668(half adder) \u548c \u5168\u52a0\u5668(full adder)\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u5c06\u4ed6\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u5b9e\u73b0 n bits \u7684\u52a0\u6cd5\u5668\uff0c\u5176\u4e2d\u4e3b\u8981\u4ecb\u7ecd \u884c\u6ce2\u52a0\u6cd5\u5668(binary ripple carry adder)\u3002\u6b64\u5916\uff0c\u57fa\u4e8e\u4e00\u4e9b\u7f16\u7801\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5c06\u5b83\u6539\u88c5\u6210\u52a0\u51cf\u6cd5\u5668\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u534a\u52a0\u5668--\u5168\u52a0\u5668","title":"\u534a\u52a0\u5668 & \u5168\u52a0\u5668","text":"

\u5bf9\u4e8e\u4e8c\u8fdb\u5236\u52a0\u6cd5\uff0c\u5176\u8f93\u51fa\u65e0\u7591\u6709\u5f53\u524d\u4f4d\u7684\u548c S \u548c\u8fdb\u4f4d C\uff0c\u800c\u8f93\u5165\u9664\u4e86\u4e24\u4e2a\u64cd\u4f5c\u6570 X \u548c Y \u4ee5\u5916\uff0c\u8fd8\u53ef\u80fd\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z(\u6216\u8005C{n-1})\u3002\u800c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6570\u7684\u7b2c\u4e00\u4f4d\uff0c\u663e\u7136\u4e0d\u4f1a\u6709\u8fdb\u4f4d\uff0c\u6216\u8005\u8bf4 Z=0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e2a Z \u53bb\u6389\uff0c\u5373\u8f93\u5165\u53ea\u6709 X \u548c Y\uff0c\u8fd9\u5c31\u662f \u534a\u52a0\u5668(half adder)\uff1b\u663e\u7136\uff0c\u5bf9\u5e94\u7684\uff0c\u5982\u679c\u8f93\u5165\u4e2d\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z\uff0c\u5219\u79f0\u4e3a \u5168\u52a0\u5668(full adder)\u3002

\u534a\u52a0\u5668\u5168\u52a0\u5668 \u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u7535\u8def\u56fe \\[ S=\\overline{X}Y+X\\overline{Y}=X\\oplus Y \\\\ C = XY \\]

\u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u5361\u8bfa\u56fe\u903b\u8f91\u8868\u8fbe\u5f0f with XOR \\[ S=\\overline{X}\\,\\overline{Y}Z + \\overline{X}Y\\overline{Z} + X\\overline{Y}\\,\\overline{Z} + XYZ \\\\ C = XY + XZ + YZ \\]

\\[ S = (X\\oplus Y)\\oplus Z \\\\ C = XY + Z(X\\oplus Y) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u884c\u6ce2\u52a0\u6cd5\u5668","title":"\u884c\u6ce2\u52a0\u6cd5\u5668","text":"

\u884c\u6ce2\u52a0\u6cd5\u5668\u662f\u6734\u7d20\u7684 n bits \u52a0\u6cd5\u5668\u5b9e\u73b0\u3002\u5176\u6838\u5fc3\u601d\u60f3\u4e5f\u5c31\u662f\u6a21\u62df\u6211\u4eec\u4f7f\u7528\u201c\u7ad6\u5f0f\u201d\u6765\u8ba1\u7b97\u52a0\u6cd5\uff0c\u4ece\u4f4e\u4f4d\u5f00\u59cb\u9010\u4f4d\u8ba1\u7b97\uff0c\u5e76\u5c06\u8fdb\u4f4d\u7ed9\u5230\u4e0b\u4e00\u4f4d\u4f5c\u4e3a\u8f93\u5165\u3002

\u5b9e\u9645\u4e0a\u65e0\u8bba\u662f\u53ea\u7528\u534a\u52a0\u5668\u6216\u662f\u53ea\u7528\u5168\u52a0\u5668\uff0c\u90fd\u53ef\u4ee5\u5b9e\u73b0\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u4f46\u662f\u6b8a\u9014\u540c\u5f52\uff0c\u65e0\u975e\u662f\u901a\u8fc7\u5916\u90e8\u5668\u4ef6\u6765\u8fdb\u884c\u4e92\u76f8\u8f6c\u5316\u800c\u5df2\u3002\u5982\u679c\u53ea\u4f7f\u7528\u5168\u52a0\u5668\u6765\u5b9e\u73b0\uff0c\u5219\u4ee5 4 bits \u884c\u6ce2\u52a0\u6cd5\u5668\u4e3a\u4f8b\uff0c\u5176\u5927\u81f4\u903b\u8f91\u5982\u4e0b\uff1a

\u5176\u4e2d\uff0c\u5728\u52a0\u6cd5\u5668\u4e2d\uff0c\\(C_0\\) \u5fc5\u7136\u662f 0\u3002

\u52a0\u51cf\u6cd5\u5668\uff0c\u6216\u8005\u8bf4\u52a0\u6cd5\u5668\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u5728 ALU \u4e2d\u662f\u6700\u5f71\u54cd\u6548\u7387\u7684\u90e8\u5206\uff0c\u800c\u4e14\u5982\u679c\u4f7f\u7528\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u968f\u7740\u4f4d\u6570\u589e\u52a0\u6548\u7387\u4f1a\u8d8a\u6765\u8d8a\u6162\u3002

\u6240\u4ee5\u4f1a\u6709\u7c7b\u4f3c\u4e8e\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u66f4\u591a\u7684\u5185\u5bb9\u53ef\u4ee5\u770b xxjj \u7684\u8ba1\u7ec4\u7b14\u8bb0\u3002\uff08\u6570\u903b\u4e2d\u6700\u591a\u4e86\u89e3\u5230\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u5373\u53ef\u3002\uff09

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4e8c\u8fdb\u5236\u51cf\u6cd5","title":"\u4e8c\u8fdb\u5236\u51cf\u6cd5","text":"

\u9996\u5148\uff0c\u5728\u5f00\u59cb\u4e8c\u8fdb\u5236\u51cf\u6cd5\u7684\u4ecb\u7ecd\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u4e86\u89e3 \u8865\u7801(2's complement)\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u4e1c\u897f\u5b9e\u5728\u662f\u63d0\u8fc7\u592a\u591a\u6b21\u4e86\u6240\u4ee5\u6211\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u518d\u5199\u4e00\u6b21\uff0c\u53ef\u4ee5\u67e5\u770b\u6211\u7684 C \u5c0f\u7b14\u8bb0\u7684\u8865\u7801\u5185\u5bb9\u3002

\u7ed3\u5408\u8865\u7801\uff0c\u6211\u4eec\u518d\u6765\u89c2\u5bdf\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u51cf\u6570\u7684\u6bcf\u4e00\u4f4d\u53d6\u53cd\uff0c\u5e76\u5bf9\u6574\u4e2a\u6570\u52a0\u4e00\uff0c\u518d\u76f4\u63a5\u5c06\u5b83\u4eec\u76f8\u52a0\u5373\u53ef\uff0c\u5373\u5c06\u51cf\u6cd5\u8f6c\u5316\u4e3a\u8865\u7801\u4e0b\u7684\u52a0\u6cd5\u3002

\u5176\u4e2d\u52a0\u4e00\u8fd9\u4e00\u6b65\u6070\u597d\u53ef\u4ee5\u901a\u8fc7\u5728\u52a0\u6cd5\u5668\u4e2d\u5fc5\u5b9a\u4e3a 0 \u7684 \\(C_0\\) \u6765\u5b9e\u73b0\u3002\u6211\u4eec\u5728\u8f93\u5165\u4e2d\u6dfb\u52a0\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u53cd\u7801(1's complement)\uff0c\u518d\u7528 \\(C_0\\) \u5b9e\u73b0\u52a0\u4e00\uff0c\u4ece\u800c\u5f97\u5230\u8865\u7801(2's complement)\uff0c\u5c31\u6837\u5c31\u53ef\u4ee5\u5b9e\u73b0\u52a0\u51cf\u6cd5\u5668\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","title":"\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/","title":"Chap 4 Sequential Circuits","text":"

\u7ea6 5781 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 19 \u5206\u949f

\u4e0a\u4e00\u7ae0\u8bb2\u7684\u662f\u7ec4\u5408\u7535\u8def\uff0c\u867d\u7136\u7ec4\u5408\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u8bf8\u591a\u529f\u80fd\uff0c\u4f46\u662f\u5b83\u4f9d\u7136\u5b58\u5728\u4e00\u4e9b\u7684\u95ee\u9898\uff1a

  1. \u5bf9\u4e8e\u590d\u6742\u7684\u903b\u8f91\uff0c\u62bd\u8c61\u5c42\u7ea7\u591a\uff0c\u5bfc\u81f4\u786c\u4ef6\u5c42\u9762\u5f00\u9500\u5927\u3001\u8017\u65f6\u957f\uff0c\u4e00\u65b9\u9762\u63d0\u9ad8\u6210\u672c\uff0c\u4e00\u65b9\u9762\u964d\u4f4e\u6548\u7387\uff1b
  2. \u7ec4\u5408\u7535\u8def\u6ca1\u6cd5\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u6240\u6709\u7684\u529f\u80fd\u6a21\u5757\u5bf9\u4e8e\u7279\u5b9a\u7684\u8f93\u5165\u7ed9\u51fa\u76f8\u540c\u7684\u8f93\u51fa\uff1b

\u800c\u65f6\u5e8f\u7535\u8def\u5219\u62e5\u6709\u5b58\u50a8\u4fe1\u606f\u7684\u80fd\u529b\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u6765\u8bf4\uff0c\u8f93\u51fa\u9664\u4e86\u4e0e\u8f93\u5165\u6709\u5173\uff08\u751a\u81f3\u53ef\u4ee5\u6ca1\u6709\u8f93\u5165\uff09\uff0c\u4e5f\u53ef\u4ee5\u4e0e\u81ea\u8eab \u72b6\u6001(state) \u6709\u5173\u3002

\u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u5206\u4e3a\u4e24\u7c7b\uff08\u4e3b\u8981\u5206\u7c7b\u4f9d\u636e\u662f\u8f93\u5165\u4fe1\u53f7\u7684\u65f6\u95f4\u548c\u5185\u90e8\u72b6\u6001\u6539\u53d8\u7684\u65f6\u95f4\uff09\uff1a\u540c\u6b65\u65f6\u5e8f\u7535\u8def(synchronous sequential circuit) \u548c \u5f02\u6b65\u65f6\u5e8f\u7535\u8def(asynchronous sequential circuit)\u3002

The behavior of a synchronous sequential circuit can be defined from the knowledge of its signals at discrete instants of time. The behavior of an asynchronous sequential circuit depends upon the inputs at any instant of time and the order in continuous time in which the inputs change.

\u4e00\u822c\u6765\u8bf4\uff0c\u5f02\u6b65\u7535\u8def\u7684\u8bbe\u8ba1\u76f8\u5bf9\u56f0\u96be\uff08\u884c\u4e3a\u4e0e\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\u548c\u8f93\u5165\u4fe1\u53f7\u53d8\u5316\u7684\u65f6\u95f4\u5e8f\u5217\u5bc6\u5207\u76f8\u5173\uff09\uff0c\u4f46\u4ecd\u7136\u5341\u5206\u5fc5\u8981\uff0c\u6bd4\u5982\u89e6\u53d1\u5668\u5c31\u662f\u4ee5\u4e00\u90e8\u9501\u5b58\u5668\u4e3a\u6a21\u5757\u8bbe\u8ba1\u7684\uff1b\u800c\u540c\u6b65\u7535\u8def\u7684\u4f7f\u7528\u66f4\u52a0\u5e7f\u6cdb\uff0c\u901a\u5e38\u8fd9\u4e9b\u201c\u79bb\u6563\u7684\u65f6\u523b\u201d\u90fd\u662f\u7531 \u65f6\u949f\u53d1\u751f\u5668(clock generator) \u8fd9\u79cd\u65f6\u5e8f\u5668\u4ef6\u4ea7\u751f\u5468\u671f\u6027\u7684 \u65f6\u949f\u8109\u51b2(clock pulse) \u5e8f\u5217\u6765\u5b9e\u73b0\u7684\uff08\u8fd9\u79cd\u7535\u8def\u4e00\u822c\u88ab\u79f0\u4e3a \u949f\u63a7\u65f6\u5e8f\u7535\u8def(clocked sequential circuit)\uff0c\u7531\u4e8e\u8bbe\u8ba1\u76f8\u5bf9\u5bb9\u6613\uff0c\u9c81\u68d2\u6027\u5f3a\uff0c\u6240\u4ee5\u88ab\u5e7f\u6cdb\u5e94\u7528\uff09\u3002

\u7f13\u51b2

\u7f13\u51b2\u5668(buffer) \u4e00\u822c\u901a\u8fc7\u4e24\u4e2a\u975e\u95e8\u4e32\u8054\uff0c\u5e76\u5c06\u8f93\u5165\u8fde\u901a\u8f93\u51fa\u5b9e\u73b0\uff0c\u8fd9\u6837\u80fd\u591f\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u7136\u800c\u65e0\u6cd5\u4fee\u6539\u3002\u800c\u9501\u5b58\u5668\u5c31\u662f\u5728\u7f13\u51b2\u5668\u7684\u57fa\u7840\u4e0a\uff0c\u5c06\u975e\u95e8\u66ff\u6362\u4e3a\u6216\u975e\u95e8\u6216\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684\u3002

\u5176\u4e2d\uff0c\u4ece\u7ed9\u5b9a\u8f93\u5165\u5230\u66f4\u65b0\u8f93\u51fa\u6709\u4e00\u4e2a \\(t_G\\) \u7684\u5ef6\u65f6\u3002

\u5f15\u5165

\u663e\u7136\uff0c\u6839\u636e\u4e0a\u9762\u7684\u6982\u8ff0\uff0c\u65f6\u5e8f\u7535\u8def\u4e2d\u6700\u91cd\u8981\u7684\u5c31\u662f\u4fe1\u606f\u5b58\u50a8\u5143\u4ef6\u3002\u5f53\u8f93\u5165\u4fe1\u53f7\u4e0d\u53d1\u751f\u53d8\u5316\u65f6\uff08\u91cd\u70b9\u662f\u53d8\u5316\uff0c\u5373\u8f93\u5165\u548c\u5b58\u50a8\u4fe1\u606f\u672a\u5fc5\u5b58\u5728\u5bf9\u5e94\u5173\u7cfb\uff09\u5b58\u50a8\u5143\u4ef6\u5c31\u80fd\u591f\u4fdd\u6301\u5176\u5185\u90e8\u5b58\u50a8\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u3002

\u5b58\u50a8\u5143\u4ef6\u4e3b\u8981\u7531 \u9501\u5b58\u5668(latch) \u548c \u89e6\u53d1\u5668(flip-flop) \u4e24\u79cd\uff0c\u5176\u4e2d\u524d\u8005\u662f\u540e\u8005\u7684\u57fa\u7840\uff0c\u6216\u8005\u8bf4\u591a\u6570\u60c5\u51b5\u4e0b\u6211\u4eec\u4f7f\u7528\u540e\u8005\uff0c\u4f46\u540e\u8005\u7531\u524d\u8005\u6784\u6210\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u9501\u5b58\u5668","title":"\u9501\u5b58\u5668","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr--sr-\u9501\u5b58\u5668","title":"SR & S'R' \u9501\u5b58\u5668","text":"

SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u57fa\u672c\u539f\u7406\u662f\u4e00\u81f4\u7684\uff0c\u53ea\u4e0d\u8fc7\u524d\u8005\u7528\u7684\u662f\u6216\u975e\u95e8\uff0c\u540e\u8005\u7528\u7684\u662f\u4e0e\u975e\u95e8\u3002

SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u8f93\u5165\u90fd\u662f S(Set) \u548c R(Reset) \u4e24\u4e2a\u90e8\u5206\uff0c\u8f93\u51fa\u90fd\u662f Q \u548c Q' \u4e24\u4e2a\u90e8\u5206\u3002

\u540d\u79f0\u4e0a \u7684\u5171\u540c\u70b9\u662f\uff0c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\uff1b\u5bf9\u4e8e R \u548c Q' \u4e5f\u662f\u8fd9\u6837\uff0c\u53ea\u4e0d\u8fc7\u8981\u6ce8\u610f\uff0cS'R'\u9501\u5b58\u5668\u8f93\u5165\u7684\u5e76\u4e0d\u662f\u8fd9\u91cc\u6240\u8bf4\u7684 S\uff0c\u800c\u662f\u5c06 S' \u4f5c\u4e3a\u8f93\u5165\u3002

SR \u9501\u5b58\u5668S'R' \u9501\u5b58\u5668

\u4e00\u4e2a\u8bb0\u5fc6\u65b9\u6cd5\u662f\uff0cSR \u7684\u95e8\u5143\u4ef6\u5bf9 1 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u6216\u975e\u95e8 \u7684\u5b9e\u73b0\uff1b\u800c S'R' \u7684\u95e8\u5143\u4ef6\u5bf9 0 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u4e0e\u975e\u95e8 \u7684\u5b9e\u73b0\u3002\u800c\u901a\u8fc7 \u300c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\u300d\u53ef\u4ee5\u5f97\u5230 S\u3001R \u4e0e Q\u3001Q' \u7684\u4f4d\u7f6e\u3002

\u4f46\u662f\u5b9e\u9645\u7684\u5b58\u50a8\u5143\u4ef6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684 SR/S'R' Latches\uff0c\u6240\u4ee5\u5b83\u4eec\u5f53\u7136\u662f\u5b58\u5728\u95ee\u9898\u7684\u3002\u7531\u4e8e\u7535\u8def\u5b58\u5728\u5ef6\u65f6\uff0c\u6240\u4ee5 S \u548c R \u7684\u8f93\u5165\u5f88\u96be\u540c\u65f6\u5230\u8fbe\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u524d\u9762\u52a0\u4e00\u4e2a\u63a7\u5236\u7aef\uff0c\u5f53\u786e\u4fdd\u4e24\u4e2a\u8f93\u5165\u90fd\u5230\u4f4d\u7684\u65f6\u5019\u518d\u4f7f\u80fd\u3002

\u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\uff0c\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668(SR Latch with Control Input)\uff08S'R'\u7565\uff09\uff1a

\u6ce8\u610f\uff01SR \u9501\u5b58\u5668\u901a\u8fc7 \u6216\u975e\u95e8 \u5b9e\u73b0\uff0c\u4f46\u5e26\u8f93\u5165\u63a7\u5236\u7684 SR \u9501\u5b58\u5668\u5219\u901a\u8fc7 \u4e0e\u975e\u95e8 \u5b9e\u73b0\uff01

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#d-\u9501\u5b58\u5668","title":"D \u9501\u5b58\u5668","text":"

D \u9501\u5b58\u5668\u5b9e\u9645\u4e0a\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\u7684\u6539\u8fdb\u3002\u5176\u4e2d\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u867d\u7136 S \u548c R \u8d77\u4f5c\u7528\u7684\u6709\u4e09\u79cd\u72b6\u6001

\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u5373\u4f7f\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\uff0c\u4e5f\u5b58\u5728\u4e00\u4e2a\u300cundefined\u300d\u72b6\u6001\uff0c\u800c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u51fa\u73b0\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u60f3\uff0c\u80fd\u4e0d\u80fd\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u7684\u53d1\u751f\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u7531\u4e8e\u53ef\u4ee5\u901a\u8fc7 C \u6765\u63a7\u5236\u662f\u5426\u4fdd\u6301\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u5f3a\u5236\u8981\u6c42 \\(S = \\overline R\\)\uff0c\u4e8e\u662f\u5c31\u907f\u514d\u4e86 undefined \u60c5\u51b5\u7684\u51fa\u73b0\uff0c\u8fd9\u5c31\u662f D \u9501\u5b58\u5668\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 D \u9501\u5b58\u5668\u5c06\u4e0d\u505c\u7684\u53d8\u5316\u5176\u4e2d\u7684\u6570\u636e\uff0c\u51fa\u73b0 \u7a7a\u7ffb\uff0c\u5bfc\u81f4\u6211\u4eec\u65e0\u6cd5\u786e\u5b9a C \u7f6e 0 \u65f6 Q \u7684\u8f93\u51fa\u7a76\u7adf\u662f\u4ec0\u4e48\uff0c\u800c\u8fd9\u662f\u975e\u5e38\u5371\u9669\u7684\u3002

\u8fd9\u4e3b\u8981\u662f\u56e0\u4e3a D \u9501\u5b58\u5668\u7684\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u662f\u76f4\u63a5\u66b4\u9732\u51fa\u6765\u3001\u540c\u65f6\u5141\u8bb8\u53d8\u5316\u7684\uff08\u4e0d\u662f\u540c\u65f6\u53d8\u5316\uff0c\u662f\u6307\u5728 Input \u53ef\u4ee5\u53d8\u7684\u65f6\u5019 Output \u4e5f\u80fd\u53d8\uff09\uff0c\u5373 \u900f\u660e(transparent) \u7684\u3002\u8fd9\u5c31\u5bfc\u81f4\u4e86\u5728\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u91cc\uff0c\u540c\u65f6\u5b58\u5728 \u53ef\u4ee5\u4e92\u76f8\u5f71\u54cd \u7684\u4e24\u4e2a\u4e1c\u897f\u3002\u8fd9\u4e5f\u662f\u89e6\u53d1\u5668\u6240\u89e3\u51b3\u7684\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668","title":"\u89e6\u53d1\u5668","text":"

\u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u63d0\u5230\u7684\uff0c\u7531\u300c\u900f\u660e\u300d\u5f15\u53d1\u7684\u95ee\u9898\uff0c\u800c\u91c7\u7528\u89e6\u53d1\u5668\u7684\u8bbe\u8ba1\u3002\u901a\u8fc7\u7ec4\u5408\u4e24\u4e2a\u9501\u5b58\u5668\uff0c\u4e3b\u8981\u6709\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5\uff1a

  1. \u5728\u6709\u8109\u51b2\uff08\u9ad8\u7535\u5e73\uff09\u65f6\uff0c\u4fee\u6539\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fdd\u6301\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff1b\u5728\u6ca1\u6709\u8109\u51b2\uff08\u4f4e\u7535\u5e73\uff09\u65f6\u5019\u4fdd\u6301\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fee\u6539\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u66f4\u65b0\u89e6\u53d1\u5668\u7684\u72b6\u6001\uff0c\u5373 \u4e3b\u4ece\u5f0f(master-slave)\u89e6\u53d1\u5668\uff1b
  2. \u4ec5\u5728\u65f6\u949f\u7684\u8fb9\u7f18\u89e6\u53d1\uff0c\u5373\u5728\u7279\u5b9a\u65f6\u523b\u4ec5\u63a5\u53d7\u4e00\u4e2a\u8f93\u5165\uff0c\u5373 \u8fb9\u6cbf\u89e6\u53d1\u5f0f(edge-triggered)\u89e6\u53d1\u5668\uff1b

\u8fb9\u6cbf\u89e6\u53d1\u5f0f D \u89e6\u53d1\u5668\u662f\u76ee\u524d\u4f7f\u7528\u6700\u5e7f\u6cdb\u7684\u89e6\u53d1\u5668\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr-\u4e3b\u4ece\u89e6\u53d1\u5668","title":"SR \u4e3b\u4ece\u89e6\u53d1\u5668","text":"

\u867d\u7136\u5b83\u53eb FF\uff0c\u4f46\u5b83\u5e76\u4e0d\u7b26\u5408 FF \u7684\u7279\u5f81\uff0c\u7136\u800c\u5206\u7c7b\u4e0a\u53c8\u5c5e\u4e8e pulse-triggered FF\u3002

SR \u89e6\u53d1\u5668\u77e5\u6240\u4ee5\u662f\u6240\u8c13\u7684 pulse-triggered \u7684\uff0c\u662f\u56e0\u4e3a\u5728 S \u548c R \u8f93\u5165\u90fd\u4e3a 0 \u65f6\uff0c\u5982\u679c\u51fa\u73b0\u566a\u97f3\uff0c\u5c31\u4f1a\u5bfc\u81f4 Slave \u5199\u5165\u5f02\u5e38\u6570\u636e\u3002

\u4f46\u662f\u6211\u4e2a\u4eba\u8ba4\u4e3a\u8fd9\u662f SR \u81ea\u8eab\u6709\u4e24\u4e2a\u4fdd\u6301\u6001\u5bfc\u81f4\u7684\u5f0a\u7aef\uff0c\u800c\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u6709\u8f93\u5165\u4e3a S \u548c R \u90fd\u4e3a 0 \u7684\u60c5\u51b5\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\u6b63\u8fb9\u6cbf\u89e6\u53d1 D \u89e6\u53d1\u5668\u7684\u5927\u81f4\u539f\u7406\u56fe\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)

"},{"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/#\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

\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":"

\u6682\u7565

\u5ef6\u65f6\u5206\u6790

\u5ef6\u65f6\u5206\u6790\u662f\u4e00\u4e2a\u91cd\u96be\u70b9\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\uff0c\u5c06\u5728\u4e4b\u540e\u5355\u72ec\u5f00\u4e00\u4e2a\u5c0f\u7ed3\u91cd\u70b9\u4ecb\u7ecd\u3002

\u8bf7\u53c2\u8003 \u5ef6\u65f6\u5206\u6790\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","title":"\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","text":"

\u7c7b\u6bd4\u7ec4\u5408\u903b\u8f91\u7535\u8def\u901a\u8fc7\u771f\u503c\u8868\u8bbe\u8ba1\u7535\u8def\uff0c\uff08\u540c\u6b65\uff09\u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u4f9d\u636e\u72b6\u6001\u8868\uff08\u6216\u7b49\u4ef7\u8868\u8fbe\uff0c\u5982\u72b6\u6001\u56fe\uff09\u6765\u8bbe\u8ba1\u7535\u8def\u3002\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u89e6\u53d1\u5668\u4ee5\u53ca\u5176\u5b83\u7ec4\u5408\u7535\u8def\u7684\u9009\u62e9\u4e0e\u8bbe\u8ba1\uff1a

\u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684\u8bbe\u8ba1\u662f\u7c7b\u4f3c\u7684\uff0c\u5982\u4e0b\uff1a

  1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
    1. \u63cf\u8ff0\u7cfb\u7edf\u884c\u4e3a\u8fc7\u7a0b\u4e2d\uff0c\u8981\u6ce8\u610f\u72b6\u6001\u7684\u590d\u7528\uff08\u4e0d\u8fc7\u5e76\u975e\u72b6\u6001\u8d8a\u5c11\u6210\u672c\u5c31\u8d8a\u5c0f\uff0c\u8fd9\u91cc\u6709\u89e6\u53d1\u5668\u6570\u91cf\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684 trade-off\uff09\uff1b
    2. \u786e\u5b9a\u7535\u8def\u7684\u521d\u59cb\u72b6\u6001\uff08\u590d\u4f4d\u72b6\u6001(reset state)\uff0c\u901a\u8fc7\u7ed9\u5b9a\u590d\u4f4d(reset)\u4fe1\u53f7\u5b9e\u73b0\uff09\uff1b
      • \u590d\u4f4d\u4e00\u822c\u53ef\u4ee5\u662f\u5f02\u6b65\u7684\uff1b
  2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
  3. \u7ed9\u8bbe\u8ba1\u597d\u7684\u72b6\u6001\u7f16\u7801\u8d4b\u503c\uff0c\u5f97\u5230\u5177\u4f53\u7684\u72b6\u6001\u8868\uff1b
    1. \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 \u6309\u8ba1\u6570\u987a\u5e8f\u3001 \u6309\u683c\u96f7\u7801\u3001\u7528\u72ec\u70ed\u7801 \u6765\u7ed9\u72b6\u6001\u8d4b\u503c\uff0c\u66f4\u7cfb\u7edf\u7684\u65b9\u6cd5\u6bd4\u8f83\u590d\u6742\uff0c\u4e0d\u505a\u8ba8\u8bba\uff1b
    2. \u5176\u4e2d\u8fd8\u6709\u4e00\u79cd\u60c5\u51b5\u662f\u6240\u9700\u8981\u7684\u72b6\u6001\u4e0d\u80fd\u5b8c\u6574\u586b\u5145 \\(2^n\\) \u79cd\u60c5\u51b5\uff0c\u9700\u8981\u8bbe\u8ba1\u65e0\u6548\u72b6\u6001\uff0c\u8fd9\u79cd\u65f6\u5019\u53ef\u4ee5\u4e0d\u8003\u8651\u5b83\u4eec\uff1b
  4. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u4f7f\u7528\u7684\u89e6\u53d1\u5668\u53ca\u5176\u8f93\u5165\u65b9\u7a0b\uff1b
  5. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u8f93\u51fa\u65b9\u7a0b\uff1b
  6. \u4f18\u5316\u8f93\u5165\u65b9\u7a0b\u548c\u8f93\u51fa\u65b9\u7a0b\uff1b
  7. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
  8. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
    • \u4e3b\u8981\u5c31\u662f\u770b\u80fd\u4e0d\u80fd\u590d\u73b0\u72b6\u6001\u56fe\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u673a","title":"\u72b6\u6001\u673a","text":"

\u5c3d\u7ba1\u5728\u5c0f\u89c4\u6a21\u7684\u8bbe\u8ba1\u4e2d\uff0c\u72b6\u6001\u56fe\u8868\u73b0\u826f\u597d\uff0c\u4f46\u662f\u968f\u7740\u8bbe\u8ba1\u7684\u7cfb\u7edf\u89c4\u6a21\u53d8\u5927\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u52a0\u6cdb\u7528\u7684\u65b9\u5f0f\u6765\u8868\u8fbe\u7c7b\u4f3c\u7684\u65f6\u5e8f\u903b\u8f91\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u5728\u72b6\u6001\u56fe\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4fee\u6539\uff0c\u8bbe\u8ba1\u4e86 \u72b6\u6001\u673a(State-Machine Diagram) \u6765\u505a\u8fd9\u4ef6\u4e8b\u3002

\u72b6\u6001\u673a\u6df7\u7528\u4e86\u7c73\u52d2\u578b\u548c\u6469\u5c14\u578b\u7684\u8f93\u51fa\u683c\u5f0f\uff0c\u4f18\u52a3\u5728 \u72b6\u6001\u56fe \u4e2d\u6709\u6240\u63d0\u53ca\u3002\u5e76\u4e14\uff0c\u6709\u9650\u56fe\u5c06\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u4e5f\u5199\u5165\uff0c\u603b\u4f53\u4e0a\u5bf9\u7535\u8def\u8bbe\u8ba1\u66f4\u53cb\u597d\u3002\u4e0b\u56fe\u662f\u72b6\u6001\u673a\u7684\u4e00\u4e2a\u201c\u8303\u5f0f\u201d\u3002

Generic State Diagram Template

\u9996\u5148\u89e3\u91ca\u4e00\u4e0b\u8fd9\u4e2a\u201c\u8303\u5f0f\u201d\uff1a

\u5177\u4f53\u89e3\u91ca\u72b6\u6001\u673a\u6709\u54ea\u4e9b\u5185\u5bb9\uff0c\u4ee5\u53ca\u5404\u4e2a\u90e8\u5206\u4e4b\u95f4\u7684\u903b\u8f91\u3002\u5173\u4e8e\u5404\u4e2a\u90e8\u5206\u51fa\u73b0\u7684\u4f4d\u7f6e\uff0c\u8bf7\u53c2\u8003 Template\u3002

\u53e6\u5916\uff0c\u4e3a\u4e86\u7b80\u5316\u8bed\u53e5\uff0c\u4e0b\u9762\u7684\u8bf4\u6cd5\u7701\u7565\u4e86\u65f6\u949f\uff0c\u8bf7\u8bb0\u5f97\u8003\u8651\u3002

\u72b6\u6001\u673a\u6a21\u578b\u4e3b\u8981\u6709\u4e09\u8981\u7d20\uff1a\u8f93\u5165\u6761\u4ef6(Input Conditions)\u3001\u72b6\u6001\u8f6c\u79fb(Transitions) \u548c \u8f93\u51fa\u884c\u4e3a(Output Actions)\u3002\u603b\u4f53\u6765\u8bf4\uff0c\u8f93\u5165\u6761\u4ef6\u544a\u8bc9\u6211\u4eec\u6574\u4e2a\u72b6\u6001\u673a\u8981\u5982\u4f55\u53d8\u5316\uff1b\u72b6\u6001\u8f6c\u79fb\u63cf\u8ff0\u4e86\u72b6\u6001\u673a\u7684\u5185\u90e8\u8f6c\u79fb\u884c\u4e3a\uff0c\u5373\u56fe\u8bba\u4e0a\u7684\u6709\u5411\u8054\u901a\u5173\u7cfb\uff1b\u8f93\u51fa\u884c\u4e3a\u63cf\u8ff0\u52a8\u6001\u53d8\u5316\u8fc7\u7a0b\u4e2d\u72b6\u6001\u673a\u7684\u5bf9\u5916\u8868\u8fbe\u3002\u5176\u4e2d\uff0c\u72b6\u6001\u8f6c\u79fb\u548c\u8f93\u51fa\u884c\u4e3a\u662f\u6211\u4eec\u9700\u8981\u5173\u6ce8\u7684\u72b6\u6001\u673a\u7684\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u8f93\u5165\u6761\u4ef6\u662f\u6211\u4eec\u7528\u6765\u505a\u5b9e\u65f6\u5224\u65ad\u7684\u5916\u90e8\u4f9d\u636e\u3002

\u300c\u8f93\u5165\u6761\u4ef6\u300d\u662f\u7531\u8f93\u5165\u53d8\u91cf\u5f62\u6210\u7684\u4e00\u4e2a\u5e03\u5c14\u65b9\u7a0b\uff0c\u5728\u6574\u4e2a\u72b6\u6001\u673a\u4e2d\uff0c\u8f93\u5165\u662f\u53d8\u5316\u7684\u201c\u56e0\u53d8\u91cf\u201d\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u65e0\u8bba\u662f\u72b6\u6001\u8f6c\u79fb\u8fd8\u662f\u8f93\u51fa\uff0c\u90fd\u53d6\u51b3\u4e8e\u8f93\u5165\u6761\u4ef6\u3002\u800c\u5bfc\u81f4\u7279\u5b9a\u884c\u4e3a\u7684\u8f93\u5165\u6761\u4ef6\u5219\u88ab\u5206\u7c7b\u4e3a \u8f6c\u79fb\u6761\u4ef6(Transition Condition, TC) \u548c \u8f93\u51fa\u6761\u4ef6(Output Condition, OC)\u3002

\u300c\u72b6\u6001\u8f6c\u79fb\u300d\u5728\u56fe\u4e2d\u8868\u73b0\u4e3a\u6709\u5411\u8fb9\uff0c\u5f53 TC \u6210\u7acb\u65f6\uff0c\u72b6\u6001\u8f6c\u79fb\u53d1\u751f\uff1b\u6216\u8005\u5bf9\u4e8e\u65e0\u6761\u4ef6\u8f6c\u79fb\uff0c\u53ea\u8981\u5f97\u5230\u65f6\u949f\u8109\u51b2\u5c31\u4f1a\u8f6c\u79fb\u5230\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002

\u300c\u8f93\u51fa\u884c\u4e3a\u300d\u5728\u72b6\u6001\u673a\u4e2d\u6709\u56db\u79cd\u89e6\u53d1\u65b9\u6cd5\uff08\u5373\u56db\u79cd OC\uff09\uff1aMoore\u3001\u4e0d\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Independent, TCI) Mealy\u3001\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Dependent, TCD) Mealy \u548c \u4f9d\u8d56\u8f6c\u79fb\u548c\u8f93\u51fa\u6761\u4ef6(Transition and Output-condition Dependent, TOCD) Mealy\u3002\u6839\u636e\u5b57\u9762\u610f\u601d\u6765\u770b\uff1a

In a given state, an output action occurs if: (a) it is unconditional (Moore), (b) TCI and its output condition OC = 1, (c) TCD and its transition condition TD = 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 \\]

Tips: \u4e0a\u9762\u662f\u5bf9 Transition Condition \u7684\u7ea6\u675f\uff0c\u5c06 TC \u6362\u6210 OC \u4e5f\u9700\u8981\u6210\u7acb\u3002

\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

\u6ce8\u610f\uff0c\u56fe\u4e2d\u6709\u4e00\u4e2a\u9519\u8bef\uff08\u5927\u6982\uff09\uff0c\u53f3\u4fa7 \\(S_1\\) \u7684 OC \u5e94\u4e3a \\((\\overline{A}\\cdot\\overline{B})\\)\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u5ef6\u65f6\u5206\u6790","title":"\u5ef6\u65f6\u5206\u6790","text":"

\u9996\u5148\uff0c\u81ea\u4e0a\u800c\u4e0b\u7684\u7ed9\u51fa\u89c2\u5ff5\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\u6709\u4e24\u4e2a\u4e3b\u8981\u90e8\u5206\u548c\u4e00\u4e2a\u6b21\u8981\u90e8\u5206\uff1a

  1. \u7ec4\u5408\u7535\u8def\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
  2. \u89e6\u53d1\u5668\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
  3. \u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\uff1b

\u5e76\u4e14\u5f80\u5f80\u662f\u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\uff0c\u8ba1\u7b97\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u7684\u65f6\u95f4\u3002\u6700\u6838\u5fc3\u7684\u95ee\u9898\u5c31\u662f\u8ba1\u7b97\u7535\u8def\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\u7684\u6700\u77ed\u65f6\u949f\u5468\u671f\u3002\u63a5\u4e0b\u6765\uff0c\u81ea\u4e0b\u800c\u4e0a\u7684\u8fdb\u884c\u7ec6\u8282\u8865\u5145\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","title":"\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","text":"

\u8fd9\u4e00\u90e8\u5206\u7684\u8be6\u7ec6\u5185\u5bb9\u5df2\u7ecf\u5728 \u4e0a\u4e00\u7ae0 \u4ecb\u7ecd\u8fc7\u4e86\uff0c\u5728\u8fd9\u91cc\uff0c\u4e3a\u4e86\u7b80\u5316\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6211\u4eec\u5168\u90e8\u91c7\u7528 \\(t_{pd}\\)\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u5ef6\u65f6","title":"\u89e6\u53d1\u5668\u5ef6\u65f6","text":"

\u89e6\u53d1\u5668\u5ef6\u65f6\u76f8\u6bd4\u7ec4\u5408\u7535\u8def\u5ef6\u65f6\u590d\u6742\u5f88\u591a\uff0c\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u4fdd\u8bc1\u91c7\u6837\u3002\u4e5f\u5c31\u662f\u8bf4\u5b83\u7684\u201c\u5ef6\u65f6\u201d\u5e76\u4e0d\u4ec5\u4ec5\u662f\u56e0\u4e3a\u7535\u4fe1\u53f7\u4f20\u64ad\u7684\u5ef6\u8fdf\uff0c\u8fd8\u6709\u4e3a\u4e86\u4fdd\u8bc1\u4fe1\u53f7\u7a33\u5b9a\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u3002

\u5927\u81f4\u6765\u8bf4\u6709\u4e09\u4e2a\u90e8\u5206\uff1a

\u4e00\u7bc7\u4ecb\u7ecd Setup Time \u548c Hold Time \u7684 \u6587\u7ae0\u3002

\u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\u4e0d\u540c\uff0c\u4e3b\u8981\u7684 Setup Time \u4e5f\u4e0d\u540c\uff1a

\u5176\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684\u4e00\u4e9b\u70b9\u662f\uff1a

  1. \u8fd9\u51e0\u4e2a\u65f6\u95f4\u70b9\u8d77\u70b9/\u7ec8\u70b9\u90fd\u662f\u89e6\u53d1\u8fb9\u7f18\uff1b
  2. Propagation Time \u4e00\u5b9a\u957f\u4e8e Hold Time\uff0c\u56e0\u6b64\u5728\u8ba1\u7b97\u7535\u8def\u5ef6\u8fdf\u65f6\u53ea\u8003\u8651 Propagation Time\uff1b
  3. Pulse-trigger \u548c Edge-trigger \u5728\u8868\u73b0\u4e0a\u7684\u533a\u522b\u5728\u4e8e Setup Time\uff0c\u524d\u8005\u9700\u8981\u8986\u76d6\u6574\u4e2a pulse(pos or neg)\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u677e\u5f1b\u65f6\u95f4","title":"\u677e\u5f1b\u65f6\u95f4","text":"

\u5b9e\u9645\u4e0a\u8fd9\u5c31\u662f\u7ed9\u6574\u4e2a\u7535\u8def\u7684\u4e00\u4e2a\u201c\u5bb9\u5dee\u201d\u65f6\u95f4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u8bef\u5dee\uff0c\u4f46\u662f\u7531\u4e8e\u901a\u8fc7\u524d\u4e24\u8005\u8ba1\u7b97\u51fa\u6765\u7684\u662f\u6700\u77ed\u65f6\u95f4\uff0c\u6240\u4ee5\u677e\u5f1b\u65f6\u95f4\u5fc5\u5b9a\u975e\u8d1f\u3002\uff08\u4e0d\u80fd\u5012\u6263\uff01\uff09

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","title":"\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","text":"

\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u8ba1\u7b97\u5b9e\u9645\u4e0a\u662f\u4e3a\u4e86\u8ba1\u7b97\u65f6\u5e8f\u7535\u8def\u8fd0\u4f5c\u7684\u6700\u5927\u9891\u7387\u4ee5\u8bbe\u8ba1\u65f6\u949f\u9891\u7387\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7b97\u51fa\u7535\u8def\u80fd\u591f\u7a33\u5b9a\u5de5\u4f5c\u7684\u6700\u5c0f\u65f6\u949f\u671f\u3002

\u5176\u8ba1\u7b97\u9075\u5faa\u4e00\u5b9a\u65b9\u6cd5\uff1a

\u56fe\u4e2d \\(t_{pd,FF}\\) \u6307\u89e6\u53d1\u5668\u7684 propagation time\uff0c\\(t_{COMB}\\) \u6307\u7ec4\u5408\u7535\u8def\u7684\u603b\u4f20\u64ad\u65f6\u95f4\uff08\u4e00\u822c\u60c5\u51b5\u4e0b \\(t_{COMB} = \\max{\\sum_i t_{pd,gate_i}}\\)\uff09\uff0c\\(t_{s}\\) \u6307\u89e6\u53d1\u5668\u7684 setup time\uff0c\\(t_{slack}\\) \u8868\u793a\u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\u3002

\uff08\u5047\uff09\u7ecf\u9a8c\u4e4b\u8c08

\u4e00\u822c\u4ece\u4e00\u4e2a FF \u7684\u8f93\u51fa\u51fa\u53d1\u5230 FF \u7684\u8f93\u5165\u7ed3\u675f\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/","title":"Chap 5 Digital Hardware Implementation","text":"

\u7ea6 1303 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u6ce8\u610f

\u672c\u7ae0\u8282\u5728\u8865\u5929\u4e2d\u5b8c\u6210\uff0c\u5185\u5bb9\u53ef\u80fd\u6bd4\u8f83\u7b80\u7565\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u53ef\u91cd\u7f16\u7a0b\u6280\u672f","title":"\u53ef\u91cd\u7f16\u7a0b\u6280\u672f","text":"

\u53ef\u91cd\u7f16\u7a0b\u6280\u672f(programmable implementation technologies)

\u76f4\u63a5\u66f4\u6539\u7535\u8def\u6765\u4fee\u6539\u7535\u8def\u529f\u80fd\u88ab\u79f0\u4e3a\u786c\u7f16\u7a0b\uff0c\u800c\u53ef\u91cd\u53d8\u6210\u6280\u672f\u8ba9\u6211\u4eec\u80fd\u591f\u4e0d\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u7684\u60c5\u51b5\u4e0b\uff0c\u5b9e\u73b0\u903b\u8f91\u529f\u80fd\u7684\u91cd\u65b0\u7f16\u8f91\u3002

FPGA

\u73b0\u573a\u53ef\u7f16\u7a0b\u903b\u8f91\u95e8\u9635\u5217(Field Programmable Gate Array, FPGA) - \u67e5\u627e\u8868(lookup table, LUT)

\u7f16\u7a0b\u6280\u672f(programming technologies) \u5728\u786c\u4ef6\u5c42\u9762\u6709\u4e09\u79cd\u5b9e\u73b0\u624b\u6bb5\uff1a

\u8bfe\u7a0b\u4e2d\u4ecb\u7ecd\u7684\u53ef\u91cd\u7f16\u7a0b\u7684\u5668\u4ef6\u4e3b\u8981\u6709\u5982\u4e0b\u56db\u79cd\uff1a

\u524d\u4e09\u8005\u90fd\u53ea\u80fd\u91cd\u5199\u4e00\u6b21\uff0c\u5982\u4e0b\u662f\u5b83\u4eec\u7684\u91cd\u5199\u5185\u5bb9\uff1a

\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

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u903b\u8f91\u7b26\u53f7\u4ecb\u7ecd","title":"\u903b\u8f91\u7b26\u53f7\u4ecb\u7ecd","text":"

Buffer

\u7b80\u5316\u8868\u793a\u4e00\u4e2a\u53d8\u91cf\u7684\u81ea\u8eab\u548c\u5176\u975e\uff1b

Wire connecting

\u5728\u53ef\u7f16\u7a0b\u903b\u8f91\u7535\u8def\u4e2d\uff0c\u7ebf\u7684\u8fde\u63a5\u4e0d\u518d\u53ea\u6709\u5355\u7eaf\u7684\u8fde\u901a\u548c\u4e0d\u8fde\u901a\u7684\u5173\u7cfb\uff1a

\u5bf9\u4e8e\u4e24\u6761\u76f8\u4ea4\u5bfc\u7ebf\uff1a

\u7279\u522b\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5143\u5668\u4ef6\u7684\u6240\u6709\u8f93\u5165\u90fd\u662f programmable\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u628a\u8fd9\u4e2a \u274c \u753b\u5230\u903b\u8f91\u95e8\u4e0a\uff08\u5982\u4e0b\u56fe e \u548c f\uff09\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#rom","title":"ROM","text":"

ROM \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

\u800c ROM \u7684\u5927\u5c0f\u5982\u4e0b\u8ba1\u7b97\uff08\u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff09\uff1a

\\[ \\begin{aligned} ROM\\;\\;size\\;\\;&=\\;\\;address\\;\\;width\\;\\;\\times\\;\\;word\\;\\;width&\\\\ &=\\;\\;2^2\\;\\;\\times\\;\\;4\\;\\;=\\;\\;16\\;\\;bit& \\end{aligned} \\] eg

\u66f4\u6e05\u6670\u7684\u8868\u793a\u5176\u5185\u90e8\u903b\u8f91\u7684\uff0c\u53ef\u4ee5\u5c06 ROM \u5199\u6210\u8fd9\u6837\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pal","title":"PAL","text":"

\u53ef\u91cd\u7f16\u7a0b\u8f93\u5165\u7ec4\u5408\u6765\u5f97\u5230\u56fa\u5b9a\u8f93\u51fa\u3002

\u5176\u5177\u6709\u4e00\u4e2a\u7f3a\u9677\u662f\uff0c\u56e0\u4e3a\u8868\u8fbe\u51fd\u6570\u7684\u65b9\u6cd5\u4e0d\u662f\u901a\u8fc7 SOM \u6216\u8005 POM \u7684\u5f62\u5f0f\uff0c\u6240\u4ee5\u4e0d\u4e00\u5b9a\u80fd\u591f\u5b8c\u5907\u8868\u8fbe\u51fd\u6570\u3002

\u5728\u6b64\u57fa\u7840\u4e0a\u7684\u4e00\u4e2a\u6539\u8fdb\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\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pla","title":"PLA","text":"

\u4e0e PAL \u7684\u533a\u522b\u5728\u4e8e\uff0c\u5728\u8f93\u51fa\u7684\u65f6\u5019\u4e5f\u80fd\u5bf9\u8f93\u51fa\u7ec4\u5408\u8fdb\u884c\u91cd\u7f16\u7a0b\u3002

\u5176\u540c PAL \u4e00\u6837\u5177\u6709\u4e00\u4e2a\u7f3a\u9677\u662f\uff0c\u56e0\u4e3a\u8868\u8fbe\u51fd\u6570\u7684\u65b9\u6cd5\u4e0d\u662f\u901a\u8fc7 SOM \u6216\u8005 POM \u7684\u5f62\u5f0f\uff0c\u6240\u4ee5\u4e0d\u4e00\u5b9a\u80fd\u591f\u5b8c\u5907\u8868\u8fbe\u51fd\u6570\u3002

\u5728\u57fa\u7840\u4e0a\u4e00\u4e2a\u6539\u8fdb\u662f\u5728\u8f93\u51fa\u7684\u65f6\u5019\u518d\u505a\u4e00\u6b21\u5f02\u6216\uff08\u4e0d\u7528\u975e\u95e8\u4f53\u73b0\u4e86\u53ef\u91cd\u7f16\u7a0b\u7684\u601d\u60f3\uff09\uff0c\u4ee5\u4ea7\u751f\u65b0\u7684\u9879\uff0c\u6765\u5f25\u8865\u9879\u4e0d\u8db3\u7684\u95ee\u9898\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u51fa\u73b0\u4e86\u65b0\u7684\u9879\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#lookup-tables","title":"Lookup Tables","text":"

\u901a\u8fc7\u8ba9\u6570\u636e\u6e90\u63a5\u5185\u5b58\uff0c\u5e76\u901a\u8fc7\u4fee\u6539\u771f\u503c\u8868\u5185\u7684\u503c\uff0c\u5373\u4fee\u6539\u5185\u5b58\u91cc\u7684\u503c\uff0c\u6765\u5b9e\u73b0\u6570\u636e\u6e90\u7684\u53d8\u5316\uff0c\u6765\u6539\u53d8 MUX \u7684\u884c\u4e3a\u3002

\u4f46\u662f\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u51fd\u6570\u8f93\u5165\u7684\u6570\u91cf\u4f1a\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u901a\u8fc7\u7075\u6d3b\u7ec4\u5408\u7684\u65b9\u6cd5\uff08\u6bd4\u5982\u901a\u8fc7\u56db\u9009\u4e8c\u9009\u4e00\u7684\u65b9\u5f0f\uff0c\u7528\u4e09\u4e2a\u4e8c\u9009\u4e00\u7684 MUX \u6765\u5b9e\u73b0\u56db\u9009\u4e00\uff09\u6765\u5b9e\u73b0\u591a\u8f93\u5165\u3002

\u5e38\u89c1\u7684 LUT \u5927\u5c0f\u4ee5 16bits \u6216 64bits \u7684 4 \u8f93\u5165\u6216 6 \u8f93\u5165\u4e3a\u4e3b\u3002

\u7531\u4e8e LUT \u5b58\u7684\u672c\u8d28\u4e0a\u662f\u771f\u503c\u8868\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u8f93\u5165\u7b26\u5408\u8981\u6c42\u7684\u903b\u8f91\u51fd\u6570\u3002

\u6240\u4ee5\uff0c\u95ee\u9898\u5c31\u53d8\u5316\u4e3a\u5982\u4f55\u7528\u8f83\u5c0f\u7684 LUT \u6765\u7ec4\u5408\u5b9e\u73b0\u590d\u6742\u7684\u903b\u8f91\u51fd\u6570\u3002

LUT \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

FPGA \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

\u5176\u4e3b\u8981\u5206\u4e3a\u4e09\u4e2a\u7ec4\u6210\u90e8\u5206\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#clb","title":"CLB","text":"

CLB \u662f FPGA \u4e2d\u7684\u57fa\u7840\u903b\u8f91\u5355\u5143\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#sm","title":"SM","text":"

\u901a\u8fc7\u76f8\u5f53\u590d\u6742\u7684\u7b97\u6cd5\uff0c SM \u4f1a\u6839\u636e\u76ee\u6807\u903b\u8f91\uff0c\u9009\u62e9\u94fe\u63a5\u4e0d\u540c\u7684 CLB \u4ee5\u5b9e\u73b0\u590d\u6742\u903b\u8f91\u3002

\u5b83\u5177\u6709\u8fd9\u4e9b\u57fa\u672c\u5c5e\u6027\uff1a

  1. Flexibility: \u8bc4\u4f30\u4e00\u6761\u7ebf\u53ef\u4ee5\u8fde\u63a5\u5230\u591a\u5c11\u7ebf\uff1b
  2. Topology: \u54ea\u4e9b\u7ebf\u53ef\u4ee5\u88ab\u8fde\u63a5\u5230\uff1b
  3. Routability: \u6709\u591a\u5c11\u56de\u8def\u53ef\u4ee5\u88ab\u8def\u7531\uff1b

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#iob","title":"IOB","text":"

IOB \u7528\u6765\u5bf9\u5916\u90e8\u8bbe\u5907\u8fdb\u884c\u8fde\u63a5\uff0c\u7528\u6765\u63a7\u5236\u8f93\u5165\u548c\u8f93\u51fa\u3002

eg for FPGA

\u901a\u8fc7 FPGA \u5b9e\u73b0 \\(f=x_1x_2+\\overline{x_2x_3}\\)\uff1a

\u5206\u89e3\u95ee\u9898\uff1a\\(f_1 = x_1x_2,\\;\\;f_2=\\overline{x_2x_3},\\;\\;f=f_1+f_2\\)\u3002

\u5728\u8f6f\u4ef6\u5c42\u9762\u7f16\u7a0b\u5b8c\u540e\uff0c\u4f1a\u751f\u6210\u4f4d\u6d41\u6587\u4ef6(bitfile)\uff0c\u4e0b\u8f7d\u5230\u677f\u65f6\u4f1a\u66f4\u65b0 FPGA \u4e2d\u7684\u5185\u5bb9\u3002

\u7ec4\u5408\u51fd\u6570\u7684\u5b9e\u73b0\u65b9\u6cd5

\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u4e0d\u7ba1\u662f\u53ef\u91cd\u7f16\u7a0b\u8fd8\u662f\u4e0d\u53ef\u91cd\u7f16\u7a0b\uff0c\u90fd\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u8fdb\u884c\u4e00\u6b21\u5c0f\u7ed3\uff1a

  1. Decoders & OR gates
    • \u5c06\u8bd1\u7801\u51fa\u6765\u7684\u9700\u8981\u7684\u76ee\u6807\u7ec4\u5408\u90fd OR \u5728\u4e00\u8d77\uff1b
  2. MUXs
    • \u901a\u8fc7\u591a\u8def\u9009\u62e9\u5668\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\uff1b
  3. ROMs
  4. PALs
  5. PLAs
  6. LUTs
"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/","title":"Chap 6 Registers & Register Transfers","text":"

\u7ea6 6700 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 22 \u5206\u949f

"},{"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":"

\u4f46\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u5982\u56fe\u7684\u5bc4\u5b58\u5668\u5728\u6bcf\u4e2a\u65f6\u949f\u90fd\u5141\u8bb8\u8f7d\u5165\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u90fd\u4f1a\u6539\u53d8\u4e3a\u8f93\u5165\u3002\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5373\u4f7f\u6211\u4eec\u4e0d\u7ba1\u5b83\u5b83\u4e5f\u80fd\u4fdd\u6301\u4e4b\u524d\u7684\u503c\uff0c\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u6848\u3002

\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 = 0\\)\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

\u5bf9\u4e8e n bits \u7684\u5bc4\u5b58\u5668\u5355\u5143\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0\u5176 1 bit \u7684\u5bc4\u5b58\u5668\u5355\u5143\uff0c\u5e76\u590d\u5236 n \u4efd\u5b9e\u73b0\u3002

\u8bbe\u8ba1\u5bc4\u5b58\u5668\u5355\u5143\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5bc4\u5b58\u5668\u5355\u5143\u8fdb\u884c\u5b9a\u4e49\u3002\u800c\u6307\u5b9a(Specify)\u4e00\u4e2a\u5bc4\u5b58\u5668\u5355\u5143\u7684\u529f\u80fd\u7684\u4e3b\u8981\u6709\u8fd9\u4e9b\u65b9\u9762\uff1a

\u5728\u5b9e\u9645\u5b9e\u73b0\u65f6\uff0c\u5206\u4e3a MUX \u5b9e\u73b0\u548c\u65f6\u5e8f\u903b\u8f91\u5b9e\u73b0\u4e24\u79cd\u65b9\u6cd5\u3002

\u524d\u8005\u5c31\u662f#\u57fa\u4e8e Mux \u5b9e\u73b0\u4f20\u8f93\u4e2d\u5c06\u8981\u63d0\u5230\u7684\u90a3\u6837\uff0c\u5173\u4e8e\u4e0a\u9762\u54ea\u4e9b\u5185\u5bb9\u5728\u8be5\u5c0f\u8282\u4e2d\u7684\u4f53\u73b0\u5982\u4e0b\u56fe\uff1b

\u4e5f\u5c31\u662f\u901a\u8fc7\u5206\u522b\u5b9e\u73b0\u903b\u8f91\uff0c\u7136\u540e\u901a\u8fc7\u63a7\u5236\u4fe1\u53f7\u9009\u62e9\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\uff08\u51b3\u5b9a\u6307\u4ee4\u7684\u5e8f\u5217\uff09\u6570\u636e\u901a\u8def(Datapath)\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002

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\u4f4d\u79fb(shift)\uff08\u5173\u4e8e\u8fd9\u91cc\u7684shift\u7684\u542b\u4e49\u6211\u5b58\u7591\uff09 \u548c \u8ba1\u6570(count) \u7b49\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u5bc4\u5b58\u5668\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u79fb\u52a8\u4e86\u7684\u52a0\u5de5\uff0c\u88ab\u79f0\u4e3a\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c(Register Transfer Operations)\uff0c\u5b83\u4eec\u4e3b\u8981\u5305\u542b\u8fd9\u4e09\u4e2a\u90e8\u5206\uff1a

  1. \u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u96c6\u5408\uff1b
  2. \u5bf9\u4e8e\u6570\u636e\u7684\u64cd\u4f5c\uff1b
  3. \u76d1\u7763\u64cd\u4f5c\u5e8f\u5217\u7684\u63a7\u5236\uff1b

\u5176\u4e2d\uff0c\u6700\u57fa\u7840\u7684\u90a3\u90e8\u5206\u64cd\u4f5c\u88ab\u79f0\u4e3a\u5fae\u64cd\u4f5c(microoperation)\uff0c\u5b83\u4eec\u662f\u5b9e\u73b0\u590d\u6742\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982\u5c06 R1 \u7684\u6570\u636e\u8f7d\u5165 R2\uff0c\u5c06 R1 \u548c R2 \u76f8\u52a0\uff0c\u6216\u662f\u81ea\u589e R1 \u7b49\u3002\u5b83\u4eec\u901a\u5e38\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\u64cd\u4f5c--\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c & \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\u5904\u7406\u7684\u662f\u6570\u636e\u4e4b\u95f4\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\u4e0d\u786e\u5b9a\uff0c\u4e5f\u8bb8\u53ef\u80fd\u90fd\u4e3a\u96f6\uff1f\u6211\u611f\u89c9\u53d6\u51b3\u4e8e\u4fdd\u6301\u7684\u5b9e\u73b0\u3002\uff09\u6765\u8868\u793a\u9009\u62e9\u54ea\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d \\(K_0\\sim K_{n-1}\\)\uff09\uff0c\u518d\u901a\u8fc7 Encoder \u5c06\u5b83\u4eec\u7f16\u7801\u4f5c\u4e3a MUX \u7684\u8f93\u5165\u9009\u62e9\u4fe1\u53f7\uff08\u4e0b\u56fe\u4e2d \\(S_m \\sim S_0\\)\uff09\uff0c\u4ece\u591a\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d 0 \\sim k \\sim (n-1)$\uff09\u4e2d\u9009\u62e9\u5bf9\u5e94\u7684\u6e90\uff0c\u5e76\u8f93\u51fa\uff0c\u7ed9\u5230 R0\uff1b\u6b64\u5916\uff0c\u5c06\u9009\u62e9\u4fe1\u53f7\u90fd\u6216\u8d77\u6765\uff0c\u4f5c\u4e3a R0 \u7684 Load \u4fe1\u53f7\u8f93\u5165\u3002

\u5176\u4e2d MUX \u7684 \\(k \\sim (n-1)\\) \u5b9e\u73b0\u4e86\u8f6c\u79fb\u64cd\u4f5c\u3002

\u5c0f\u7ed3

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0cMUX \u5b9e\u73b0\u4e3b\u8981\u7684\u5b9e\u73b0\u4e86\u591a\u5bf9\u4e00\u7684\u6570\u636e\u4f20\u8f93\u95ee\u9898\u3002\u5982\u679c\u6211\u4eec\u5355\u5355\u4f7f\u7528 MUX \u6765\u5b8c\u6210\u5bc4\u5b58\u5668\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u4e92\uff08\u5047\u8bbe\u6240\u6709\u5bc4\u5b58\u5668\u90fd\u80fd\u76f8\u4e92\u4f20\u8f93\u6570\u636e\uff09\uff0c\u90a3\u5c06\u8fd9\u4e2a\u6a21\u578b\uff08\u56fe\u4f8b\u5728\u4e0b\u4e00\u5c0f\u8282\uff09\u62bd\u8c61\u540e\uff0c\u6211\u4eec\u5f97\u5230\u7684\u5c06\u662f\u4e00\u5f20\u201c\u5b8c\u5168\u56fe\u201d\uff0c\u7136\u800c\u5b83\u8089\u773c\u53ef\u89c1\u7684\u5f00\u9500\u5927\u3002

\u800c\u603b\u7ebf\u5219\u975e\u5e38\u5de7\u5999\u5730\u4f18\u5316\u4e86\u8fd9\u4e2a\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u4e0a\u4f4d\u66ff\u4ee3\u5173\u7cfb\uff09\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","title":"\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","text":"

\u5728\u4e0a\u4e00\u5c0f\u8282\u7684\u5c0f\u7ed3\u4e2d\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86 MUX \u5b9e\u73b0\u7684\u4f18\u52a3\uff0c\u4e5f\u63d0\u5230\u4e86\u603b\u7ebf(bus)\u4f20\u8f93\u7684\u4f18\u52bf\uff0c\u90a3\u4e48\u5b83\u5177\u4f53\u6765\u8bf4\u5176\u5b9e\u73b0\u65b9\u6cd5\u6709\u4e24\u79cd\u2014\u2014\u901a\u8fc7\u5171\u6709 MUX \u5b9e\u73b0\uff0c\u6216\u901a\u8fc7\u4e09\u6001\u95e8\u5b9e\u73b0\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5171\u6709-mux-\u5b9e\u73b0","title":"\u5171\u6709 MUX \u5b9e\u73b0","text":"

\u8ba9\u6211\u4eec\u4ee5\u4e09\u4e2a\u5bc4\u5b58\u5668\u7684\u6a21\u578b\u4e3a\u4f8b\uff0c\u5bf9\u6bd4\u901a\u8fc7\u4e13\u6709 MUX \u5b9e\u73b0\u548c\u901a\u8fc7\u5355\u4e00\u603b\u7ebf(single bus)\u5b9e\u73b0\u7684\u533a\u522b\uff1a

\u9996\u5148\u5bf9\u603b\u7ebf\u5b9e\u73b0\u8fdb\u884c\u8bf4\u660e\uff0c\u540c\u6837\u662f\u4f7f\u7528 MUX\uff0c\u4f46\u6b64\u65f6 MUX \u4e0d\u518d\u662f\u67d0\u4e2a\u5bc4\u5b58\u5668\u7684\u4e13\u6709\u903b\u8f91(dedicated logic)\uff0c\u800c\u662f\u4e09\u4e2a\u5bc4\u5b58\u5668\u5171\u540c\u4f7f\u7528\u7684\u5171\u6709\u903b\u8f91(shared logic)\u3002\u603b\u7ebf\u4e2d\u7684 MUX \u5728\u6240\u6709\u5bc4\u5b58\u5668\u7684\u8f93\u5165\u4e2d\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\uff0c\u5e76\u5c06\u5b83\u8f93\u51fa\uff0c\u7ed9\u5230\u6240\u6709\u5bc4\u5b58\u5668\uff1b\u800c\u603b\u7ebf\u901a\u8fc7\u63a7\u5236 Load \u4fe1\u53f7\u6765\u9009\u62e9\u8ba9\u54ea\u4e2a\uff08\u6216\u54ea\u4e9b\uff09\u5bc4\u5b58\u5668\u5f97\u5230\u8fd9\u4e2a\u4fe1\u53f7\u3002

\u63a5\u4e0b\u6765\u8fdb\u884c\u5bf9\u6bd4\uff0c\u4ee5\u603b\u7ebf\u5b9e\u73b0\u4e3a\u4e3b\u4f53\uff0c\u4e0e MUX \u5b9e\u73b0\u5bf9\u6bd4\uff1a

\u800c\u56e0\u4e3a\u8fd9\u4e9b\u7279\u70b9\uff0c\u6211\u4eec\u9700\u8981\u8bc4\u4f30\u6211\u4eec\u7684\u9700\u6c42\uff0c\u9009\u62e9\u5408\u9002\u7684\u7ed3\u6784\u6765\u5b9e\u73b0\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4e09\u6001\u95e8\u5b9e\u73b0","title":"\u4e09\u6001\u95e8\u5b9e\u73b0","text":"

\u4e09\u6001\u95e8\u7684\u76f8\u5173\u5185\u5bb9\u5df2\u7ecf\u5728\u524d\u9762\u4ecb\u7ecd\uff0c\u4f20\u8f93\u95e8\u5728\u8fd9\u91cc\uff0c\u5173\u4e8e\u672c\u5c0f\u8282\u7684\u77e5\u8bc6\uff0c\u53ef\u4ee5\u91cd\u70b9\u5173\u6ce8#\u4e09\u6001\u95e8/\u788e\u788e\u5ff5\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\u7684\u4e09\u6001\u95e8\u53ea\u662f\u628a\u7ebf\u5206\u5c94\u7684\u5730\u65b9\u79fb\u52a8\u5230\u4e86\u5bc4\u5b58\u5668\u9644\u8fd1\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4e0d\u5982\u8bf4\u662f\u8282\u7701\u4e86\u5bfc\u7ebf\u7684\u957f\u5ea6\u3002\u4f46\u662f\u968f\u7740\u8f93\u5165\u7684\u589e\u52a0\uff0cMUX \u7684\u7ed3\u6784\u4f1a\u8d8a\u6765\u8d8a\u590d\u6742\u4e14\u9700\u8981\u91cd\u65b0\u8bbe\u8ba1\uff0c\u4f46\u4e09\u6001\u95e8\u53ea\u9700\u8981\u91cf\u7684\u589e\u52a0\u5c31\u884c\u4e86\uff0c\u6240\u4ee5\u786e\u5b9e\u662f\u66f4\u52a0\u5438\u5f15\u4eba\u3002\uff08\u5f53\u7136\uff0c\u867d\u7136\u4e66\u4e2d\u6ca1\u8bf4\uff0c\u4f46\u662f\u6211\u89c9\u5f97 Enable \u5fc5\u987b at most one-hot\uff0c\u800c\u8fd9\u90e8\u5206\u7684\u903b\u8f91\u5bf9\u4e8e\u4e24\u4e2a\u5b9e\u73b0\u65b9\u6cd5\u6765\u8bf4\u662f\u4e00\u6837\u7684\uff09

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","title":"\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","text":"

A microoperation is an elementary operation performed on data stored in registers or in memory.

\u5fae\u64cd\u4f5c\u4e00\u822c\u5206\u4e3a\u8fd9\u56db\u79cd\uff1a

  1. \u8f6c\u79fb\uff0ctransfer microoperations\uff0c\u5c06\u6570\u636e\u4ece\u4e00\u4e2a\u5bc4\u5b58\u5668\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u5bc4\u5b58\u5668\uff1b
  2. \u7b97\u672f\uff0carithmetic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u7b97\u672f\u8fd0\u7b97\u64cd\u4f5c\uff1b
  3. \u903b\u8f91\uff0clogic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u903b\u8f91\u8fd0\u7b97\u64cd\u4f5c\uff1b
  4. \u4f4d\u79fb\uff0cshift microoperations\uff0c\u5bf9\u6570\u636e\u7684\u4f4d\u79fb\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\u4f4d\u79fb\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\u4f4d\u79fb\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/#\u4f4d\u79fb","title":"\u4f4d\u79fb","text":"

\u4f4d\u79fb\u7684\u5b9e\u73b0\u901a\u8fc7\u4f4d\u79fb\u5bc4\u5b58\u5668(Shift Register, SHR)\u5b9e\u73b0\u3002

\u5f15\u5165

\u4f4d\u79fb\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\u4f4d\u79fb\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":"

\u4f4d\u79fb\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\u4f4d\u79fb\u7684\u7ed3\u679c\u3002

\u4e32\u884c\u4f4d\u79fb\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\u4f4d\u79fb\uff0c\u6211\u4eec\u5f53\u7136\u9700\u8981\u586b\u5145 ? \u7684\u503c\uff0c\u4e0d\u8fc7\u8fd9\u90fd\u662f\u5c0f\u4e8b\u60c5\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5e76\u884c\u5316","title":"\u5e76\u884c\u5316","text":"

\u5e76\u884c\u5316\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff0c\u5373\u5e76\u884c\u8f93\u51fa(parallel output)\u548c\u5e76\u884c\u8f7d\u5165(parallel load)\uff0c\u5206\u522b\u5bf9\u5e94\u7740 \u5728\u540c\u4e00\u4e2a\u65f6\u95f4\u5468\u671f\u5185\u5f97\u5230\u6bcf\u4e00\u4e2a FF \u7684\u7ed3\u679c\u548c\u5bf9\u6bcf\u4e00\u4e2a FF \u8f7d\u5165\u6570\u636e\u3002

\u5e76\u884c\u8f93\u51fa\u7684\u5b9e\u73b0\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u7ed9\u6bcf\u4e00\u4e2a FF \u7684\u8f93\u51fa\u5f15\u51fa\u4e00\u6761\u7ebf\u5c31\u884c\u4e86\uff0c\u5b83\u4e0e\u4e32\u884c\u8f93\u51fa\u53ef\u4ee5\u76f4\u63a5\u540c\u65f6\u5b58\u5728\uff1b\u800c\u5e76\u884c\u8f93\u5165\u5219\u4e0e\u4e32\u884c\u8f93\u5165\u51b2\u7a81\uff0c\u4e00\u6b21\u53ea\u80fd\u5b9e\u73b0\u5176\u4e2d\u4e00\u4e2a\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e9b\u63a7\u5236\u7535\u8def\uff1a

\u770b\u8d77\u6765\u6709\u70b9\u590d\u6742\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u903b\u8f91\u8fd8\u662f\u5f88\u6e05\u6670\u7684\u3002

\u603b\u548c\u6765\u8bf4\uff0c\u5c31\u662f\uff1a

\\[ \\begin{aligned} Shift :& Q\\leftarrow \\mathrm{sl}\\; Q \\\\ \\overline{Shift}\\cdot Load :& Q\\leftarrow D \\\\ \\overline{Shift}\\cdot \\overline{Load} :& Q\\leftarrow Q \\end{aligned} \\]

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u53cc\u5411\u4f4d\u79fb\u5bc4\u5b58\u5668","title":"\u53cc\u5411\u4f4d\u79fb\u5bc4\u5b58\u5668","text":"

\u4e0a\u9762\u4ecb\u7ecd\u7684\u4f4d\u79fb\u5bc4\u5b58\u5668\u968f\u7740\u65f6\u949f\u5468\u671f\u7684\u4f9b\u7ed9\uff0c\u53ea\u80fd\u4e0d\u53ef\u9006\u3001\u5355\u5411\u5730\u8fdb\u884c\u4f4d\u79fb\uff0c\u8fd9\u79cd\u4f4d\u79fb\u5bc4\u5b58\u5668\u79f0\u4e3a\u65e0\u5411\u4f4d\u79fb\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\u4f4d\u79fb\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\u4f4d\u79fb\u4e00\u822c\u6307\u7684\u662f\u4e00\u4e2a\u53cc\u76ee\u64cd\u4f5c\uff0c\u5373\u53ef\u4ee5\u6307\u5b9a\u4f4d\u79fb\u591a\u5c11\u4f4d\uff0c\u8fd9\u4e2a\u53c2\u6570\u88ab\u79f0\u4e3a\u4f4d\u79fb\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\u4f4d\u79fb\u91cf\u7684\u4f4d\u79fb\u5b9e\u73b0\uff0c\u5728\u6211\u4eec\u63d0\u5230\u7684\u5b9e\u73b0\u4e2d\uff0c\u6307\u7684\u5c31\u662f\u6211\u4eec\u786c\u4ef6\u53ea\u5b9e\u73b0\u300c\u4e00\u4f4d\u4f4d\u79fb\u300d\uff0c\u5e76\u901a\u8fc7\u5faa\u73af\u5b9e\u73b0\u300c\u4efb\u610f\u4f4d\u4f4d\u79fb\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)\uff0c0,0\uff0c...

\u4e8e\u662f\uff0c\u4e00\u4e2a 4-Bit \u884c\u6ce2\u8ba1\u6570\u5668\u7684\u903b\u8f91\u56fe\u5c31\u5982\u4e0b\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u4f18\u70b9\u662f\u7535\u8def\u7b80\u5355\uff0c\u6210\u672c\u4f4e\uff1b\u4f46\u662f\u7f3a\u70b9\u4e5f\u5f88\u660e\u663e\uff0c\u65e2\u7136\u5b83\u4e0e\u540c\u6b65\u8ba1\u6570\u5668\u76f8\u533a\u5206\uff0c\u5c31\u8bf4\u660e\u5b83\u4e0d\u662f\u540c\u6b65\u7535\u8def\uff0c\u6bcf\u4e00\u4e2a FF \u90fd\u4f1a\u6709\u4f20\u64ad\u5ef6\u65f6\uff0c\u968f\u7740\u8ba1\u6570\u8303\u56f4\u589e\u5927\uff0c\u603b\u4f20\u64ad\u5ef6\u65f6\u4e5f\u4f1a\u589e\u52a0\uff0c\u800c\u4e3a\u4e86\u8ba9\u7535\u8def\u6b63\u5e38\u5de5\u4f5c\uff0c\u65f6\u949f\u9891\u7387\u4e5f\u8981\u56e0\u6b64\u4e0b\u964d\u3002

\u7531\u4e8e\u8fd9\u4e9b\uff0c\u4e66\u4e0a\u5bf9\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u8bc4\u4ef7\u662f\u591a\u6570\u60c5\u51b5\u4e0b\u884c\u6ce2\u52a0\u6cd5\u5668\u53ea\u4f1a\u5728\u4f4e\u529f\u8017\u7535\u8def\u4e2d\u88ab\u91c7\u7528\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u540c\u6b65\u8ba1\u6570\u5668","title":"\u540c\u6b65\u8ba1\u6570\u5668","text":"

\u540c\u6b65\u8ba1\u6570\u5668\u4ece\u5b9e\u73b0\u81ea\u589e\u7684\u539f\u7406\u4e0a\u6765\u8bf4\uff0c\u548c\u884c\u6ce2\u8ba1\u6570\u5668\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u540c\u6837\u662f\u5728\u4e0a\u4e00\u4e2a FF \u5b8c\u6210\u4e00\u6b21\u7ffb\u8f6c\u7684\u65f6\u5019\u8ba9\u4e0b\u4e00\u4e2a FF \u53d8\u5316\u3002\u53ea\u4e0d\u8fc7\u540c\u6b65\u8ba1\u6570\u5668\u4e0d\u662f\u63a7\u5236\u65f6\u949f\uff0c\u800c\u662f\u63a7\u5236\u300cFF \u5185\u7684\u503c\u662f\u5426\u53d6\u53cd\u300d\u6765\u5b9e\u73b0\uff0c\u800c\u5b83\u662f\u901a\u8fc7\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u7684\u3002

\u6211\u4eec\u77e5\u9053\uff0c\\(0 \\;\\mathrm{XOR}\\; X = X\\)\uff0c\u800c \\(1 \\;\\mathrm{XOR}\\; X = \\overline{X}\\)\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236 XOR \u7684\u67d0\u4e2a\u8f93\u5165\u662f 0 \u8fd8\u662f 1 \u6765\u5b9e\u73b0\u53d6\u53cd\u8fd8\u662f\u4fdd\u6301\u7684\u5207\u6362\u3002

\u4e0d\u8fc7\u9700\u8981\u533a\u5206\u7684\u662f\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5728\u4e0a\u4e00\u4e2a FF \u53d8\u5316\u5b8c\u624d\u5f71\u54cd\u4e0b\u4e00\u4e2a\u7684\uff0c\u6240\u4ee5\u662f 1 \u53d8 0 \u65f6\u9700\u8981\u8fdb\u4f4d\uff1b\u800c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u6240\u6709 FF \u662f\u4e00\u8d77\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u53ea\u6709\u5728\u524d\u9762\u90fd\u662f 1 \u65f6\u5019\uff0c\u8868\u793a\u4e0b\u4e00\u523b\u5b83\u4eec\u90fd\u8981\u8fdb\u4f4d\u4e86\uff0c\u5f53\u524d FF \u624d\u8fdb\u4f4d\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5efa\u7acb\u5728\u524d\u4e00\u4e2a FF \u7684\u7ed3\u679c\u8fdb\u884c\u53d8\u5316\uff1b\u800c\u5e76\u884c\u52a0\u6cd5\u5668\u662f\u5efa\u7acb\u5728\u4e0a\u4e00\u523b\u6240\u6709\u5173\u8054 FF \u7684\u72b6\u6001\uff0c\u5bf9\u4e0b\u4e00\u72b6\u6001\u7684\u9884\u5224\u3002

\u5728\u8fd9\u57fa\u7840\u4e0a\uff0c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u81ea\u589e\u5668(incrementer)\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5b9e\u73b0\u65b9\u6cd5\uff1a

(b) \u7684\u84dd\u8272\u90e8\u5206\u66ff\u6362 (a) \u7684\u84dd\u6846\u90e8\u5206\u4e3a\u7b2c\u4e8c\u79cd\u3002\u4e24\u79cd\u5206\u522b\u4e3a \u95e8\u4e32\u884c\u5b9e\u73b0 \u548c \u95e8\u5e76\u884c\u5b9e\u73b0\u3002

\u4e24\u79cd\u5b9e\u73b0\u5176\u5b9e\u539f\u7406\u90fd\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u95e8\u4e32\u884c\u727a\u7272\u67d0\u4e9b\u60c5\u51b5\u4e0b\u7684\u8fd0\u884c\u6548\u7387\uff0c\u8282\u7ea6\u4e86\u95e8\u6210\u672c\uff1b\u800c\u95e8\u5e76\u884c\u63d0\u9ad8x\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\u8f93\u5165\u51fd\u6570\u53d8\u4e3a\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\u4f4d\u79fb\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":"

\u672a\u5b8c\u6210

Control Unit

\u91cd\u70b9\u770b\u4e66\u4e0a\u7684\u4f8b\u5b50\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/","title":"Chap 7 Memory Basics","text":"

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

\u6846\u67b6

"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-1-memory","title":"7-1 Memory","text":"

Two types of memories are used in various parts of a computer: random-access memory (RAM) and read-only memory (ROM). RAM accepts new information for storage to be available later for use. The process of storing new information in memory is referred to as a memory write operation. The process of transferring the stored information out of memory is referred to as a memory read operation. RAM can perform both the write and the read operations, whereas ROM, as introduced in Section 6-8, performs only read operations. RAM sizes may range from hundreds to billions of bits.

Memory is a collection of binary storage cells together with associated circuits needed to transfer information into and out of the cells.

"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-2-ram","title":"7-2 RAM","text":"

Memory cells can be accessed to transfer information to or from any desired location, with the access taking the same time regardless of the location, hence the name random-access memory. In contrast,serial memory, such as is exhibited by a hard drive, takes different lengths of time to access information, depending on where the desired location is relative to the current physical position of the disk.

word:

A word is an entity of bits that moves in and out of memory as a unit\u2014a group of 1s and 0s that represents a number, an instruction, one or more alphanumeric characters, or other binary-coded information.

A group of eight bits is called a byte.

Most computer memories use words that are multiples of eight bits in length. Thus, a 16-bit word contains two bytes, and a 32-bit word is made up of four bytes. The capacity of a memory unit is usually stated as the total number of bytes that it can store.

Communication between a memory and its environment is achieved through data input and output lines, address selection lines, and control lines that specify the direction of transfer of information.

Computer memory varies greatly in size. It is customary to refer to the number of words (or bytes) in memory with one of the letters K (kilo), M (mega), or G (giga). K is equal to 2^10, M to 2^20, and G to 2^30.

A word in memory is selected by its binary address. When a word is read or written, the memory operates on all 16 bits as a single unit.

The 1K * 16 memory of the figure has 10 bits in the address and 16 bits in each word. The number of address bits needed in memory is dependent on the total number of words that can be stored and is independent of the number of bits in each word. The number of bits in the address for a word is determined from the relationship 2^k >= m, where m is the total number of words and k is the minimum number of address bits satisfying the relationship.

The two operations that a random-access memory can perform are write and read. A write is a transfer into memory of a new word to be stored. A read is a transfer of a copy of a stored word out of memory.

The steps that must be taken for a write are as follows:

  1. Apply the binary address of the desired word to the address lines.
  2. Apply the data bits that must be stored in memory to the data input lines.
  3. Activate the Write input.

The memory unit will then take the bits from the data input lines and store them in the word specified by the address lines.The steps that must be taken for a read are as follows:

  1. Apply the binary address of the desired word to the address lines.
  2. Activate the Read input.

The memory will then take the bits from the word that has been selected by the address and apply them to the data output lines. The contents of the selected word are not changed by reading them.

...

To avoid destroying data in other memory words, it is important that this change occur after the signals on the address lines have become fixed at the desired values.

"},{"location":"cour_note/D2QD_DigitalDesign/glossary/","title":"\u8bcd\u6c47\u8868","text":"

\u7ea6 1051 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \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

\u8bfe\u7a0b\u4fe1\u606f

List

Lab

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/","title":"Lecture 1 | Introduction","text":"

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

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u4e3b\u8981\u4efb\u52a1","title":"CV \u7684\u4e3b\u8981\u4efb\u52a1","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u5e94\u7528","title":"CV \u7684\u5e94\u7528","text":"Application Examples "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u5b66\u672f\u5708\u6982\u51b5","title":"\u5b66\u672f\u5708\u6982\u51b5","text":"

CV \u9886\u57df\u7684\u51e0\u4e2a\u9876\u4f1a

\u56fe\u5f62\u5b66\u76f8\u5173\u7684\u9876\u4f1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u8bfe\u7a0b\u6982\u8ff0","title":"\u8bfe\u7a0b\u6982\u8ff0","text":"

Note

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u4ee3\u590d\u4e60","title":"\u7ebf\u4ee3\u590d\u4e60","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u6027\u53d8\u6362","title":"\u7ebf\u6027\u53d8\u6362","text":"

\u9996\u5148\uff0c\u4e00\u4e2a\u77e9\u9635\u5de6\u4e58\u4e00\u4e2a\u5411\u91cf\uff1a

\u5728\u8fd9\u79cd\u57fa\u7840\u4e0a\uff0c\u77e9\u9635\u4e58\u6cd5\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u7cfb\u5217\u5411\u91cf\uff08\u53f3\u4fa7\u77e9\u9635\uff09\u7ecf\u8fc7\u540c\u4e00\u4e2a\u53d8\u6362\u5f97\u5230\u65b0\u7684\u4e00\u7cfb\u5217\u5411\u91cf\u3002

Tips

\u5b9e\u9645\u4e0a\uff0c\u4ece\u5355\u4f4d\u77e9\u9635\u7684\u89d2\u5ea6\u4e5f\u53ef\u4ee5\u5f88\u597d\u7684\u7406\u89e3\u8fd9\u4ef6\u4e8b\uff1a

\\[ \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\]

\u6211\u4eec\u6765\u8bd5\u7740\u8fd0\u7528\u4e0a\u9762\u7684\u6280\u5de7\u6c42\u4e00\u4e2a\u65cb\u8f6c\u53d8\u6362\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u3002

\u9898\u9762\u7b54\u6848

\u5047\u8bbe\u8be5\u77e9\u9635\u8ba9\u76ee\u6807\u56fe\u5f62\u987a\u65f6\u9488\u65cb\u8f6c \\(\\theta\\) \uff0c\u5219\u5176\u8868\u8fbe\u5f0f\u4e3a\uff1f

\u6211\u4eec\u505a\u6b64\u5206\u6790\uff1a

\u56e0\u6b64\uff0c\u6839\u636e\u4e0a\u9762\u63d0\u5230\u7684\u6280\u5de7\uff0c\u65cb\u8f6c\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u4e3a\uff1a

\\[ R_{\\theta,clockwise} = \\begin{bmatrix} \\cos\\theta & \\sin\\theta \\\\ -\\sin\\theta & \\cos\\theta \\end{bmatrix} \\]

\u7279\u522b\u7684\uff0c\u5982\u679c\u662f\u9006\u65f6\u9488\uff0c\u7ed3\u679c\u5c31\u662f\uff1a

\\[ R_{\\theta,anti-clockwise} = \\begin{bmatrix} \\cos\\theta & -\\sin\\theta \\\\ \\sin\\theta & \\cos\\theta \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","title":"\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","text":"

\u4eff\u5c04\u53d8\u6362(Affine Transformations) \u4e3b\u8981\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u7ebf\u6027\u53d8\u6362\u548c\u5e73\u79fb\uff08\u6362\u8a00\u4e4b\uff0c\u4eff\u5c04\u53d8\u6362\u5e76\u4e0d\u662f\u7ebf\u6027\u53d8\u6362\uff09\uff0c\u5176\u6570\u5b66\u8868\u8ff0\u4e3a\uff1a

\\[ \\begin{bmatrix} x' \\\\ y' \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\end{bmatrix} \\]

\u4e3a\u4e86\u8ba9\u4eff\u5c04\u53d8\u6362\u4e5f\u80fd\u5199\u6210 \\(a=Mb\\) \u7684\u5f62\u5f0f\u4ee5\u7b80\u5316\u8fd0\u7b97\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 \\(n+1\\) \u7ef4\u5411\u91cf\u6765\u8868\u793a \\(n\\) \u7ef4\u70b9\uff0c\u5373\u4f7f\u7528\u9f50\u6b21\u5750\u6807(homogenous coordinates)\uff1a

\\[ \\begin{bmatrix} x'\\\\ y'\\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} a & b & t_x \\\\ c & d & t_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix} \\]

\u4e3a\u4ec0\u4e48\u662f \u201c1\u201d

\u8fd9\u91cc\u6211\u4eec\u4e0d\u7981\u629b\u51fa\u4e00\u4e2a\u7591\u95ee\uff0c\u4e3a\u4ec0\u4e48\u9f50\u6b21\u5750\u6807\u6dfb\u52a0\u7684\u7ef4\u5ea6\u4e2d\u8981\u586b\u5165 1 \u5462\uff1f\u5b83\u6709\u4ec0\u4e48\u542b\u4e49\u5417\uff1f\u5b83\u4e0d\u80fd\u662f 2 \u6216\u8005\u522b\u7684\u4ec0\u4e48\u4e1c\u897f\u5417\uff1f

\u7b54\u6848\u662f\uff0c\u5b83\u53ef\u4ee5\u662f\u522b\u7684\u4e1c\u897f\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u9700\u8981\u5bf9\u5b9a\u4e49\u8fdb\u884c\u4e00\u4e2a\u6269\u5c55\uff0c\u4ee5\u4f7f\u9f50\u6b21\u5750\u6807\u6709\u66f4\u5927\u7684\u7528\u5904\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","title":"\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","text":"

\u4f8b\u5982\uff0c\\((x,y)\\) \u5bf9\u5e94\u7684\u9f50\u6b21\u5750\u6807\u4e3a \\((x,y,1)\\)\uff0c\u5982\u679c\u4f60\u628a\u5b83\u60f3\u8c61\u6210\u4e09\u7ef4\u7a7a\u95f4\u4e2d\u7684\u70b9\uff0c\u4f1a\u53d1\u73b0\uff0c\u5982\u679c\u6539\u53d8 1 \u7684\u503c\uff0c\u5f97\u5230\u7684\u70b9\u7684\u8f68\u8ff9\u4f1a\u662f\u82e5\u5e72\u5f20\u5e73\u884c\u7684\u5e73\u9762\uff0c\u4e5f\u5c31\u662f\u8bf4\u4ed6\u4eec\u5728\u4e09\u7ef4\u7a7a\u95f4\u4e0b\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4eba\u4e3a\u7684\u5b9a\u4e49\u4e00\u4e2a\u6bcf\u4e00\u4e2a\u5e73\u9762\u5185\u7684\u70b9\u7684\u6620\u5c04\u5173\u7cfb\uff08\u6211\u4eec\u53ea\u8003\u8651\u7b2c\u4e00\u8c61\u9650\uff09\uff0c\u4ece\u539f\u70b9\u5f15\u4e00\u6761\u5c04\u7ebf\uff0c\u76f4\u7ebf\u4e0a\u4e0e\u6bcf\u4e00\u4e2a\u5e73\u9762\u7684\u4ea4\u70b9\u6211\u4eec\u90fd\u8ba4\u4e3a\u5bf9\u5e94\u7740\u4e8c\u7ef4\u5e73\u9762\u4e0a\u7684\u540c\u4e00\u70b9\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u7528 \\(n+1\\) \u7ef4\u7a7a\u95f4\u4e2d \u4ece\u539f\u70b9\u53d1\u51fa\u7684\u4e00\u6761 \u5c04\u7ebf \u6765\u63cf\u8ff0 \\(n\\) \u7ef4\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u70b9\u3002

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u5f0f\u5b50\u6765\u6982\u62ec\u6269\u5c55\u5b9a\u4e49\uff1a

\u800c\u5f15\u5165\u8fd9\u79cd\u60f3\u6cd5\u540e\uff0c\u6211\u4eec\u5c31\u77e5\u9053\u4e3a\u4ec0\u4e48\u901a\u8fc7\u9f50\u6b21\u5750\u6807\u5316\u5c31\u80fd\u628a\u5e73\u79fb\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u5c06 \\(n\\) \u7ef4\u70b9\u7684\u5e73\u79fb\u770b\u4f5c \\(n+1\\) \u7ef4\u5c04\u7ebf\u7684\u65cb\u8f6c\uff0c\u800c\u65cb\u8f6c\u663e\u7136\u662f\u4e00\u4e2a\u7ebf\u6027\u53d8\u6362\u3002

\u800c\u5173\u4e8e\u8be5\u6027\u8d28\u7684\u5176\u4ed6\u5e94\u7528\uff0c\u53ef\u4ee5\u770b Lecture 2 \u7684\u7b2c\u4e8c\u5c0f\u8282\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9006\u53d8\u6362","title":"\u9006\u53d8\u6362","text":"

\u7ebf\u6027\u53d8\u6362 \\(T\\) \u7684\u9006\u53d8\u6362(Inverse Transform)\u5c31\u662f\u5176\u53d8\u6362\u77e9\u9635\u7684\u9006 \\(T^{-1}\\)\uff0c\u663e\u7136\uff0c\u5e76\u4e0d\u662f\u6240\u6709\u53d8\u6362\u90fd\u662f\u53ef\u9006\u7684\u3002

\u5f62\u8c61\u5730\u7406\u89e3\uff0c\u4e00\u4e2a\u53d8\u6362\u77e9\u9635\u5982\u679c\u4e0d\u6ee1\u79e9\uff08\u4e0d\u53ef\u9006\uff09\uff0c\u90a3\u4e48\u5c31\u4f1a\u6709\u51e0\u4e2a\u57fa\u5728\u53d8\u6362\u4e2d\u5408\u5e76\uff0c\u6216\u8005\u8bf4\u591a\u4e2a\u70b9\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u70b9\uff0c\u5bfc\u81f4\u65e0\u6cd5\u8fd8\u539f\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","title":"\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","text":"

\u884c\u5217\u5f0f(Determinant) \u7684\u503c\u7b49\u4e8e\u8fd9\u4e2a\u65b9\u9635\u4e2d\u7684\u5411\u91cf\u5bf9\u5e94\u7684 \u5e73\u884c\u56fe\u5f62/\u51e0\u4f55\u4f53/... \u7684 \u9762\u79ef/\u4f53\u79ef/...

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","title":"\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","text":"

\u7279\u5f81\u5411\u91cf(eigenvector)\u548c\u7279\u5f81\u503c(eigenvalue)\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

\u5bf9\u4e8e\u77e9\u9635 \\(A\\in R^{N\\times N}\\)\uff0c\u5982\u679c\u6709\u5411\u91cf \\(v\\in R^{N}\\) \u548c\u5b9e\u6570 \\(\\lambda \\not = 0\\)\uff0c\u6ee1\u8db3\uff1a

\\[ Av = \\lambda v \\]

\u5219\u79f0 \\(v\\) \u662f\u77e9\u9635 \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u5e94\u7684\u7279\u5f81\u503c\u4e3a \\(\\lambda\\)\u3002

\u4ece\u51e0\u4f55\u53d8\u6362\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fd9\u4e2a\u5b9a\u4e49\u5f0f\uff0c\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a\u5411\u91cf \\(v\\) \u7ecf\u8fc7\u53d8\u6362 \\(A\\) \u5f97\u5230\u7684\u7ed3\u679c\uff0c\u7b49\u4e8e\u76f4\u63a5\u5bf9 \\(v\\) \u8fdb\u884c\u7f29\u653e\uff08\u800c\u6ca1\u6709\u6539\u53d8\u65b9\u5411\uff09\u3002

\u5de5\u7a0b\u8ba1\u7b97\u65b9\u6cd5

\u4ee4\u4eba\u60ca\u559c\u7684\u662f\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u8fd0\u7528\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u5b66\u5e93\u4e2d\u7684\u7279\u5f81\u503c\u5206\u89e3(eigen decomposition)\u65b9\u6cd5\uff0c\u5176\u5927\u81f4\u4f1a\u505a\u8fd9\u6837\u4e00\u4ef6\u4e8b\uff1a

\u5c06\u77e9\u9635 \\(A\\) \u5206\u89e3\u4e3a \\(Q\\Lambda Q^{-1}\\)\uff0c\u5176\u4e2d \\(Q\\) \u4e2d\u7684\u6bcf\u4e00\u5217\u5373\u4e3a \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u89d2\u9635 \\(\\Lambda\\) \u4e2d\u7684\u7b2c \\(i\\) \u9879\u5c31\u662f\u7b2c \\(i\\) \u4e2a\u7279\u5f81\u5411\u91cf\u7684\u7279\u5f81\u503c\u3002

\u7279\u5f81\u503c\u4e0e\u7279\u5f81\u5411\u91cf\u7684\u5e94\u7528\uff1a\u4e3b\u6210\u5206\u5206\u6790(principal component analysis)

\u4e3b\u6210\u5206(principal component)\u7b49\u4e8e\u534f\u65b9\u5dee\u77e9\u9635\u7684 \u7279\u5f81\u503c\u6700\u5927\u7684 \u90a3\u4e2a\u7279\u5f81\u5411\u91cf\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/","title":"Lecture 2 | Image Formation","text":"

\u7ea6 3769 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 13 \u5206\u949f

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","title":"\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5c0f\u5b54\u6210\u50cf","title":"\u5c0f\u5b54\u6210\u50cf","text":"

\u5982\u679c\u6211\u4eec\u76f4\u63a5\u62ff\u4e00\u5757\u5e73\u9762\u6765\u8bb0\u5f55\u81ea\u7136\u754c\u7684\u5149\u4fe1\u606f\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u7531\u4e8e\u5149\u7ebf\u662f\u5411\u56db\u9762\u516b\u65b9\u4f20\u64ad\u7684\uff0c\u6240\u4ee5\u63a5\u6536\u5230\u7684\u4fe1\u606f\u4e5f\u4e71\u4e03\u516b\u7cdf\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u901a\u8fc7\u4e00\u4e2a\u5c0f\u5b54\uff0c\u4e5f\u5c31\u662f\u5982\u4eca\u7684\u5149\u5708(aperture)\u6765\u5bf9\u5149\u7ebf\u8fdb\u884c\u4e00\u4e2a\u8fc7\u6ee4\u3002\u8fd9\u5c31\u662f\u65e9\u671f\u9488\u5b54\u6444\u50cf\u673a(pinhole camera)\u7684\u539f\u7406\u3002

\u8fd9\u4e5f\u5c31\u662f\u6211\u4eec\u5f88\u65e9\u5c31\u5b66\u8fc7\u7684\uff0c\u5c0f\u5b54\u6210\u50cf\u539f\u7406\u3002\u800c\u5149\u5708\u8d8a\u5c0f\uff0c\u6210\u50cf\u4e5f\u4f1a\u8d8a\u6765\u8d8a\u6e05\u695a\uff0c\u4f46\u4e5f\u4e0d\u80fd\u592a\u5c0f\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u4eae\u5ea6\u4e0d\u8db3\u751a\u81f3\u884d\u5c04\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u955c","title":"\u900f\u955c","text":"

\u51f8\u900f\u955c\u5177\u6709\u6c47\u805a\u5149\u7ebf\u7684\u4f5c\u7528\uff0c\u5728\u6ee1\u8db3\u7279\u5b9a\u5149\u5b66\u51e0\u4f55\u5173\u7cfb\u7684\u524d\u63d0\u4e0b\u5177\u6709\u548c\u5c0f\u5b54\u6210\u50cf\u7c7b\u4f3c\u7684\u6548\u679c\uff0c\u4f46\u662f\u80fd\u591f\u6c47\u805a\u66f4\u591a\u7684\u5149\u7ebf\u3002

Source: https://fpcv.cs.columbia.edu/

\u5bf9\u4e8e\u8584\u51f8\u900f\u955c\uff0c\u6709\u9ad8\u65af\u6210\u50cf\u516c\u5f0f\uff1a

\\[ \\frac{1}{i} + \\frac{1}{o} = \\frac{1}{f} \\]

\u5176\u4e2d \\(i\\) \u4e3a\u50cf\u8ddd(img dis)\uff0c\\(o\\) \u4e3a\u7269\u8ddd(obj dis)\uff0c\\(f\\) \u4e3a\u7126\u8ddd(focal len)\u3002

\u800c\u5bf9\u4e8e\u5e73\u884c\u5149\uff0c\u6216\u8005\u8bf4 \\(o\\to +\\infty\\) \u65f6\uff0c\u5c31\u4f1a\u6709 \\(i=f\\)\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6d4b\u91cf\u5e73\u884c\u5149\u900f\u8fc7\u51f8\u900f\u955c\u6c47\u805a\u7684\u4f4d\u7f6e\u6765\u6d4b\u91cf\u7126\u8ddd\u3002

\u540c\u65f6\u518d\u5f15\u5165\u4e00\u4e2a\u653e\u5927\u7387(Magnification)\uff1a\\(m=\\frac{h_i}{h_o}=\\frac{i}{o}\\)\u3002

Source: https://fpcv.cs.columbia.edu/

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u89c6\u91ce-fovfield-of-view","title":"\u89c6\u91ce FoV(field of view)","text":"

\u7126\u8ddd\u548c\u5e95\u7247\u7684\u7ebf\u5ea6\u5171\u540c\u51b3\u5b9a\u4e86 FoV \u7684\u5927\u5c0f\u3002

Source: https://snapsnapsnap.photos/

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7126\u8ddd\u7684\u5927\u5c0f\u4f1a\u5f71\u54cd\u89c6\u91ce\u7684\u5927\u5c0f\u548c\u653e\u5927\u7387\u7684\u5927\u5c0f\u3002

50mm/46\u00b0 \u4e0e\u4eba\u7684\u89c6\u91ce\u76f8\u8fd1\uff0c\u56e0\u6b64\u5b83\u88ab\u79f0\u4e3a\u6807\u51c6\u955c\u5934(standard lens).

\u6b64\u5916\uff0c\u5373\u4f7f\u5728\u753b\u9762\u4e2d\u4fdd\u8bc1\u4e00\u4e2a\u7269\u4f53\u7684\u5927\u5c0f\u4e0d\u53d8\uff0c\u9009\u7528\u4e0d\u540c\u7684\u7126\u8ddd\u4e5f\u4f1a\u5bfc\u81f4\u753b\u9762\u7684\u53d8\u5316\u2014\u2014\u80cc\u666f\u7684\u5927\u5c0f\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u5f20\u56fe\u7684\u4e09\u4e2a\u753b\u9762\u6211\u4eec\u53ef\u4ee5\u5f88\u6e05\u6670\u7684\u611f\u53d7\u5230\u8fd9\u4e00\u70b9\u3002

\u6b64\u5916\uff0c\u4f20\u611f\u5668\u7684\u5927\u5c0f\uff0c\u6216\u8005\u8bf4\u5e95\u7247\u7684\u5927\u5c0f\uff0c\u4e5f\u4f1a\u5f71\u54cd FoV\u3002\u800c\u4e14\u4e00\u822c\u6765\u8bf4\uff0c\u8d8a\u5927\u7684\u5e95\u7247\u80fd\u591f\u63d0\u4f9b\u66f4\u9ad8\u7684\u5206\u8fa8\u7387\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#f-\u6570","title":"F \u6570","text":"

F \u6570(F-Number)\u7528\u6765\u63cf\u8ff0\u5149\u5708\u7684\u76f8\u5bf9\u5927\u5c0f\uff0c\u5176\u5b9a\u4e49\u5f0f\u4e3a \\(N=\\frac{f}{D}\\)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5bf9\u7126","title":"\u5bf9\u7126","text":"

Source: https://fpcv.cs.columbia.edu/

\u7531\u76f8\u4f3c\u4e09\u89d2\u5f62\uff0c\u6ca1\u6709\u5bf9\u4e0a\u7126\u800c\u5f62\u6210\u7684\u5149\u6591(Blur Circle)\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

\\[ \\begin{align} &\\because \\frac{b}{D}=frac{|i'-i|}{i'} \\\\ &\\therefore b = \\frac{D}{i'}|i'-i|\\;,\\;\\;\\;b \\propto D \\propto \\frac{1}{N} \\end{align} \\]

\u800c\u5bf9\u7126\uff0c\u5c31\u662f\u5c06\u5931\u7126\u7684\u5185\u5bb9\u91cd\u65b0\u6c47\u805a\u5230\u5e95\u7247\u4e0a\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u666f\u6df1-dof","title":"\u666f\u6df1 DoF","text":"

\u6839\u636e\u4e0a\u4e00\u5c0f\u8282\u5f97\u5230\u7684\u7ed3\u8bba\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u597d\u50cf\u53ea\u6709\u6e05\u6670\u6210\u50cf\u4e00\u4e2a\u7279\u5b9a\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u76f8\u673a\u4e0a\u4f1a\u6709\u4e00\u6bb5\u8ddd\u79bb\u4e0a\u7684\u5185\u5bb9\u90fd\u662f\u6e05\u6670\u7684\uff0c\u8fd9\u6bb5\u8ddd\u79bb\u5c31\u662f\u666f\u6df1 DoF(Depth of Field)\u3002\u800c\u4e4b\u6240\u4ee5\u6709\u666f\u6df1\uff0c\u662f\u56e0\u4e3a\u5e95\u7247\u7684\u611f\u5149\u5143\u4ef6\u662f\u6709\u6781\u9650\u7684\uff0c\u5f53\u5149\u6591\u5c0f\u96e8\u8fd9\u4e2a\u6781\u9650\u65f6\uff0c\u62cd\u6444\u51fa\u6765\u7684\u5c31\u4ecd\u7136\u662f\u6e05\u6670\u7684\u3002

\u800c\u666f\u6df1\u7684\u5927\u5c0f\u53ef\u4ee5\u8fd9\u4e48\u8ba1\u7b97\uff1a

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u666f\u6df1\u7684\u5927\u5c0f \u5927\u81f4\u4e0e \u5149\u5708\u5927\u5c0f\u3001\u7269\u50cf \u6b63\u76f8\u5173\uff0c\u4e0e \u7126\u8ddd \u8d1f\u76f8\u5173\u3002

\u5f15\u8a00

\u7531\u4e8e\u6211\u4eec\u8003\u8651\u7684\u662f\u6210\u50cf\u95ee\u9898\uff0c\u6240\u4ee5\u66f4\u591a\u7684\u662f\u5728\u63cf\u8ff0\u4e09\u7ef4\u771f\u5b9e\u4fe1\u606f\u4e0e\u4e8c\u7ef4\u5e73\u9762\u4fe1\u606f\u4e4b\u95f4\u7684\u4e92\u76f8\u8868\u8fbe\u3002

\u800c\u8fd9\u79cd\u201c\u63cf\u8ff0\u201d\u9700\u8981\u57fa\u4e8e\u4e00\u4e2a\u6295\u5f71\u6a21\u578b\u3002\u6216\u8005\u8bf4\u8bf4\u4e00\u79cd\u6620\u5c04\u5173\u7cfb\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u597d\u50cf\u201c\u70b9\u5149\u6e90\u6295\u5f71\u201d\u548c\u201c\u5e73\u884c\u5149\u6e90\u6295\u5f71\u201d\u3002

\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u65e0\u8bba\u662f\u54ea\u4e00\u79cd\u6a21\u578b\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u4e09\u7ef4\u4fe1\u606f\u901a\u8fc7\u4e0d\u53ef\u9006\u7684\u7ebf\u6027\u53d8\u6362\u538b\u7f29\u5230\u4e86\u4e8c\u7ef4\u4fe1\u606f\uff0c\u6240\u4ee5\u4e00\u5b9a\u662f\u5b58\u5728\u4fe1\u606f\u7f3a\u5931\u7684\u3002\u901a\u5e38\u6765\u8bf4\uff0c\u6307\u7684\u662f\u6df1\u5ea6\u7f3a\u5931\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u6295\u5f71","title":"\u900f\u89c6\u6295\u5f71","text":"

\u5982\u56fe\u662f 3D \u5750\u6807\u901a\u8fc7\u900f\u89c6\u6295\u5f71\u5230 2D \u5750\u6807\u5230\u793a\u610f\u56fe\u3002\u5176\u4e2d \\(x,y,Z\\) \u7528\u6765\u63cf\u8ff0\u7a7a\u95f4\u5750\u6807\u4fe1\u606f\uff0c\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u7528\u4ed6\u4eec\u8868\u793a\u76f8\u5bf9\u4e8e\u76f8\u673a\u4e2d\u5fc3(camera center)\u7684\u6b63\u4ea4\u5750\u6807\uff0c\u5176\u4e2d \\(Z\\) \u548c\u5149\u8f74(optical axis)\u65b9\u5411\u76f8\u540c\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u79f0\u4e4b\u4e3a\u6df1\u5ea6\u3002

\u540c\u65f6\uff0c\u5149\u8f74\u5e94\u5f53\u5782\u76f4\u4e8e\u6210\u50cf\u5e73\u9762\uff0c\u800c\u5149\u8f74\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u4e3a\u56fe\u50cf\u4e2d\u5fc3(img center)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\\(P\\) \u4e0e \\(p\\) \u7684\u5173\u7cfb\u5982\u4e0b\uff1a

\\[ p = \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

\u90a3\u6709\u6ca1\u6709\u529e\u6cd5\u5c06 \\(p\\) \u548c \\(P\\) \u901a\u8fc7\u7ebf\u6027\u53d8\u5316\u653e\u5728\u540c\u4e00\u4e2a\u7b49\u5f0f\u91cc\u5462\uff1f

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6709\u6ca1\u6709\u529e\u6cd5\u4f7f\u5f97\u5982\u4e0b\u7b49\u5f0f\u6210\u7acb\uff1f

\\[ A \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

\u5f88\u53ef\u60dc\uff0c\u7531\u4e8e\u5f0f\u5b50\u4e2d\u51fa\u73b0\u4e86 \\(\\frac{1}{Z}\\)\uff0c\u5373\u9664\u6cd5\uff0c\u5b83\u5e76\u4e0d\u662f\u4e2a\u7ebf\u6027\u53d8\u6362\u3002\u6240\u4ee5\u5373\u4f7f\u6211\u4eec\u6269\u5c55 \\(p\\) \u548c \\(P\\) \u7684\u7ef4\u5ea6\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u5c06\u5b83\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u3002

\u4f46\u662f\u4f60\u4e5f\u770b\u5230\u4e86\uff0c\u6211\u7528\u7684\u8bcd\u662f\u201c\u76f4\u63a5\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5e94\u7528\u9f50\u6b21\u5750\u6807","title":"\u5e94\u7528\u9f50\u6b21\u5750\u6807","text":"

\u8ba9\u6211\u4eec\u56de\u987e\u9f50\u6b21\u5750\u6807\u7684 \u6269\u5c55\u6027\u8d28\uff0c\u5c06\u5b83\u5e94\u7528\u4e8e\u6b64\u5f0f\uff1a

\\[ \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\]

\u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230 \\(A\\) \u4f7f\u5f97\uff1a

\\[ A \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

\u6210\u7acb\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u627e\u5230 \\(A=\\begin{bmatrix}f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0\\end{bmatrix}\\) \u4f7f\u5f97\uff1a

\\[ \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\cong \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

\u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u6210\u529f\u7684\u901a\u8fc7\u7ebf\u6027\u53d8\u6362\u5c06 \\(P\\) \u548c \\(p\\) \u7edf\u4e00\u4e86\u8d77\u6765\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u53ef\u89c6\u5316\u8868\u793a","title":"\u53ef\u89c6\u5316\u8868\u793a","text":"

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

\u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

\u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u4fe1\u606f\u7f3a\u5931","title":"\u4fe1\u606f\u7f3a\u5931","text":"

\u7531\u4e8e\u5728\u900f\u89c6\u6295\u5f71\u7cfb\u7edf\u4e2d\uff0c\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5927\u5c0f\u4e0e\u56fe\u50cf\u7ebf\u5ea6\u5927\u5c0f\u7684\u6bd4\u4f8b\u7531\u6df1\u5ea6\u51b3\u5b9a\uff0c\u4f46\u6df1\u5ea6\u53c8\u4e0d\u80fd\u76f4\u63a5\u4ece\u56fe\u4e2d\u83b7\u53d6\uff0c\u6240\u4ee5\u6709\u65f6\u5019\u6211\u4eec\u65e0\u6cd5\u6bd4\u8f83\u56fe\u50cf\u4e2d\u4e24\u4e2a\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5dee\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u957f\u5ea6\u4fe1\u606f\u548c\u89d2\u5ea6\u4fe1\u606f\u662f\u4e22\u5931\u7684\u3002

\uff08\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u4e00\u4e9b\u4e1c\u897f\u6765\u505a\u53c2\u8003\u7cfb\uff0c\u5224\u65ad A \u548c B \u7684\u6df1\u5ea6\u4fe1\u606f\uff0c\u518d\u5206\u6790\u4ed6\u4eec\u7684\u5b9e\u9645\u7ebf\u5ea6\u5927\u5c0f\u5173\u7cfb\u3002\uff09

\u7136\u800c\u4ecd\u7136\u6709\u4e9b\u6027\u8d28\u662f\u4fdd\u7559\u7684\uff0c\u4f8b\u5982\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5982\u679c\u4f60\u80fd\u60f3\u8c61\u7684\u8bdd\uff0c\u867d\u7136\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b83\u7684\u201c\u7ebf\u5bc6\u5ea6\u201d\u4e0d\u4e00\u6837\u4e86\u3002

\u6240\u4ee5\uff0c\u5982\u679c\u662f\u66f2\u7ebf\uff0c\u5b83\u867d\u7136\u4e0d\u4f1a\u53d8\u6210\u6298\u7ebf\uff0c\u4f46\u662f\u7279\u5f81\u53ef\u80fd\u5df2\u7ecf\u53d8\u4e86\uff0c\u6bd4\u5982\u5706\u662f\u4f1a\u626d\u66f2\u7684\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u706d\u70b9\u4e0e\u706d\u7ebf","title":"\u706d\u70b9\u4e0e\u706d\u7ebf","text":"

\u5728\u900f\u89c6\u4e2d\u4e00\u4e2a\u5f88\u6709\u610f\u601d\u7684\u73b0\u8c61\u662f\u706d\u70b9(vanishing point)\u548c\u706d\u7ebf(vanishing line)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u56fe\u50cf\u4e2d\u4e00\u6761\u4e0d\u65ad\u884d\u751f\u7684\u76f4\u7ebf\uff0c\u5728\u50cf\u4e2d\u6700\u7ec8\u4f1a\u7ec8\u7ed3\u4e8e\u4e00\u4e2a\u70b9\uff0c\u8fd9\u4e2a\u70b9\u5c31\u662f\u201c\u706d\u70b9\u201d\u3002\u51e0\u4f55\u4e0a\uff0c\u706d\u70b9\u4e0e\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\u5e94\u5f53\u5e73\u884c\u4e8e\u8be5\u76f4\u7ebf\u3002

\u800c\u73b0\u5b9e\u4e2d\u76f8\u4e92\u5e73\u884c\u7684\u4e24\u6761\u76f4\u7ebf\uff0c\u6700\u7ec8\u4f1a\u5728\u56fe\u50cf\u4e2d\u7ec8\u6b62\u4e8e\u540c\u4e00\u4e2a\u706d\u70b9\u3002

\u706d\u70b9\u672a\u5fc5\u5728\u56fe\u50cf\u4e2d\uff0c\u751a\u81f3\u53ef\u80fd\u65e0\u9650\u8fdc\u3002

\u521a\u624d\u63d0\u5230\uff0c\u5e73\u884c\u7ebf\u5171\u4eab\u706d\u70b9\u8fd9\u610f\u5473\u7740\u6709\u591a\u5c11\u7ec4\u5e73\u884c\u7ebf\u5c31\u6709\u591a\u5c11\u706d\u70b9\u3002

\u5982\u679c\u6211\u4eec\u5c06\u4e00\u4e2a\u5e73\u9762\u50cf\u68cb\u76d8\u90a3\u6837\uff0c\u5212\u51fa\u4e24\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u4e48\u5c31\u4f1a\u5f97\u5230\u4e24\u4e2a\u706d\u70b9\uff0c\u5982\u56fe\u4e2d\u7684 \\(v_1\\) \u548c \\(v_2\\)\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u5e73\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u4e2d\u53d6\u51fa\u65e0\u6570\u7ec4\u5e73\u884c\u7ebf\uff0c\u56e0\u800c\u65e0\u9650\u5927\u7684\u5e73\u9762\u4f1a\u4ea7\u751f\u65e0\u6570\u591a\u7684\u706d\u70b9\uff0c\u800c\u8fd9\u4e9b\u706d\u70b9\u8fde\u6210\u7ebf\u5c31\u6210\u4e86\u201c\u706d\u7ebf\u201d\u3002\u5e38\u89c1\u7684\u706d\u7ebf\u5c31\u6bd4\u5982\u7167\u7247\u4e0a\u7684\u6d77\u5929\u754c\u7ebf\u3002

\u56e0\u6b64\uff0c\u5982\u679c\u8bf4\u706d\u70b9\u8c61\u5f81\u4e86\u4e00\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u706d\u7ebf\u5c31\u662f\u8c61\u5f81\u4e86\u4e00\u5757\u5e73\u9762\u3002\u800c\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u770b\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u51fa\u73b0\u5728\u706d\u7ebf\u4ee5\u4e0a\u8fd8\u662f\u706d\u7ebf\u4e00\u4e0b\uff0c\u6765\u5224\u65ad\u5e73\u9762\u5728\u6211\u4eec\u7684\u76f8\u673a\u4e2d\u5fc3\u4ee5\u4e0b\u8fd8\u662f\u4ee5\u4e0a\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

Interesting Try

\u9898\u9762\u7b54\u6848

\u89c2\u5bdf\u5982\u4e0b\u56fe\u7247\uff0c\u5224\u65ad \ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0a\u8fd8\u662f\u4ee5\u4e0b\uff0c\u5e76\u9610\u660e\u7406\u7531\u3002

\u663e\u7136\uff0c\ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0b\uff08\u4f1e\u5728\u4ee5\u4e0a\uff09\uff0c\u4f9d\u636e\u662f \u4eba \u5728 \u5929\u9645\u7ebf \u4ee5\u4e0b\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u7578\u53d8","title":"\u900f\u89c6\u7578\u53d8","text":"

\u5728\u62cd\u6444\u8f83\u5927\u7684\u7269\u4f53\u65f6\uff0c\u6bd4\u5982\u5efa\u7b51\u7269\uff0c\u5982\u679c\u5efa\u7b51\u7269\u7684\u5899\u9762\u6ca1\u6709\u548c\u5e95\u7247\u5e73\u884c\uff0c\u5219\u4f1a\u51fa\u73b0\u900f\u89c6\u7578\u53d8\u3002

\u5728\u5efa\u7b51\u62cd\u6444\u65b9\u9762\uff0c\u6211\u4eec\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4e0b\u79fb\u4f20\u611f\u5668\uff0c\u4f7f\u5e95\u7247\u4e2d\u5fc3\u5728\u5149\u8f74\u4ea4\u70b9\u4ee5\u4e0b\uff0c\u8fd9\u79cd\u955c\u5934\u79f0\u4e3a\u79fb\u8f74\u955c\u5934\u3002

\u53e6\u5916\u4e00\u79cd\u900f\u89c6\u7578\u53d8\u4f53\u73b0\u5728\u66f2\u7ebf\u7684\u5f62\u53d8\u4e0a\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u5e38\u611f\u53d7\u5230\u7684\uff0c\u7ad9\u5728\u8fb9\u4e0a\u7684\u4eba\u8138\u603b\u662f\u66f4\u5927\u4e00\u70b9\u3002\u800c\u8fd9\u79cd\u7578\u53d8\u5728\u65ad\u955c\u5934\u4e0b\u66f4\u5e38\u89c1\uff0c\u6240\u4ee5\u4eba\u50cf\u66f4\u591a\u7528\u7684\u662f\u957f\u7126\u955c\u5934\uff08\u5176\u4e00\u539f\u56e0\uff0c\u5176\u4ed6\u7684\u8fd8\u6709 FoV \u5c0f\u6240\u4ee5\u80cc\u666f\u66f4\u5e72\u51c0\u7b49\uff09\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","title":"\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","text":"\\[ \\begin{align} r^2 & = {x'}_n^2 + {y'}_n^2 \\\\ {x'}_d & = {x'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ {y'}_d & = {y'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ \\end{align} \\]

\u800c\u8fd9\u79cd\u7167\u7247\u7684\u7ea0\u6b63\u529e\u6cd5\u5c31\u662f\u5bfb\u627e\u7167\u7247\u4e2d\u7684\u683c\u70b9\uff0c\u7136\u540e\u901a\u8fc7\u6570\u5b66\u65b9\u6cd5\u6765\u8fd8\u539f\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6b63\u4ea4\u6295\u5f71","title":"\u6b63\u4ea4\u6295\u5f71","text":"

\u6b63\u4ea4\u6295\u5f71\u7684\u542b\u4e49\u5c31\u662f\uff0c\u76f4\u63a5\u62b9\u6389\u6df1\u5ea6\u4fe1\u606f\uff0c\u4e09\u7ef4\u70b9 \\(P\\) \u5230\u4e8c\u7ef4\u70b9 \\(p\\) \u7684\u6620\u5c04\u89c4\u5219\u5982\u4e0b\uff1a

\\[ \\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} = \\begin{bmatrix} x \\\\ y \\end{bmatrix} \\]

\u4e5f\u5c31\u662f\u5e73\u884c\u5149\u6e90\u6295\u5f71\u3002

\u8fd9\u79cd\u6295\u5f71\u53ef\u80fd\u4e0d\u592a\u62df\u771f\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u4e0d\u8981\u6c42\u7cbe\u5ea6\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u603b\u662f\u4e50\u4e8e\u4f7f\u7528\u7684\u3002

\u8fd9\u6837\u8bf4\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u662f\u5b83\u5176\u5b9e\u5f88\u5e38\u89c1\uff0c\u6bd4\u5982\u5728\u4e00\u4e9b\u4ee5\u201c\u4e0a\u5e1d\u89c6\u89d2\u201d\u5c55\u5f00\u7684\u6e38\u620f\u4e2d\uff0c\u4f8b\u5982\u201c\u5f00\u7f57\u6e38\u620f\u201d\u3001\u201c\u6a21\u62df\u90fd\u5e02\u201d\u8fd9\u79cd\uff0c\u91c7\u7528\u7684\u57fa\u672c\u90fd\u662f\u8fd9\u79cd\u6295\u5f71\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5feb\u95e8shutter","title":"\u5feb\u95e8(Shutter)","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","title":"\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","text":"

\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u8003\u8651\u7684\u4e3b\u8981\u662f\u5149\u5f3a\u548c\u989c\u8272\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\u3002

\u786c\u4ef6\u4e0a\uff0c\u5b83\u4eec\u90fd\u901a\u8fc7\u56fe\u50cf\u4f20\u611f\u5668(img sensor)\u5b9e\u73b0\u3002

\u5f15\u5165

\u7740\u8272(shading)\u4e2d\u6240\u8bf4\u7684\u5149\u5f3a\uff0c\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff1a\u4e00\u65b9\u9762\u4e0e\u8ddd\u79bb\u5149\u6e90\u7684\u8ddd\u79bb\u6709\u5173\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u7b26\u5408\u5e73\u65b9\u53cd\u6bd4\u5b9a\u5f8b\uff0c\u8fd9\u79cd\u7279\u5f81\u6211\u4eec\u79f0\u4e4b\u4e3a Light Falloff\uff1b\u53e6\u4e00\u65b9\u9762\u5b9e\u9645\u4e0a\u662f\u9700\u8981\u6211\u4eec\u8ba1\u7b97\u5149\u7684\u53cd\u5c04\u884c\u4e3a\u3002

\u7406\u8bba\u4e0a\uff0c\u6211\u4eec\u4f1a\u9700\u8981\u53cc\u5411\u53cd\u5c04\u5206\u5e03\u51fd\u6570 BRDF(Bidirectional Reflectance Distribution Function)\u6765\u8ba1\u7b97\uff0cBRDF \u7684\u8f93\u5165\u5927\u81f4\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u51e0\u4e2a\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u9700\u8981\u5efa\u7acb\u8fd9\u6837\u4e00\u4e2a\u6a21\u578b\u662f\u5f88\u56f0\u96be\u7684\uff0c\u4e14\u8fd9\u4e2a\u6a21\u578b\u4e0d\u5e38\u7528\uff0c\u800c\u4e14\u8ba1\u7b97\u8d77\u6765\u6bd4\u8f83\u9ebb\u70e6\u3002

\u53cd\u5c04\u4e3b\u8981\u53ef\u4ee5\u5f52\u7eb3\u4e3a\u4e24\u79cd\u7b80\u5355\u6a21\u578b\u548c\u4e00\u79cd\u6df7\u5408\u6a21\u578b\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6f2b\u53cd\u5c04","title":"\u6f2b\u53cd\u5c04","text":"

\u6f2b\u53cd\u5c04(diffuse reflection) \u53c8\u53eb \u6717\u4f2f\u53cd\u5c04(Lambertian reflection)\uff0c\u662f\u8868\u73b0\u5728\u7c97\u7cd9\u8868\u9762\u4e0a\u7684\u53cd\u5c04\u7279\u5f81\uff0c\u56e0\u4e3a\u6211\u4eec\u9ed8\u8ba4\u5b83\u5411\u56db\u9762\u516b\u65b9\u53cd\u5c04\u7684\u5149\u5f3a\u90fd\u4e00\u6837\uff0c\u6240\u4ee5\u5b83\u7684\u8ba1\u7b97\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\uff08Shading independent of view direction\uff09\uff1a

\\[ L_d = k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) \\]

\u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

\u5982\u4f55\u7406\u89e3\u5149\u5f3a\u5ea6\u4e0e\u89d2\u5ea6\u7684\u5173\u7cfb

\u4e00\u5f00\u59cb\u6ca1\u4ed4\u7ec6\u60f3\u7684\u65f6\u5019\u8fd8\u89c9\u5f97\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u4ed4\u7ec6\u4e00\u60f3\u4e3a\u4ec0\u4e48\u80fd\u8fd9\u6837\u8868\u8ff0\uff1f\u4e8e\u662f\u548c\u540c\u5b66\u63a2\u8ba8\u4e86\u4e00\u4e0b\uff0c\u611f\u89c9\u4e00\u4e2a\u53ef\u4ee5\u63a5\u53d7\u7684\u89e3\u91ca\u662f\u8fd9\u6837\u7684\uff1a

\u9996\u5148\uff0c\u8fd9\u91cc\u4e0e\u5176\u8bf4\u4e0e\u89d2\u5ea6\u76f8\u5173\uff0c\u4e0d\u5982\u8bf4\u4e0e\u5355\u4f4d\u9762\u79ef\u53d7\u5230\u7684\u5149\u7167\u5f3a\u5ea6\u6709\u5173\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u540c\u4e00\u675f\u5149\uff0c\u503e\u659c\u7684\u9762\u4e0a\u4f1a\u6709\u66f4\u5927\u7684\u9762\u79ef\u88ab\u7167\u5c04\u5230\uff0c\u5747\u644a\u4e0b\u6765\u5355\u4f4d\u9762\u79ef\u4e0a\u7684\u5149\u5f3a\u5ea6\u5c31\u5c0f\uff0c\u6216\u8bb8\u53ef\u4ee5\u5c06\u5b83\u7406\u89e3\u6210\u7c7b\u4f3c\u4e8e\u201c\u5bc6\u5ea6\u201d\u7684\u6982\u5ff5\u3002

\u5e26\u7740\u8fd9\u6837\u7684\u60f3\u6cd5\uff0c\u518d\u6765\u770b\u8fd9\u5f20\u56fe\uff0c\u5c31\u6bd4\u8f83\u6e05\u6670\u4e86\u3002

Source: https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u9ad8\u5149\u53cd\u5c04","title":"\u9ad8\u5149\u53cd\u5c04","text":"

\u9ad8\u5149\u53cd\u5c04(specular reflection) \u7c7b\u4f3c\u6211\u4eec\u8ba4\u77e5\u4e2d\u7684\u955c\u9762\u53cd\u5c04\uff0c\u5b83\u7684\u7279\u5f81\u662f\u57fa\u672c\u7b26\u5408\u955c\u53cd\u5c04\u7684\u89c4\u5f8b\u3002

\u5728\u9ad8\u5149\u53cd\u5c04\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u534a\u7a0b\u5411\u91cf(half vec)\\(\\vec h = bisector(\\vec v,\\vec l) = \\frac{\\vec v + \\vec l}{||\\vec v + \\vec l||}\\)

\u5f53 \\(\\vec h\\) \u4e0e \\(\\vec n\\) \u975e\u5e38\u63a5\u8fd1\u65f6\uff0c\u5373 \\(\\alpha = <\\vec n, \\vec h>\\) \u5f88\u5c0f\u65f6\uff0c\u6211\u4eec\u79f0\u4e4b\u7b26\u5408\u9ad8\u5149\u53cd\u5c04\u3002

\u9ad8\u5149\u53cd\u5c04\u7684\u5f3a\u5ea6\u516c\u5f0f\u5927\u81f4\u5982\u4e0b\uff1a

\\[ L_s = k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\cos\\alpha)^p=k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\]

\u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

\u5206\u6790\u53ef\u5f97\uff0c\\(p\\) \u8d8a\u5927\uff0c\u9ad8\u5149\u8d8a\u96c6\u4e2d\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#blinn-phong-\u53cd\u5c04","title":"Blinn-Phong \u53cd\u5c04","text":"

Blinn-Phong \u53cd\u5c04\u6a21\u578b(Blinn-Phong Reflection Model)\u53ef\u4ee5\u8bf4\u96c6\u5408\u4e86\u524d\u4e24\u8005\uff0c\u6b64\u5916\u8fd8\u5f15\u5165\u4e86\u73af\u5883\u5149(ambient part)\u3002

\\[ L_a=k_aI_a \\]

Blinn-Phong \u53cd\u5c04\u6a21\u578b\u7684\u5927\u81f4\u6210\u5206\u5982\u4e0b\uff1a

\\[ \\begin{align} L & = L_a + L_d + L_s \\\\ & = k_aI_a + k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) + k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\end{align} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u989c\u8272","title":"\u989c\u8272","text":"

\u4e3a\u4e86\u63cf\u8ff0\u989c\u8272\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u8272\u5f69\u7a7a\u95f4(color spaces)\uff0c\u5e38\u89c1\u7684\u6709 RGB \u548c HSV \u7b49\uff0c\u5bf9\u76f8\u673a\u6765\u8bf4\u6211\u4eec\u66f4\u5e38\u7528\u7684\u662f RGB\u3002

in py

\u5728\u7b97\u6cd5\u4e2d\uff0c\u6211\u4eec\u7528\u77e9\u9635\u6765\u5b58\u50a8\u56fe\u50cf\u4fe1\u606f\uff0c\u5176\u4e2d\u5de6\u4e0a\u89d2\u7684\u5143\u7d20\u5750\u6807\u4e3a (0, 0, :)\uff0c\u5176\u4e2d\u7b2c\u4e09\u7ef4\u7528\u6765\u6307\u5b9a\u989c\u8272\u901a\u9053(channel)\uff0c\u6240\u4ee5\u7b2c i \u884c j \u5217\u7684\u50cf\u7d20\u70b9\u8868\u793a\u4e3a (i-1, j-1, :)\uff1b

\u5728\u786c\u4ef6\u4e0a\uff0c\u989c\u8272\u4f20\u611f\u4e3b\u8981\u901a\u8fc7\u62dc\u5c14\u6ee4\u955c(Bayer filter)\u5b9e\u73b0\u3002\u4e5f\u5c31\u662f\u901a\u8fc7\u5728\u4f20\u611f\u5668\u524d\u5b89\u88c5\u4e00\u4e2a\u5355\u8272\u6ee4\u955c\uff0c\u6765\u63a5\u6536\u5355\u4e00\u8272\u5149\u3002\u5e38\u89c1\u7684\u505a\u6cd5\u662f\u4ee5\u7530\u5b57\u683c\u7684\u56db\u4e2a\u4f20\u611f\u5668\u4e3a\u5355\u4f4d\uff0c\u5206\u914d R*1 G*2 B*1 \u7684\u6ee4\u955c\u3002

Source: https://en.wikipedia.org/wiki/Bayer_filter

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7eff\u8272\u7684\u6ee4\u955c\u66f4\u591a\uff0c\u56e0\u4e3a\u592a\u9633\u5149\u4e2d\u7eff\u8272\u6ce2\u6bb5\u66f4\u591a\uff0c\u4e8e\u662f\u4eba\u773c\u5bf9\u7eff\u8272\u66f4\u654f\u611f\u3002

\u663e\u7136\uff0c\u8fd9\u6837\u5f97\u5230\u7684\u56fe\u7247\u9700\u8981\u8fdb\u884c\u63d2\u503c\u624d\u80fd\u5f97\u5230\u6700\u7ec8\u56fe\u7247\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/","title":"Lecture 3 | Image Processing","text":"

\u7ea6 5940 \u4e2a\u5b57 3 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 20 \u5206\u949f

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

\u5bf9\u56fe\u50cf\u7684\u57fa\u672c\u64cd\u4f5c\u5373\u5728\u56fe\u50cf\u7f16\u8f91\u8f6f\u4ef6\u4e2d\u5e38\u89c1\u7684\u90a3\u4e48\u51e0\u79cd\uff0c\u7a0d\u540e\u6211\u4eec\u5c06\u4f1a\u7b80\u5355\u4ecb\u7ecd\u8fd9\u51e0\u79cd\u64cd\u4f5c\u662f\u5982\u4f55\u5b9e\u73b0\u7684\u3002

\u4e0d\u8fc7\u5728\u6b64\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5148\u4ecb\u7ecd\u4e00\u4e2a\u5de5\u5177\u2014\u2014\u5377\u79ef(convolution)\uff0c\u4e4b\u540e\u4e00\u4e9b\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u6b64\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5377\u79ef","title":"\u5377\u79ef","text":"

\u6570\u5b66\u4e0a\u5bf9\u5377\u79ef(convolution)\u7ed9\u51fa\u7684\u5b9a\u4e49\u662f\uff1a

\\[ (f*g)(x)=\\int_{-\\infty}^{\\infty} f(y)g(x-y)\\mathrm{d}y \\]

\u7b2c\u4e00\u6b21\u63a5\u89e6\u8fd9\u4e2a\u5f0f\u5b50\u7684\u65f6\u5019\u6211\u4e2a\u4eba\u611f\u89c9\u662f\u4e00\u5934\u96fe\u6c34\u7684\u3002\u4f46\u662f\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u4ece\u4e00\u4e2a\u66f4\u76f4\u89c2\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u4e00\u4e0b\u8fd9\u4e2a\u5f0f\u5b50\uff1a

\u4e00\u8a00\u4ee5\u853d\u4e4b\uff1a\\((f*g)(x)\\) \u662f \\(g(x)\\) \u5728\u6ee4\u6ce2\u89c4\u5219 \\(f(y)\\) \u4e0b\u7684\u52a0\u6743\u5747\u503c\u51fd\u6570\u3002

\u9996\u5148\uff0c\u6211\u4eec\u5148\u6765\u4ece\u4e00\u7ef4\u79bb\u6563\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u5377\u79ef\uff0c\u5373\uff1a

\\[ (f*a)_i = \\sum_{j=-m}^{m} f_j * a_{i+j} \\]

\u5f53\u7136\uff0c\u4e0a\u9762\u53ef\u80fd\u51fa\u73b0 \\(f_{-1}\\) \u8fd9\u79cd\u9b3c\u755c\u7684\u4e1c\u897f\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u8fd9\u91cc\u7684 \\(f\\) \u6570\u5217\u786e\u5b9e\u662f\u5b9a\u4e49\u5728\u6574\u4e2a\u6574\u6570\u8f74\u4e0a\u7684\uff08\u5f53\u7136\u4e0b\u6807\u5565\u7684\u662f\u65e0\u6240\u8c13\u7684\uff0c\u7ec8\u70b9\u5173\u6ce8\u4e0b\u9762\u7684\u6a21\u62df\u8fc7\u7a0b\uff09

\u6bd4\u5982\uff0c\u6211\u4eec\u6709\u539f\u59cb\u6570\u5217 \\(a_n\\) \u548c\u6ee4\u6ce2\u5668\u6570\u5217 \\(f_m\\) \u5982\u4e0b\uff1a

\\(a_n\\) 2 4 2 6 2 \\(f_m\\) 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u624b\u52a8\u6a21\u62df\u4e00\u4e0b\u5377\u79ef\u8fc7\u7a0b\uff1a

\u5377\u79ef\u8fc7\u7a0b \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 1 2 1 0 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times4+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 1 2 1 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times4+2\\times2+1\\times6\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 0 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times6+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(16\\) -

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5982\u679c \\(f_m\\) \u6bcf\u4e00\u9879\u90fd\u9664\u4ee5 4\uff0c\u90a3\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u8fc7\u7a0b\u5c31\u662f\u5728\u6c42\u6bcf\u4e00\u9879\u4e0e\u76f8\u90bb\u4e24\u9879\u7684\u52a0\u6743\u5e73\u5747\uff08\u4e2d\u5fc3\u6743\u91cd\u66f4\u5927\uff09\u3002

\u73b0\u5728\uff0c\u4ece\u79bb\u6563\u4f1a\u5230\u8fde\u7eed\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u4ecb\u7ecd\u6700\u7ecf\u5178\u7684\u4e00\u4e2a\u5377\u79ef\u5e94\u7528\u2014\u2014\"box function\"\uff0c\u5176\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u65f6\u5b9a\u4e49\u5982\u4e0b\uff1a

\\[ f(x) = \\left\\{ \\begin{array}{} 1 &|x| \\leq 0.5\\\\ 0 &otherwise \\end{array} \\right. \\]

\u800c\u5c06\u5b83\u5e26\u5165\u5377\u79ef\u7684\u8868\u8fbe\u5f0f\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a

\\[ (f*g)(x)=\\int_{-0.5}^{0.5}g(x-y)\\mathrm{d}y \\]

\u90a3\u5b9e\u9645\u4e0a\uff0c\u8fd9\u5c31\u662f\u5728\u6c42\u51fd\u6570\u5728\u5bbd\u5ea6\u4e3a 1 \u7684\u8303\u56f4\u5185\u7684\u5747\u503c\u3002

\u73b0\u5728\uff0c\u6211\u4eec\u5c06\u5b83\u8fdb\u884c\u4e00\u70b9\u6269\u5c55\uff0c\u6765\u5230\u4e8c\u7ef4\uff0c\u5219\u53ef\u4ee5\u5c06\u79bb\u6563\u7684\u5377\u79ef\u8fc7\u7a0b\u7528\u8fd9\u6837\u4e00\u4e2a gif \u6765\u8868\u793a\uff1a

\u601d\u8003

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e8c\u7ef4\u5377\u79ef\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5377\u51fa\u6765\u7684\u4e1c\u897f\u8981\u6bd4\u539f\u59cb\u56fe\u50cf\u5c0f\u3002\u800c\u5176\u4e2d\u4e00\u79cd\u89e3\u51b3\u7684\u65b9\u6cd5\u662f padding\u3002\u5728\u6b64\u4e0d\u505a\u8fc7\u591a\u4ecb\u7ecd\u3002

\u5178\u578b\u6ee4\u6ce2\u5668

\u5176\u4ed6\u5178\u578b\u7684\u6ee4\u6ce2\u5668\u53ef\u80fd\u5c06\u5728\u4e4b\u540e\u4ecb\u7ecd\uff0c\u8fd9\u91cc\u7b80\u5355\u63d0\u51e0\u4e2a\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u589e\u52a0\u5bf9\u6bd4\u5ea6","title":"\u589e\u52a0\u5bf9\u6bd4\u5ea6","text":"

\u589e\u52a0\u5bf9\u6bd4\u5ea6(increase contrast)\u5373\u8ba9\u753b\u9762\u4e2d\u7684\u989c\u8272\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u901a\u4fd7\u6765\u8bf4\u5c31\u662f\u9ed1\u7684\u66f4\u9ed1\uff0c\u767d\u7684\u66f4\u767d\u3002

\u4f53\u611f\u4e0a\u8ba9\u4e00\u5f20\u96fe\u8499\u8499\u7684\u7167\u7247\u53d8\u5f97\u66f4\u52a0\u9ed1\u767d\u5206\u660e\u3002

\u4e0a\u9762\u4e5f\u8bf4\u4e86\uff0c\u662f\u5c06\u8272\u5f69\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u8bb2\u539f\u6765\u7684\u989c\u8272\u8fdb\u884c\u4e00\u4e2a\u6620\u5c04\uff0c\u4ee4 \\(color'(x,y) = f[color(x,y)]\\)\u3002

\u90a3\u4e48\u4e00\u822c\u6765\u8bf4\uff0c\u6211\u4eec\u91c7\u7528S \u66f2\u7ebf(S curve)\u6765\u8fdb\u884c\u8fd9\u4e2a\u6620\u5c04\uff0c\u4e5f\u5c31\u662f\u5c06\u539f\u672c\u5747\u5300\u5206\u5e03\u7684\u70b9\u6309\u7167 S \u66f2\u7ebf\u8fdb\u884c\u62c9\u4f38\u548c\u538b\u7f29\uff0c\u8fd9\u6837\uff0c\u767d\u7684\u4f1a\u66f4\u767d\uff0c\u9ed1\u7684\u5c31\u4f1a\u66f4\u9ed1\u3002

\u56fe\u4e2d\u6a2a\u5750\u6807\u8868\u793a\u539f\u6765\u7684\u989c\u8272\uff0c\u7eb5\u5750\u6807\u8868\u793a\u6620\u5c04\u540e\u7684\u989c\u8272\uff0c\u53ef\u4ee5\u53d1\u73b0\u9ed1\u8272\u90e8\u5206\u7684\u989c\u8272\u90fd\u5411\u9ed1\u8272\u504f\u79fb\uff0c\u767d\u8272\u90e8\u5206\u4ea6\u7136\u3002

\u800c\u5177\u4f53\u4f7f\u7528\u7684\u66f2\u7ebf\uff0c\u5219\u9700\u8981\u6839\u636e\u9700\u6c42\u8fdb\u884c\u8c03\u6574\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cd\u8272","title":"\u53cd\u8272","text":"

\u987e\u540d\u601d\u4e49\uff0c\u56fe\u50cf\u53d6\u53cd\u8272(image invert)\u5c31\u662f\u5c06\u989c\u8272\u53d6\u53cd\uff0c\u9ed1\u53d8\u767d\uff0c\u767d\u53d8\u9ed1\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u8fb9\u7f18\u63d0\u53d6","title":"\u8fb9\u7f18\u63d0\u53d6","text":"

\u8fb9\u7f18\u63d0\u53d6 Edge detection

\u5f15\u5165

\u6a21\u7cca(blur) \u548c \u9510\u5316(sharpen) \u662f\u4e24\u4e2a\u5bf9\u5e94\u7684\u6982\u5ff5\uff0c\u5b9e\u73b0\u7684\u624b\u6bb5\u4e5f\u975e\u5e38\u7c7b\u4f3c\u3002

\u4f7f\u7528\u5bf9\u6bd4

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6a21\u7cca","title":"\u6a21\u7cca","text":"

\u6240\u8c13\u7684\u6a21\u7cca(blur)\uff0c\u50cf\u662f\u5c06\u67d0\u4e2a\u4f4d\u7f6e\u7684\u50cf\u7d20\u548c\u5468\u56f4\u6df7\u5408\u8d77\u6765\uff0c\u66f4\u6570\u5b66\u7684\u8868\u8ff0\u6765\u8bf4\uff0c\u9700\u8981\u4e0e\u5468\u56f4\u8fdb\u884c\u52a0\u6743\u6c42\u5e73\u5747\uff0c\u6ca1\u9519\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u5377\u79ef\u6765\u5b9e\u73b0\u3002

Source: Stanford CS248, Winter 202

\u4f8b\u5982\uff0c\u5047\u8bbe\u6211\u4eec\u7528\u8fd9\u6837\u4e00\u4e2a\u4e8c\u7ef4\u6ee4\u6ce2\u5668\u5bf9\u4e00\u5f20\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\uff1a

\\[ \\begin{bmatrix} \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\end{bmatrix} \\]

\u90a3\u4e48\u65b0\u5f97\u5230\u7684\u56fe\u7247\u4e2d\u7684\u50cf\u7d20\u5c06\u4f1a\u7b49\u4e8e\u539f\u56fe\u7247\u8fd9\u4e2a\u50cf\u7d20\u5468\u56f4\u7684 8 \u4e2a\u50cf\u7d20\u548c\u5b83\u6c42\u5e73\u5747\u5f97\u5230\u7684\u989c\u8272\u3002

\u518d\u6bd4\u5982\uff0c\u6ee4\u6ce2\u5668\u4f7f\u7528\u9ad8\u65af\u51fd\u6570\u7684\u9ad8\u65af\u6a21\u7cca\uff1a

\\[ f(i,j)=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2+j^2}{2\\sigma^2}} \\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\; \\begin{bmatrix} 0.075 & 0.124 & 0.075 \\\\ 0.124 & 0.204 & 0.124 \\\\ 0.075 & 0.124 & 0.075 \\end{bmatrix} \\]

\u9ad8\u65af\u6a21\u7cca\u4f1a\u66f4\u52a0\u6ce8\u91cd\u4e2d\u5fc3\u7684\u6743\u91cd\uff0c\u6240\u4ee5\u6a21\u7cca\u8d77\u6765\u76f8\u5bf9\u6765\u8bf4\u66f4\u80fd\u4fdd\u6301\u56fe\u7247\u539f\u6765\u7684\u7279\u5f81\u4e00\u70b9\u3002

\u66f4\u4f18\u79c0\u7684\u4e00\u79cd\u6a21\u7cca

\u4e00\u79cd\u66f4\u6709\u7528\u7684\u6a21\u7cca\u662f\uff0c\u63d0\u53d6\u8fb9\u7f18\u540e\u7684\u6a21\u7cca\uff0c\u5373\u6a21\u7cca\u8fc7\u7a0b\u4e2d\u4e0d\u5f71\u54cd\u8fb9\u7f18\uff0c\u6bd4\u5982\u4eba\u8138\u8fb9\u7f18\u6a21\u7cca\uff0c\u53ea\u5f71\u54cd\u8138\u800c\u4e0d\u5f71\u54cd\u5176\u4ed6\u90e8\u5206\u3002

\u5177\u4f53\u5b9e\u73b0\u6211\u4eec\u5c06\u5728 \u518d\u770b\u6ee4\u6ce2\u5668 \u4e2d\u7684 \u53cc\u8fb9\u6ee4\u6ce2\u5668\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u9510\u5316","title":"\u9510\u5316","text":"

\u6211\u4eec\u6ce8\u610f\u5230\uff0c\u6a21\u7cca\u4e2d\u7684\u6ee4\u6ce2\u5668\u57fa\u672c\u4e0a\u6bcf\u4e00\u4e2a\u5143\u7d20\u90fd\u662f\u975e\u8d1f\u6570\uff0c\u610f\u601d\u662f\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u4fdd\u7559\u4e00\u90e8\u5206\u8fd9\u4e9b\u50cf\u7d20\u7684\u7279\u5f81\u3002

\u90a3\u5982\u679c\u6211\u4eec\u628a\u5176\u4e2d\u4e00\u90e8\u5206\u6539\u6210\u8d1f\u6570\u5462\uff1f\u90a3\u5c31\u8bf4\u660e\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u51cf\u53bb\u8fd9\u90e8\u5206\u7684\u7279\u5f81\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u5f88\u50cf\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7279\u5f81\u5c31\u4f1a\u88ab\u524a\u5f31\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u51e0\u4e4e\u76f8\u53cd\uff0c\u90a3\u4e48\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u7684\u7279\u5f81\u5c31\u4f1a\u88ab\u52a0\u5f3a\u3002

\u6211\u4eec\u8003\u8651\u8fd9\u6837\u4e00\u4e2a\u7279\u6b8a\u4f8b\u5b50\uff1a

\\[ \\begin{bmatrix} 0 & -1 & 0 \\\\ -1 & 5 & -1 \\\\ 0 & -1 & 0 \\end{bmatrix} \\]

\u5982\u679c\u8fb9\u7f18\u7684\u70b9\u548c\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u4e0d\u4e00\u6837\uff0c\u5219\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u7684\u7279\u5f81\u4f1a\u88ab\u5f3a\u8c03\uff0c\u5373\u4f1a\u653e\u5927\u76f8\u90bb\u70b9\u7684\u533a\u522b\uff0c\u8fd9\u5c31\u662f\u9510\u5316(sharpen)\u7684\u539f\u7406\u3002

Source: Stanford CS248, Winter 202

\u6a21\u7cca\u4e0e\u9510\u5316\u7684\u8054\u7cfb

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u518d\u770b\u6ee4\u6ce2\u5668","title":"\u518d\u770b\u6ee4\u6ce2\u5668","text":"

\u4e0a\u9762\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86\u7528\u4e8e\u6a21\u7cca\u7684\u6ee4\u6ce2\u5668\uff08\u6bd4\u5982\u9ad8\u65af\u6ee4\u6ce2\u5668\uff09\uff0c\u7528\u4e8e\u9510\u5316\u7684\u6ee4\u6ce2\u5668\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u770b\u770b\u5176\u4ed6\u7684\u6ee4\u6ce2\u5668\u7684\u76f8\u5173\u5185\u5bb9\uff1a

\u6c34\u5e73/\u5782\u76f4\u68af\u5ea6\u63d0\u53d6

\\[ \\begin{bmatrix} -1 & 0 & 1 \\\\ -2 & 0 & 2 \\\\ -1 & 0 & 1 \\end{bmatrix} \\] \\[ \\begin{bmatrix} -1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ 1 & 2 & 1 \\end{bmatrix} \\] \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 \u53cc\u8fb9\u6ee4\u6ce2\u5668

\u5f15\u5165

\u56fe\u50cf\u91c7\u6837(sampling)\u5206\u4e3a\u5411\u4e0a\u91c7\u6837(up-sampling)\u548c\u5411\u4e0b\u91c7\u6837(down-sampling)\u4e24\u79cd\u3002

\u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u5c31\u662f\u5728\u4fdd\u6301\u56fe\u50cf\u7279\u5f81\u7684\u60c5\u51b5\u4e0b\u5bf9\u56fe\u7247\u8fdb\u884c\u7f29\u653e\u3002\u663e\u7136\uff0c\u5728\u7f29\u653e\u56fe\u50cf\u65f6\uff0c\u4f1a\u51fa\u73b0\u50cf\u7d20\u6570\u91cf\u7684\u53d8\u5316\uff0c\u90a3\u8981\u5982\u4f55\u6dfb\u52a0\u50cf\u7d20\u3001\u5982\u4f55\u51cf\u5c11\u50cf\u7d20\uff0c\u5c31\u662f\u56fe\u50cf\u91c7\u6837\u8003\u8651\u7684\u4e8b\u60c5\u3002

\u6b64\u5916\uff0c\u5c06\u4e24\u8005\u7ed3\u5408\uff0c\u8fd8\u4f1a\u6709\u4f8b\u5982\u6539\u53d8\u56fe\u7247\u957f\u5bbd\u6bd4\uff0c\u8fdb\u884c\u62c9\u4f38\u8fd9\u79cd\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7f29\u5c0f\u56fe\u7247\u5411\u4e0b\u91c7\u6837","title":"\u7f29\u5c0f\u56fe\u7247\uff1a\u5411\u4e0b\u91c7\u6837","text":"

\u5411\u4e0b\u91c7\u6837\u4e5f\u5c31\u662f\u8ba9\u56fe\u7247\u53d8\u5c0f\uff0c\u8fd9\u91cc\u4e3b\u8981\u9700\u8981\u8003\u8651\u7684\u95ee\u9898\u662f\u5982\u4f55\u7f29\u5c0f\u56fe\u7247\uff0c\u5982\u4f55\u907f\u514d\u51fa\u73b0\u4fe1\u53f7\u8d70\u6837\u7684\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u4fe1\u53f7\u8d70\u6837","title":"\u4fe1\u53f7\u8d70\u6837","text":"

\u8bf4\u5230\u8ba9\u56fe\u50cf\u53d8\u5c0f\uff0c\u6700\u7b80\u5355\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u2014\u2014\u6bd4\u5982\uff0c\u8ba9\u56fe\u7247\u7684\u7ebf\u5ea6\u7f29\u5c0f\u4e00\u534a\uff0c\u53ef\u4ee5\u6bcf\u56db\u4e2a\u683c\u5b50\u5c31\u91c7\u4e00\u4e2a\u683c\u5b50\u7684\u6837\u672c\u3002

\u800c\u8fd9\u79cd\u7c97\u66b4\u7684\u505a\u6cd5\u5219\u6709\u53ef\u80fd\u5bfc\u81f4\uff1a

-\u6469\u5c14\u7eb9(Moir\u00e9 Patterns)\u3002 -\u9a6c\u8f66\u8f6e\u9519\u89c9(Wagon Wheel Illusion) - ...

\u800c\u8fd9\u4e9b\u7531\u91c7\u6837\u5bfc\u81f4\u7684\u95ee\u9898\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4fe1\u53f7\u8d70\u6837(aliasing)\u3002

\u4ece\u672c\u8d28\u4e0a\u6765\u8bf4\uff0c\u4fe1\u53f7\u8d70\u6837\u7684\u53d1\u751f\uff0c\u662f\u56e0\u4e3a\u91c7\u6837\u9891\u7387\u8ddf\u4e0d\u4e0a\u56fe\u50cf\u9891\u7387\u5bfc\u81f4\u7684\u3002

Signals are changing too fast but sampled too slow.

\u5982\u4f55\u7406\u89e3\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d

\u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u4f1a\u7ed9\u51fa\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d\u7684\u6765\u6e90\u3002

\u4f46\u662f\u4e00\u4e2a\u66f4\u76f4\u89c2\uff0c\u66f4\u6a21\u7cca\u7684\u770b\u6cd5\u662f\uff1a\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u3002\u6bd4\u5982\u56fe\u50cf\u4e2d\u6709\u4e00\u4e2a\u975e\u5e38\u5206\u660e\u7684\u8fb9\u754c\uff0c\u90a3\u4e48\u5b83\u7684\u9891\u7387\u4e00\u822c\u4e0d\u4f1a\u4f4e\u3002

\u800c\u8fd9\u91cc\u7684\u201c\u91c7\u6837\u9891\u7387\u201d\u8861\u91cf\u4e86\u4fe1\u53f7\u53d8\u5316\u7684\u9891\u7387\u3002

\u6bd4\u5982\uff0c\u5982\u679c\u5bf9\u4e00\u4e2a\u6b63\u5f26\u6ce2\u8fdb\u884c\u91c7\u6837\uff0c\u5373\u4ece\u4e00\u4e2a\u8fde\u7eed\u7684\u6b63\u5f26\u6a21\u62df\u4fe1\u53f7\u4e2d\u9009\u53d6\u82e5\u5e72\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u540c\u91c7\u6837\u9891\u7387\u548c\u4e0d\u540c\u7684\u56fe\u50cf\u9891\u7387\u7684\u9009\u53d6\u65b9\u6848\u4f1a\u4ea7\u751f\u4e0d\u540c\u7684\u7ed3\u679c\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e0a\u9762\u7684\u51e0\u4e2a\u51fd\u6570\uff0c\u91c7\u6837\u9891\u7387\u548c\u539f\u51fd\u6570\u7684\u9891\u7387\u5339\u914d\u8f83\u597d\uff0c\u6240\u4ee5\u91c7\u6837\u5f97\u5230\u7684\u70b9\u57fa\u672c\u80fd\u53cd\u6620\u51fa\u539f\u6765\u56fe\u5f62\u7684\u7279\u5f81\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bd4\u8f83\u4e0b\u9762\u7684\u51e0\u4e2a\u66f2\u7ebf\uff0c\u91c7\u6837\u5c31\u4e0d\u662f\u5f88\u7406\u60f3\u4e86\u3002

\u6bd4\u8f83\u76f4\u89c2\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u8fc7\u6162\u70b9\u91c7\u6837\u9891\u7387\u4f1a\u5bfc\u81f4\u4fe1\u606f\u4e22\u5931\uff0c\u751a\u81f3\u662f\u8868\u73b0\u51fa\u5176\u5b83\u9891\u7387\u7684\u4fe1\u53f7\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u4e0d\u6b63\u5e38\u7684\u884c\u4e3a\u5c31\u5bfc\u81f4\u4e86\u4fe1\u53f7\u8d70\u6837\u3002

\u8fd9\u4e2a\u201c\u9891\u7387\u201d\u548c\u56fe\u50cf\u6709\u4ec0\u4e48\u5173\u7cfb\uff1f

\u9996\u5148\u6211\u4eec\u77e5\u9053\uff0c\u8981\u5411\u6709\u201c\u9891\u7387\u201d\u8fd9\u4e2a\u5c5e\u6027\uff0c\u8868\u8fbe\u5f0f\u6216\u8005\u8bf4\u51fd\u6570\u9700\u8981\u662f\u5468\u671f\u6027\u7684\u3002\u7136\u800c\u201c\u5468\u671f\u6027\u201d\u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\u6765\u8bf4\u53ef\u80fd\u662f\u4e00\u4e2a\u8f83\u4e3a\u82db\u523b\u7684\u6761\u4ef6\u3002

\u6b64\u65f6\u5c31\u8f6e\u5230\u5085\u7acb\u53f6\u53d8\u6362\u767b\u573a\u4e86\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#fourier-\u53d8\u6362","title":"Fourier \u53d8\u6362","text":"

\u6700\u7b80\u5355\u76f4\u767d\u5730\u7406\u89e3\u5085\u7acb\u53f6\u53d8\u6362(Fourier Transform)\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5c06\u4efb\u610f\u53ef\u4ee5\u8fdb\u884c\u5085\u7acb\u53f6\u53d8\u6362\u7684\u51fd\u6570\uff0c\u53d8\u5316\u4e3a\u4e00\u4e2a\u6b63\u5f26\u3001\u4f59\u5f26\u51fd\u6570\u7ea7\u6570\u7684\u5f62\u5f0f\u3002

\u4f8b\u5982\u6700\u7ecf\u5178\u7684\uff0c\u4f7f\u7528\u4e0d\u540c\u9891\u7387\u7684\u6b63\u5f26\u6ce2\u6765\u62df\u5408\u4e00\u4e2a\u65b9\u6ce2\u3002

\u8fd9\u91cc\u5f15\u6d41\u4e00\u4e2a xg \u7684\u89c6\u9891\uff1ahttps://www.bilibili.com/video/BV1Y7411W73U/

\u6b64\u65f6\u4f60\u53ef\u80fd\u4f1a\u95ee\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u7ea7\u6570\u4e5f\u4e0d\u4fdd\u8bc1\u6709\u5468\u671f\u554a\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u7684\u76ee\u7684\u5e76\u4e0d\u662f\u627e\u5230\u4e00\u4e2a\u5468\u671f\uff0c\u800c\u662f\u80fd\u591f\u4f7f\u7528\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u7684\u67d0\u4e9b\u7279\u5f81\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u662f\u5177\u6709\u5468\u671f\u6027\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u7528\u8fd9\u4e2a\u7ea7\u6570\u4e2d\u7684\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u3002

\u4e0b\u9762\u8fd9\u5f20\u56fe\u7247\u5c31\u662f\u7f16\u7801\u540e\u7684\u9891\u8c31\u3002

\u800c\u5728\u6b27\u62c9\u516c\u5f0f \\(e^{i\\theta} = \\cos\\theta + i\\sin\\theta\\) \u7684\u7edf\u4e00\u4e0b\uff0cFourier \u53d8\u6362\u53ef\u4ee5\u8868\u793a\u4e3a\uff1a

\\[ F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x \\\\ f(x) = \\int^{\\infty}_{-\\infty} F(u) e^{i2\\pi ux} \\rm{d} u \\\\ \\text{ where 'x' refers to space, 'u' refers to frequency} \\]

\u901a\u8fc7\u8fd9\u79cd\u5f62\u5f0f\uff0c\u6211\u4eec\u5b9e\u73b0\u4e86 spatial domain \u548c frequency domain \u4e4b\u95f4\u7684\u7edf\u4e00\u3002

graph LR;\nA([\"spatial domain\"]) ==>|\"Fourier transform\"| B([\"frequency domain\"])\nB ===>|\"Inverse transform\"| A

\u5c1d\u8bd5\u4f7f\u7528\u5377\u79ef\u7684\u89d2\u5ea6\u6765\u770b\u5085\u7acb\u53f6\u53d8\u6362

\u89c2\u5bdf\u5f0f\u5b50 \\(F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x\\)\uff0c\u662f\u4e0d\u662f\u80fd\u5c06\u5b83\u770b\u4f5c\u4e00\u4e2a\u5377\u79ef\u5f0f\u5462\uff1f

\u4e00\u4e2a\u6709\u610f\u601d\u7684\u6027\u8d28

\u800c\u4f7f\u7528 Fourier \u7684\u53e6\u5916\u4e00\u4e2a\u597d\u5904\u662f\uff0c\u5b83\u4e3a\u6211\u4eec\u5e26\u6765\u4e86\u8fd9\u6837\u4e00\u4e2a\u6570\u5b66\u6027\u8d28\uff1a

Spatial Domain Frequency Domain \\(g(x) = f(x) * h(x)\\) Convolution \\(\\leftrightarrow\\) \\(G(u) = F(u)H(u)\\) Multiplication g(x)=f(x)h(x) Multiplication \\(\\leftrightarrow\\) \\(G(u) = F(u) * H(u)\\) Convolution

\u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982\uff1a

\u6211\u4eec\u5bf9\u4e00\u4e2a\u56fe\u50cf\u8fdb\u884c\u6a21\u7cca\u5904\u7406\uff0c\u5373\u5c06\u56fe\u50cf\u4e0e Blur Kernel \u8fdb\u884c\u5377\u79ef\uff0c\u5c31\u7b49\u6548\u4e8e\u5c06\u8fd9\u4e24\u4e2a\u77e9\u9635\u5728\u9891\u7387\u57df\u4e2d\u76f8\u4e58\u3002

\u800c\u4f20\u7edf\u56fe\u50cf\u538b\u7f29\uff0c\u5bf9\u5e94\u5230\u9891\u7387\u57df\u4e0a\uff0c\u5c31\u662f\u5c06\u4ed6\u4eec\u7684\u4e8c\u7ef4\u9891\u8c31\u4e2d\u7684\u9ad8\u9891\u4e22\u6389\u3002

\u90a3\u4e48\u5f97\u5230 Fourier \u53d8\u6362\u8fd9\u4e2a\u5de5\u5177\u4ee5\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5c06\u8f83\u96be\u5904\u7406\u7684\u50cf\u7d20\u4fe1\u606f\u8f6c\u5316\u4e3a\u9891\u7387\u4fe1\u606f\u3002

\u5982\u4e0b\u56fe\uff0c\u5c06\u4e00\u5f20\u56fe\u7247\u4fe1\u606f\u7f16\u7801\u4e3a\u4e86\u9891\u8c31\u7684\u5f62\u5f0f\u3002\u7531\u4e8e\u8fd9\u91cc\u7684\u9891\u8c31\u662f\u4e8c\u7ef4\u7684\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u5f20\u7070\u5ea6\u56fe\u8868\u73b0\u51fa\u6765\u3002

\u597d\uff0c\u6709\u4e86\u8fd9\u4e9b\u94fa\u57ab\uff0c\u6211\u4eec\u5728\u56de\u5934\u6765\u8bb2\u91c7\u6837\uff0c\u8fd9\u6b21\u6211\u4eec\u5c06\u5c1d\u8bd5\u7740\u540c\u65f6\u4ece Spatial domain \u548c Frequency domain \u7684\u89d2\u5ea6\u6765\u770b\u5f85\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u91c7\u6837","title":"\u91c7\u6837","text":"

\u9996\u5148\uff0c\u6211\u4eec\u4ece\u5b57\u9762\u610f\u601d\u4e0a\u548c\u76ee\u7684\u4e0a\u6765\u7406\u89e3\u4e00\u4e0b\u91c7\u6837\u3002

wiki \u4e0a\u5bf9\u91c7\u6837\u7684\u5b9a\u4e49\u662f\u8fd9\u6837\u7684\uff1a

\u5728\u4fe1\u53f7\u5904\u7406\u9886\u57df\uff0c\u91c7\u6837\u662f\u5c06\u4fe1\u53f7\u4ece\u8fde\u7eed\u65f6\u95f4\u57df\u4e0a\u7684\u6a21\u62df\u4fe1\u53f7\u8f6c\u6362\u5230\u79bb\u6563\u65f6\u95f4\u57df\u4e0a\u7684\u79bb\u6563\u4fe1\u53f7\u7684\u8fc7\u7a0b\u3002

\u663e\u7136\uff0c\u6211\u4eec\u8fd9\u91cc\u91c7\u6837\u7684\u5b9a\u4e49\u548c\u8fd9\u91cc\u7684\u5b9a\u4e49\u5e76\u4e0d\u4e00\u6837\u3002\u4e0e\u4e4b\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u9700\u8981\u4ece\u539f\u59cb\u7684\uff0c\u8fd1\u4f3c\u8fde\u7eed\u7684\u56fe\u7247\u4e2d\u63d0\u53d6\u51fa\u5177\u6709\u7279\u5f81\u7684\u4e00\u4e9b\u540c\u6837\u662f\u79bb\u6563\u7684\u7684\u4fe1\u606f\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6211\u4eec\u5c06\u56fe\u7247\u8fdb\u884c\u653e\u5927\u7f29\u5c0f\u53d8\u6362\u7684\u76ee\u7684\u3002

\u5173\u4e8e\u91c7\u6837\u66f4\u6570\u5b66\u7684\u5b9a\u4e49\uff0c\u5c31\u662f\u4f7f\u7528\uff08\u68b3\u5f62\uff09\u8109\u51b2\u51fd\u6570(Dirac comb function)\u53bb\u4e58\u88ab\u91c7\u6837\u7684\u51fd\u6570\u3002

\u53d6\u51b3\u4e8e\u8109\u51b2\u51fd\u6570\u7684\u9891\u7387\uff0c\u91c7\u6837\u53c8\u88ab\u5206\u4e3a\u5bc6\u96c6\u91c7\u6837(Dense sampling)\u548c\u7a00\u758f\u91c7\u6837(Sparse sampling)\uff0c\u4e5f\u5c31\u5206\u522b\u5bf9\u5e94\u7740\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u91c7\u6837\u9891\u7387\u8f83\u9ad8\u548c\u91c7\u6837\u9891\u7387\u8f83\u4f4e\u7684\u60c5\u51b5\u3002

\u800c\u7a00\u758f\u91c7\u6837\u5bfc\u81f4\u7684\u4fe1\u53f7\u8d70\u6837\u95ee\u9898\uff0c\u5c31\u662f\u91c7\u6837\u7ed3\u679c\u518d\u9891\u7387\u57df\u4e2d\u51fa\u73b0\u4e86\u4ea4\u96c6\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u51cf\u5c11\u8d70\u6837","title":"\u51cf\u5c11\u8d70\u6837","text":"

\u65e2\u7136\u641e\u6e05\u695a\u4e86\u8d70\u6837\u662f\u5982\u4f55\u4ea7\u751f\u7684\uff0c\u90a3\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u9700\u8981\u8003\u8651\u5982\u4f55\u51cf\u5c11\u4fe1\u53f7\u8d70\u6837\u3002

\u603b\u4f53\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e24\u79cd\u9009\u62e9\uff1a

  1. \u63d0\u9ad8\u91c7\u6837\u9891\u7387\uff1b
  2. \u5148\u8fc7\u6ee4\u9ad8\u9891\u518d\u91c7\u6837\uff1b

\u9996\u5148\u6211\u4eec\u56de\u987e\u77e5\u9053\uff0c\u8d70\u6837\u662f\u7531\u4e8e\u91c7\u6837\u9891\u7387\u4f4e\u4e8e\u56fe\u50cf\u9ad8\u9891\u5bfc\u81f4\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u53ea\u9700\u8981\u63d0\u9ad8\u91c7\u6837\u9891\u7387\u5c31\u80fd\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u4e86\u3002

\u800c\u5177\u4f53\u9700\u8981\u63d0\u9ad8\u5230\u591a\u5c11\u5462\uff1f\u5c31\u9700\u8981\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406(Nyquies-Shannon Theorem)\u3002

\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406

\u5f53\u7136\uff0c\u4e3a\u4e86\u8de8\u8fc7\u4e00\u4e2a\u66f4\u9ad8\u7684\u95e8\u69db\u6211\u4eec\u4e5f\u4e0d\u4e00\u5b9a\u9700\u8981\u589e\u957f\u81ea\u5df1\u7684\u817f\u3002\u5728\u80fd\u591f\u63a5\u53d7\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u964d\u4f4e\u95e8\u69db\u2014\u2014\u5373\uff0c\u5148\u5c06\u9ad8\u9891\u6ee4\u6ce2\uff0c\u518d\u8fdb\u884c\u91c7\u6837\u3002

\u66f4\u5f62\u8c61\u5730\u6765\u8bf4\uff0c\u5728\u9891\u7387\u57df\u4e2d\u53bb\u6389\u4ea4\u96c6\u7684\u624b\u6bb5\u4e3a\uff1a

\u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f

\u56de\u987e\u6211\u4eec\u4e00\u5f00\u59cb\u7ed9\u51fa\u7684\uff0c\u5173\u4e8e\u9891\u7387\u7684\u4e00\u4e2a\u6a21\u7cca\u7684\u7406\u89e3\uff0c\u201c\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u201d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u6d88\u53bb\u8fd9\u4e2a\u9ad8\u9891\uff0c\u6211\u4eec\u5c31\u9700\u8981\u8ba9\u62b9\u53bb\u8fd9\u4e9b\u201c\u53d8\u5316\u5267\u70c8\u201d\u7684\u6210\u5206\u3002\u518d\u63a5\u5730\u6c14\u4e00\u70b9\uff0c\u5c31\u662f\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e9b\u68f1\u89d2\u62b9\u5f00\u2014\u2014\u6240\u4ee5\u4e00\u79cd\u624b\u6bb5\u5c31\u662f\u8fdb\u884c\u6a21\u7cca\u3002

\u4e00\u4e2a\u76f4\u89c2\u7684 \ud83c\udf30

\u6211\u4eec\u4ee5\u5bf9\u4e00\u4e2a\u4e09\u89d2\u5f62\u91c7\u6837\u4e3a\u4f8b\uff0c\u8bf4\u660e\u5982\u4f55\u6ee4\u9ad8\u9891\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u76f4\u63a5\u91c7\u6837\u4f1a\u5bfc\u81f4\u7ed3\u679c\u4e0d\u592a\u7406\u60f3\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u91c7\u6837\u4e4b\u524d\u8fdb\u884c\u4e00\u6b21\u6a21\u7cca\u64cd\u4f5c\uff1a

\u5b83\u5c06\u8d85\u8fc7\u5948\u594e\u65af\u9891\u7387\u7684\u90e8\u5206\u6ee4\u6ce2\u540e\uff0c\u660e\u663e\u53d1\u73b0\u91c7\u6837\u4fdd\u7559\u7684\u539f\u672c\u56fe\u50cf\u7684\u7279\u5f81\u66f4\u591a\u4e86\u3002

\u800c\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u4e00\u4e2a\u6bd4\u8f83\u8d34\u8fd1\u65e5\u5e38\u751f\u6d3b\u7684\u8bcd\uff0c\u53eb\u6297\u952f\u9f7f(anti-aliasing)\uff0c\u6216\u8005\u8bf4\u53cd\u8d70\u6837\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","title":"\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","text":"

\u9996\u5148\u89c4\u5b9a\u9891\u5e26\u9650\u5236\u4fe1\u53f7(band-limited signal) \\(f_0\\) \u662f\u56fe\u50cf\u9891\u7387\u7684\u4e00\u4e2a\u4e0a\u754c\uff1b\u5219\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406\u6307\u51fa\uff0c\u5982\u679c\u91c7\u6837\u9891\u7387\u5927\u4e8e \\(2f_0\\)\uff0c\u5219\u8be5\u91c7\u6837\u5f97\u5230\u7684\u7ed3\u679c\u53ef\u4ee5\u5b8c\u7f8e\u8868\u5f81\u539f\u51fd\u6570\u7684\u7279\u5f81\uff0c\u5373 \"perfectly reconstruct\"\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u653e\u5927\u56fe\u7247\u5411\u4e0a\u91c7\u6837--\u63d2\u503c","title":"\u653e\u5927\u56fe\u7247\uff1a\u5411\u4e0a\u91c7\u6837 / \u63d2\u503c","text":"

\u56fe\u50cf\u653e\u5927(image magnification)\u662f\u56fe\u50cf\u7f29\u5c0f\u7684\u9006\u53d8\u6362(\u5e9f\u8bdd)\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5e76\u4e0d\u80fd\u4e25\u683c\u5730\u8bf4\u662f\u9006\u53d8\u6362\uff0c\u56e0\u4e3a\u56fe\u50cf\u7f29\u5c0f\u4e0e\u56fe\u50cf\u653e\u5927\u90fd\u662f\u4e0d\u53ef\u9006\u7684\u2014\u2014\u5373\uff0c\u56fe\u7247\u7f29\u5c0f\u5fc5\u7136\u5e26\u5566\u50cf\u7d20\u635f\u5931\uff0c\u56fe\u50cf\u653e\u5927\u5fc5\u7136\u5e26\u6765\u4e00\u4e9b\u901a\u8fc7\u8ba1\u7b97\u5f97\u5230\u7684\u8fd1\u4f3c\u50cf\u7d20\uff0c\u800c\u8fd9\u4e9b\u50cf\u7d20\u5728\u53d8\u6362\u5f97\u5230\u7684\u7ed3\u679c\u56fe\u50cf\u4e2d\u4e0e\u539f\u672c\u50cf\u7d20\u662f\u65e0\u6cd5\u533a\u5206\u7684\u3002

\u90a3\u4e48\uff0c\u5355\u5c31\u56fe\u50cf\u653e\u5927\u6765\u8bf4\uff0c\u6211\u4eec\u5c31\u9700\u8981\u6839\u636e\u5df2\u6709\u7684\u50cf\u7d20\uff0c\u8fdb\u884c\u4e00\u4e9b\u63d2\u503c(interpolation)\u64cd\u4f5c\uff0c\u4ee5\u751f\u6210\u90a3\u4e9b\u653e\u5927\u8fc7\u7a0b\u4e2d\u65b0\u51fa\u73b0\u7684\u50cf\u7d20\u3002

\u6211\u4eec\u4ece\u5bf9\u4e00\u4e2a\u4e00\u5143\u4e00\u7ef4\u51fd\u6570\u63d2\u503c\u7684\u89d2\u5ea6\u6765\u770b\u8fd9\u4e2a\u95ee\u9898\uff0c\u5373\u628a\u8fd9\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u5728\u91c7\u6837\u5f53\u4e2d\u63d2\u5165\u70b9\u7684\u95ee\u9898\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u73b0\u5728\u6709\u4e00\u4e2a\u6765\u81ea\u4e8e\u6b63\u5f26\u51fd\u6570\u7684\u91c7\u6837\uff0c\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728 \\(x\\in(x_i,x_{i+1})\\) \u4e2d\u63d2\u5165\u4e00\u4e2a\u70b9 \\((x_{ip}, y_{ip})\\) \u4f7f\u5f97\u5b83\u5c3d\u53ef\u80fd\u7b26\u5408\u539f\u672c\u7684\u6b63\u5f26\u51fd\u6570\u2014\u2014\u53c8\u6216\u8005\u8bf4\uff0c\u4f7f\u5f97\u5b83\u770b\u8d77\u6765\u5c3d\u53ef\u80fd\u5408\u7406\u3002

\u800c\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u518d\u8fdb\u4e00\u6b65\u5730\u601d\u8003\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5229\u7528\u73b0\u6709\u7684\u70b9\u53bb\u62df\u5408\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u7136\u540e\u518d\u7528\u8fd9\u4e2a\u51fd\u6570\u4e0a\u53d6\u7684\u70b9\u4f5c\u4e3a\u63d2\u5165\u7684\u70b9\u3002

\u90a3\u4e48\u6bd4\u8f83\u5e38\u89c1\u7684\u201c\u62df\u5408\u201d\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

1.\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff1b 2.\u7ebf\u6027\u63d2\u503c(linear interpolation)\uff1b 3.(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\uff1b

\u63a5\u4e0b\u6765\u6211\u4eec\u4e00\u4e00\u4ecb\u7ecd\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6700\u8fd1\u63d2\u503c","title":"\u6700\u8fd1\u63d2\u503c","text":"

\u6240\u8c13\u7684\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff0c\u5b9e\u9645\u4e0a\u4e0e KNN \u7684 K=1 \u7684\u7279\u6b8a\u60c5\u51b5\u3002\u5373\uff0c\\(y(x) = y(x_{\\mathop{argmin}(|x-x_i|)})\\)\u3002\u8bf4\u4eba\u8bdd\u5c31\u662f\u6a2a\u5750\u6807\u79bb\u54ea\u4e2a\u8fd1\uff0c\u5c31\u548c\u54ea\u4e2a\u4e00\u6837\u3002

\u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

\u89c2\u5bdf\u8fd9\u6761\u84dd\u8272\u66f2\u7ebf\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b83\u5177\u6709\u8fd9\u51e0\u4e2a\u7279\u5f81\uff1a

\u800c\u4e14\u62cd\u8111\u74dc\u60f3\u60f3\u4e5f\u80fd\u611f\u53d7\u5230\uff0c\u8fd9\u79cd\u63d2\u503c\u7684\u65b9\u6cd5\u5e76\u4e0d\u4f18\u96c5\u2014\u2014\u4e00\u5f20\u56fe\u7247\u653e\u5927\u540e\u4e00\u4e2a\u50cf\u7d20\u7684\u989c\u8272\u53d6\u51b3\u4e8e\u6700\u8fd1\u7684\u91c7\u6837\u50cf\u7d20\u989c\u8272\u2014\u2014\u5728\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e76\u4e0d\u5e0c\u671b\u6709\u8fd9\u6837\u7684\u7ed3\u679c\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7ebf\u6027\u63d2\u503c","title":"\u7ebf\u6027\u63d2\u503c","text":"

\u7ebf\u6027\u63d2\u503c(linear interpolation)\u5c31\u662f\u76f4\u63a5\u505a\u8fde\u7ebf\uff0c\u5c06\u76f8\u90bb\u7684\u70b9\u4e24\u4e24\u7528\u76f4\u7ebf\u8fde\u8d77\u6765\uff0c\u7ed8\u5236\u51fa\u4e00\u4e2a\u6298\u7ebf\u56fe\u3002

\u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u76f8\u6bd4\u4e8e\u6700\u8fd1\u63d2\u503c\uff0c\u7ebf\u6027\u63d2\u503c\u5bf9\u539f\u51fd\u6570\u7684\u62df\u5408\u6027\u76f8\u5bf9\u6765\u8bf4\u597d\u4e86\u5f88\u591a\uff0c\u800c\u4e14\u53d8\u5f97\u8fde\u7eed\u4e86\uff0c\u89c2\u5bdf\u84dd\u8272\u66f2\u7ebf\uff0c\u53d1\u73b0\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

\u4e8e\u662f\u6211\u4eec\u7ee7\u7eed\u6539\u8fdb\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

\u987e\u540d\u601d\u4e49\uff0c(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\u5c31\u662f\u4f7f\u7528\u591a\u9879\u5f0f\u51fd\u6570\u6bb5\u6765\u62df\u5408\u91c7\u6837\u533a\u95f4\u3002

\u8fd9\u91cc\u9700\u8981\u505a\u4e00\u4e2a\u8fa8\u6790\uff1a\u5e76\u4e0d\u662f\u7528\u4e00\u4e2a\u591a\u9879\u5f0f\u6765\u62df\u5408\u6240\u6709\u7684\u91c7\u6837\u70b9\uff0c\u800c\u662f\u7528\u591a\u9879\u5f0f\u6765\u62df\u5408\u4e00\u5bf9\u91c7\u6837\u70b9\uff0c\u5373\u4e00\u4e2a interval\u3002

\u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

\u5176\u4e2d\uff0c\u6bcf\u4e00\u6bb5 interval \u7684\u84dd\u8272\u7ebf\u6761\u90fd\u7b26\u5408 \\(f_i(x) = a_ix^3 + b_ix^2 + c_ix + d_i, x \\in [x_i, x_{i+1}]\\)\uff1b\u5e76\u4e14\u6211\u4eec\u4fdd\u8bc1\u5728\u91c7\u6837\u70b9\u5904\u5b83\u4eec\u90fd\u662f\u5149\u6ed1\u7684\uff0c\u5373\u4fdd\u8bc1 \\(\\forall i, \\frac{\\mathrm{d}f_i(x_{i+1})}{\\mathrm{d} x} = \\frac{\\mathrm{d}f_{i+1}(x_{i+1})}{\\mathrm{d} x}\\)

\u4e8e\u662f\uff0c\u5b83\u81ea\u7136\u5c31\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

  1. \u8fde\u7eed\uff1b
  2. \u5149\u6ed1\uff1b

\u66f4\u5177\u4f53\u7684

\u521a\u624d\u8bb2\u7684\u90fd\u662f\u4ece\u4e00\u7ef4\u51fd\u6570\u7684\u89d2\u5ea6\u6765\u601d\u8003\u63d2\u503c\uff0c\u73b0\u5728\u6211\u4eec\u6765\u4ecb\u7ecd\u4e00\u4e9b\u5728\u4e8c\u7ef4\u5c42\u9762\u505a\u63d2\u503c\u7684\u6848\u4f8b\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc\u7ebf\u6027\u63d2\u503c","title":"\u53cc\u7ebf\u6027\u63d2\u503c","text":"

\u53cc\u7ebf\u6027\u63d2\u503c(bilinear interpolation)\u5c31\u662f\u5728\u4e8c\u7ef4\u5e73\u9762\u5185\u505a\u7ebf\u6027\u63d2\u503c\uff0c\u601d\u8def\u975e\u5e38\u7b80\u5355\u3002

\u5982\u56fe\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u7ea2\u70b9\u5904\u8fdb\u884c\u63d2\u503c\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4f1a\u9009\u53d6\u4e0e\u4e4b\u76f8\u90bb\u7684\u56db\u4e2a\u70b9\uff0c\\(u_{ij},\\;\\; i,j\\in \\{0,1\\}\\)\uff0c\u518d\u6839\u636e\u8fd9\u4e2a\u70b9\u5728\u8fd9\u4e2a\u77e9\u9635\u4e2d\u7684\u4f4d\u7f6e\u8fdb\u884c\u6c42\u503c\u3002

\u5177\u4f53\u8ba1\u7b97\u65b9\u6cd5

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"\u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

wiki \ud83d\udd17

\u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(bicubic interpolation)\u5373\u5728\u4e8c\u7ef4\u5e73\u9762\u505a(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c\uff0c\u5b9e\u73b0\u601d\u8def\u4e0e\u53cc\u7ebf\u6027\u63d2\u503c\u662f\u7c7b\u4f3c\u7684\u3002

\\[ p(x,y) = \\sum_{i=0}^{3}\\sum_{j=0}^{3}a_{i,j}x^iy^j \\]

What's '4' means here?

\u8d85\u5206\u8fa8\u7387

\u5728\u5f97\u5230\u8fd9\u4e9b\u63d2\u503c\u7b56\u7565\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f15\u51fa\u8d85\u5206\u8fa8\u7387(Super-Resolution)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5373\u901a\u8fc7\u63d2\u503c\uff0c\u6211\u4eec\u5c06\u4e00\u5f20\u56fe\u7247\u7684\u5206\u8fa8\u7387\u63d0\u9ad8\uff0c\u5f97\u5230\u8d85\u8fc7\u539f\u6709\u56fe\u7247\u5206\u8fa8\u7387\u7684\u4e00\u5f20\u56fe\u7247\u3002

\u4f8b\u5982\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u4e2a\u5bf9\u6bd4\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u591a\u9879\u5f0f\u63d2\u503c\u7684\u8868\u73b0\u6bd4\u7ebf\u6027\u63d2\u503c\u7684\u8868\u73b0\u597d\u4e0d\u5c11\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","title":"\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","text":"

\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4(aspect ratio)\u8fd9\u4ef6\u4e8b\u8c8c\u4f3c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u5355\u7ef4\u5ea6\u4e0a\u8fdb\u884c\u7f29\u653e\u6765\u5b9e\u73b0\uff08\u8fdb\u884c\u4e00\u7ef4\u63d2\u503cor\u91c7\u6837\uff09\uff0c\u4f46\u662f\u662f\u5426\u5b58\u5728\u522b\u7684\u65b9\u6cd5\uff0c\u4e0d\u5927\u5e45\u6539\u53d8\u6574\u4f53\u56fe\u50cf\u5f62\u72b6\u7684\u60c5\u51b5\u4e0b\uff0c\u5b9e\u73b0\u8be5\u5f7c\u5cb8\u957f\u5bbd\u6bd4\u5462\uff1f

\u5b9e\u9645\u4e0a\uff0c\u6709\u4e00\u4e2a\u505a\u6cd5\u5c31\u662f\u5077\u5077\u5220\u6389\u51e0\u884c/\u51e0\u5217\u50cf\u7d20\uff0c\u5bf9\u4eba\u773c\u6765\u8bf4\u8fd9\u8c8c\u4f3c\u662f\u96be\u4ee5\u5bdf\u89c9\u7684\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u505a\u4e00\u4e9b\u6539\u8fdb\uff0c\u6211\u4eec\u8fd9\u6b21\u4e0d\u662f\u66b4\u529b\u7684\u5220\u9664\u4e00\u884c\u6216\u4e00\u5217\uff0c\u800c\u662f\u6709\u9009\u62e9\u6027\u7684\uff0c\u5728\u6bcf\u4e00\u884c\u91cc\u5220\u9664\u51e0\u4e2a\u50cf\u7d20\u3002\u4e3a\u4e86\u4fdd\u8bc1\u56fe\u50cf\u4e0d\u9519\u4f4d\uff0c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e9b\u9009\u4e2d\u7684\u50cf\u7d20\u53ef\u4ee5\u88ab\u770b\u4f5c\u56fe\u50cf\u4e0a\u7684\u201c\u88c2\u7f1d\u201d\uff0c\u5373\u4e00\u6761\u5f2f\u5f2f\u66f2\u66f2\u7684\u66f2\u7ebf\u3002

\u8fd9\u79cd\u505a\u6cd5\u53ebseam carving\uff0c\u6211\u4eec\u9700\u8981\u627e\u5230\u6bd4\u8f83\u4e0d\u91cd\u8981\u7684\u4e00\u8fde\u4e32\u8fde\u7eed\u50cf\u7d20\u3002\u800c\u8fd9\u91cc\u7684\u201c\u4e0d\u91cd\u8981\u201d\uff0c\u6307\u7684\u5c31\u662f\u90a3\u4e9b\u53d8\u5316\u4e0d\u90a3\u4e48\u5267\u70c8\u7684\u50cf\u7d20\uff0c\u5373\u4e0e\u5468\u56f4\u5341\u5206\u76f8\u8fd1\u7684\u70b9\u3002

\u66f4\u6570\u5b66\u7684\u8868\u8ff0\u662f\uff1a

\u800c\u81f3\u4e8e\u5bfb\u627e\u6700\u77ed\u8def\u7684\u7b97\u6cd5\uff0c\u5219\u662f\u4e2a dp \u95ee\u9898\uff0c\u5728\u8fd9\u91cc\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/","title":"Lecture 4 | Model Fitting and Optimization","text":"

\u7ea6 4135 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 14 \u5206\u949f

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4f18\u5316","title":"\u4f18\u5316","text":"

\u9996\u5148\u6211\u4eec\u6765\u5b9a\u4e49\u4e00\u4e2a\u4f18\u5316(Optimization)\u95ee\u9898\u7684\u6a21\u578b\uff1a

\u4f18\u5316\u95ee\u9898\u7684\u6a21\u578b

\u8bbe\u76ee\u6807\u51fd\u6570\\(f_0(\\vec x)\\) \u6ee1\u8db3\u7ea6\u675f\u6761\u4ef6\uff1a

\\[ \\left\\{ \\begin{aligned} f_i(\\vec x) &\\leq 0, &i = 1,...,m & \\text{inequality constraint functions} \\\\ g_i(\\vec x) &= 0, &i = 1,...,p & \\text{equality constraint functions}& \\end{aligned} \\right. \\]

\u6c42 \\(\\vec x\\in \\mathrm{R}^n\\) \uff0c\u4f7f \\(f_0(\\vec{x})\\) \u6700\u5c0f\uff08\u5373\u6700\u4f18\uff09\u3002

\u5f88\u663e\u7136\uff0c\u8fd9\u548c\u6211\u4eec\u9ad8\u4e2d\u63a5\u89e6\u7684\u7ebf\u6027\u89c4\u5212\u5f88\u50cf\uff0c\u5b9e\u9645\u4e0a\u7ebf\u6027\u89c4\u5212\u5c31\u662f\u5176\u4e2d\u4e00\u79cd\u4f18\u5316\u95ee\u9898\u3002

\u800c\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u590d\u6742\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5373\u6839\u636e\u95ee\u9898\uff0c\u5199\u51fa\u76ee\u6807\u51fd\u6570\u548c\u7ea6\u675f\u6761\u4ef6\uff0c\u5e76\u901a\u8fc7\u4e00\u4e9b\u65b9\u6cd5\u6765\u5f97\u5230\u6211\u4eec\u9700\u8981\u7684 \\(\\vec x\\)\u3002

\ud83c\udf30 \u56fe\u50cf\u53bb\u6a21\u7cca\u95ee\u9898

\u5728\u8fd9\u4e2a \ud83c\udf30 \u4e2d\uff0c\u6211\u4eec\u5df2\u77e5\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u548c\u6a21\u7cca\u6ee4\u6ce2\u5668(\u5377\u79ef\u6838) \\(F\\)\uff0c\u9700\u8981\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u6765\u6c42\u5377\u79ef\u8fd0\u7b97\u4e4b\u524d\u7684\u6e05\u6670\u56fe\u50cf \\(X\\)\u3002

\u8fdb\u4e00\u6b65\u6765\u8bf4\uff0c\u5c31\u662f\u627e\u5230\u6e05\u6670\u7684\u56fe\u50cf \\(X\\)\uff0c\u4f7f\u5f97\u5b83\u505a\u6a21\u7cca\u5904\u7406\u540e\u4e0e\u5df2\u77e5\u7684\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u5dee\u522b\u5c3d\u53ef\u80fd\u5c0f\uff0c\u4e8e\u662f\u95ee\u9898\u8f6c\u5316\u4e3a\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6a21\u578b\u62df\u5408","title":"\u6a21\u578b\u62df\u5408","text":"

\u4e3a\u4e86\u7814\u7a76\u5206\u6790\u5b9e\u9645\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u4e00\u4e2a\u5efa\u6a21\uff0c\u66f4\u5177\u4f53\u7684\u6765\u8bf4\u5c31\u662f\u6839\u636e\u5b9e\u9645\u60c5\u51b5\uff0c\u5bfb\u627e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5e76\u5efa\u7acb\u6570\u5b66\u6a21\u578b\u3002

\u4e00\u4e2a\u6570\u5b66\u6a21\u578b(model)\u63cf\u8ff0\u95ee\u9898\u4e2d\u8f93\u5165\u548c\u8f93\u51fa\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a\u7ebf\u6027\u6a21\u578b(linear model) \\(b = a^T x\\) \u5c31\u63cf\u8ff0\u4e86\u8f93\u5165(input) \\(a\\) \u548c\u8f93\u51fa(output) \\(b\\) \u5173\u4e8e\u6a21\u578b\u53c2\u6570(model parameter) \\(x\\) \u7684\u5173\u7cfb\u3002

\u800c\u5b9e\u9645\u7684\u7ed3\u679c\u5f88\u96be\u4e25\u683c\u6ee1\u8db3\u6570\u5b66\u6a21\u578b\uff0c\u8fd9\u662f\u7531\u591a\u65b9\u539f\u56e0\u5bfc\u81f4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5f80\u5f80\u505a\u7684\u662f\u5bf9\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u6a21\u578b\u62df\u5408(model fitting)\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u6709\u4e00\u4e2a\u5148\u9a8c\u7684\u5047\u8bbe\uff0c\u5373\u6570\u636e\u7b26\u5408\u54ea\u79cd\u6a21\u578b\uff0c\u63a5\u4e0b\u6765\u6839\u636e\u6570\u636e\u6765\u5206\u6790\u5f97\u5230\u5408\u9002\u7684 model parameters\uff0c\u800c\u8fd9\u4e2a\u6b65\u9aa4\u4e5f\u5e38\u5e38\u88ab\u79f0\u4e3a learning\u3002

\u4e00\u79cd\u6bd4\u8f83\u7ecf\u5178\u7684\u903c\u8fd1\u65b9\u6cd5\uff08\u6700\u5c0f\u4e8c\u4e58\u6cd5\uff09\u662f\u6c42\u4f7f\u5747\u65b9\u8bef\u5dee(mean square error, MSE)\u6700\u5c0f\u7684 model parameters\uff1a

\\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\)

\u800c\u5982\u679c\u6211\u4eec\u5047\u8bbe\u6570\u636e\u4e2d\u7684\u566a\u58f0\u662f\u9ad8\u65af\u5206\u5e03\u7684\uff08\u5b9e\u9645\u4e0a\u5927\u90e8\u5206\u566a\u58f0\u5728\u57fa\u6570\u8db3\u591f\u5927\u7684\u60c5\u51b5\u4e0b\u90fd\u53ef\u4ee5\u770b\u4f5c\u4e3a\u9ad8\u65af\u5206\u5e03\u7684\uff09\uff0c\u90a3\u4e48\u53ef\u4ee5\u4e0e\u7edf\u8ba1\u5b66\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1(maximum likelihood estimation, MLE)\u76f8\u7edf\u4e00.

MSE vs. MLE

MSE vs MLE for linear regression

\u5177\u4f53\u6765\u8bf4\uff0c\\(b_i = a_i^T x + n, \\;\\; n \\sim G(0,\\sigma)\\)\uff0c\u800c\u5bf9\u4e8e\u7ed9\u5b9a\u7684 \\(x\\)\uff0c\u5176\u4f3c\u7136(likehood)\\(P[(a_i,b_i)|x] = P[b_i-a_i^Tx] \\propto \\exp \\left( - \\frac{(b_i-a_i^Tx)^2}{2\\sigma^2} \\right)\\)\uff0c\u8868\u793a\u5728 model parameter \u4e3a \\(x\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u6570\u636e\u7b26\u5408 \\((a_i,b_i)\\) \u7684\u53ef\u80fd\u6027\u3002

Maximum Likelihood Estimation

If the data points are independent,

\\[ \\begin{aligned} P[(a_1, b_1)(a_2, b_2)\\dots|x] & = \\prod\\limits_iP[(a_i, b_i)|x] = \\prod\\limits_i P[b_i - a_i^T x] \\\\ & \\propto \\exp\\left(-\\frac{\\sum_i(b_i - a_i^Tx)^2}{2\\sigma^2}\\right) = \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) \\end{aligned} \\]

That is, maximize the likelihood to find the best \\(x\\).

\\[ \\begin{aligned} \\hat x &= \\mathop{\\arg \\max\\limits_x} P[(a_1, b_1)(a_2, b_2)\\dots|x] \\\\ &= \\mathop{\\arg \\max\\limits_x} \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) = \\mathop{\\arg \\min\\limits_x}||Ax - b||_2^2 \\end{aligned} \\]

MSE = MLE with Gaussian noise assumption

\u9700\u8981\u8865\u6570\u5b66\u77e5\u8bc6\uff0c\u5b8c\u5584\u8fd9\u90e8\u5206\u5185\u5bb9

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6570\u503c\u65b9\u6cd5","title":"\u6570\u503c\u65b9\u6cd5","text":"

\u4e0a\u4e00\u5c0f\u8282\u4ecb\u7ecd\u4e86\u5982\u4f55\u5bf9\u5b9e\u9645\u95ee\u9898\u8fdb\u884c\u6570\u5b66\u5efa\u6a21\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u4ecb\u7ecd\u7684\u662f\u5982\u4f55\u6c42\u89e3\u6570\u5b66\u6a21\u578b\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u7b80\u5355\u7684\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3(analytical solution)\uff0c\u6bd4\u5982\u4f7f\u7528\u6c42\u5bfc\u7b49\u65b9\u6cd5\u3002

\ud83c\udf30

\u4ee5\u521a\u624d\u7684\u7ebf\u6027 MSE \u4e3a\u4f8b\uff0c\\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\) \u7b49\u6548\u4e8e\u6c42\u89e3\u7b49\u5f0f \\(A^TAx=A^Tb\\)\u3002

\u7136\u800c\uff0c\u5b9e\u9645\u60c5\u51b5\u662f\u5927\u90e8\u5206\u95ee\u9898\u8fc7\u4e8e\u590d\u6742\uff0c\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u91c7\u7528\u4e00\u4e9b\u5373\u91c7\u7528\u4e00\u4e9b\u6570\u503c\u65b9\u6cd5(numerical methods)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u68af\u5ea6\u4e0b\u964d","title":"\u68af\u5ea6\u4e0b\u964d","text":"

\u7531\u4e8e\u76f8\u5173\u9886\u57df\u7684\u201c\u51fd\u6570\u201d\u7b49\u57fa\u672c\u4e0a\u90fd\u662f\u9ad8\u7ef4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e00\u822c\u4f7f\u7528\u4e8c\u7ef4\u51fd\u6570\u56fe\u50cf\u7684\u65b9\u6cd5\u6765\u5f62\u8c61\u8868\u793a\u51fd\u6570\uff0c\u5373\u4f7f\u7528\u201c\u7b49\u9ad8\u7ebf\u201d\u7684\u5f62\u5f0f\u6765\u53ef\u89c6\u5316\u51fd\u6570\u3002

\u867d\u7136\u6ca1\u6cd5\u76f4\u63a5\u6c42\u89e3\u6790\u89e3\uff0c\u4f46\u662f\u4e00\u822c\u51fd\u6570\u90fd\u5177\u6709\u4e00\u4e9b\u5c40\u90e8\u6027\u8d28\uff0c\u4f8b\u5982\u6781\u503c\u70b9\u4e34\u57df\u7684\u68af\u5ea6\u90fd\u6307\u5411\u6781\u503c\u70b9\u3002\u6a21\u7cca\u5730\u6765\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u968f\u7740\u201c\u68af\u5ea6\u201d\u53bb\u201c\u4e0b\u964d\u201d\uff0c\u5c31\u6709\u53ef\u80fd\u627e\u5230\u6781\u503c\u70b9\uff0c\u8fd9\u5c31\u662f\u901a\u8fc7\u68af\u5ea6\u4e0b\u964d(gradient descent)\u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u4f18\u5316\u95ee\u9898\u3002

\u7b80\u5355\u63cf\u8ff0\u68af\u5ea6\u4e0b\u964d\u7684\u8fc7\u7a0b\uff1a

  1. \u521d\u59cb\u5316\u8d77\u70b9\u5750\u6807 x\uff1b
  2. \u76f4\u5230 x \u6536\u655b\u5230\u6211\u4eec\u6ee1\u610f\u7684\u7a0b\u5ea6\u4e4b\u524d\uff1a
    1. \u8ba1\u7b97\u4e0b\u964d\u65b9\u5411 p\uff1b
    2. \u51b3\u5b9a\u4e0b\u964d\u6b65\u957f \u237a\uff1b
    3. \u66f4\u65b0 x = x + \u237ap\uff1b

Sourece: https://commons.wikimedia.org/w/index.php?curid=2283984

\u5176\u4e2d\u6709\u4e09\u4ef6\u4e8b\u9700\u8981\u7279\u6b8a\u8bf4\u660e\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","title":"\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","text":"

\u5bf9\u4e8e\u6211\u4eec\u4ee5\u524d\u63a5\u89e6\u8fc7\u7684\u51fd\u6570\uff0c\u5373\u5f62\u5f0f\u76f8\u5bf9\u7b80\u5355\u7684\u51fd\u6570\uff0c\u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u68af\u5ea6\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u3002\u7136\u800c\u5b9e\u9645\u95ee\u9898\u4e2d\u7684\u51fd\u6570\u53ef\u80fd\u975e\u5e38\u590d\u6742\uff0c\u6216\u68af\u5ea6\u89e3\u6790\u5f0f\u5f88\u96be\u5f97\u5230\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u5c31\u53ea\u80fd\u9000\u800c\u6c42\u5176\u6b21\uff0c\u6c42\u5176\u201c\u8fd1\u4f3c\u201d\u68af\u5ea6\u65b9\u5411\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u627e\u5230\u4e00\u4e2a\u548c\u539f\u51fd\u6570\u5728\u5c40\u90e8\u548c\u8be5\u51fd\u6570\u5f88\u50cf\u7684\u62df\u5408\u51fd\u6570\uff0c\u5e76\u4e14\u7528\u8fd9\u4e2a\u62df\u5408\u51fd\u6570\u7684\u68af\u5ea6\u65b9\u5411\u6765\u51b3\u5b9a\u68af\u5ea6\u4e0b\u964d\u7684\u65b9\u5411\u3002

\u4e8e\u662f\u6211\u4eec\u60f3\u5230\u6cf0\u52d2\u5c55\u5f00\uff0c\u5b83\u5c06\u51fd\u6570\u5c55\u5f00\u4e3a\u591a\u9879\u5f0f\uff0c\u800c\u591a\u9879\u5f0f\u7684\u68af\u5ea6\u662f\u76f8\u5bf9\u5bb9\u6613\u5f97\u5230\u7684\u3002

\u5176\u4e2d\u6bd4\u8f83\u5e38\u7528\u7684\u662f\uff1a

\u5176\u4e2d \\(J_F\\) \u662f\u96c5\u5404\u6bd4\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u7ef4\u5411\u91cf\u51fd\u6570\u7684\u5bfc\u6570\uff1b\\(H_F\\) \u662f\u6d77\u68ee\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u4f4d\u5411\u91cf\u51fd\u6570\u7684\u4e8c\u9636\u5bfc\u6570\u3002

\u63a5\u4e0b\u6765\u4ee5 first-order approximation \u4e3a\u4f8b\u7ee7\u7eed\u5206\u6790\u3002

\u89c2\u5bdf \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F \\Delta x\\)\uff0c\u53d1\u73b0\u5f53 \\(J_F\\Delta x < 0\\) \u65f6\uff0c \\(F(x_0 + \\Delta x)\\) \u5927\u6982\u7387\u6bd4 \\(F(x_0)\\) \u5c0f\uff0c\u5373\u201c\u4e0b\u964d\u201d\uff0c\u6240\u4ee5\u5728 first-order approximation \u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u9009\u62e9\u65b9\u5411 \\(\\vec p = -J_F^T\\)\uff0c\u4e8e\u662f\u4f4d\u79fb\u91cf \\(movement = -J_F \\cdot J_F^T \\cdot step\\)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","title":"\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","text":"

\u5373\u4f7f\u4f46\u4ece\u4e0b\u964d\u901f\u7387\u6765\u8003\u8651\uff0c\u6b65\u957f\u592a\u957f\u6216\u592a\u5c0f\u4e5f\u90fd\u6709\u660e\u663e\u7684\u95ee\u9898\uff1a

\u6240\u4ee5\u6b65\u957f\u7684\u9009\u62e9\u5bf9\u4e0b\u964d\u901f\u7387\u7684\u5341\u5206\u5173\u952e\u3002

\u4e3a\u4e86\u4e13\u6ce8\u4e8e\u6b65\u957f\u7684\u9009\u62e9\uff0c\u6211\u4eec\u8bb0 \\(\\phi(\\alpha) = F(x+\\alpha h),\\;\\;\\text{where x and h fixed}, x\\geq 0\\)\u3002\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u627e\u5230\u4e00\u4e2a\u80fd\u8ba9 \\(\\phi(\\alpha)\\) \u5c3d\u53ef\u80fd\u5c0f\u4e8e \\(\\phi(0)\\) \u7684 \\(\\alpha\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd Backtracking Algorithm\uff1a

  1. \u521d\u59cb\u5316 \\(\\alpha\\) \u4e3a\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u503c\uff1b
  2. \u4e0d\u65ad\u51cf\u5c0f \\(\\alpha\\) \u76f4\u5230 \\(\\phi(\\alpha) \\leq \\phi(0) + \\gamma\\phi'(0)\\alpha\\)\uff1b
    • \u5176\u4e2d \\(\\gamma\\in(0,1)\\) \u662f\u4e00\u4e2a\u56fa\u5b9a\u7684\u53c2\u6570\uff1b

\u6362\u53e5\u8bdd\u8bf4\u5c31\u662f\uff0c\u7b26\u5408\u9884\u671f\u7684\u6700\u5927\u6b65\u957f\uff0c\u8fd9\u4e2a\u201c\u9884\u671f\u201d\uff0c\u5c31\u662f\u901a\u8fc7 \\(\\gamma\\) \u4f53\u73b0\u7684\u3002\u56fe\u4e2d\u7ea2\u8272\u865a\u7ebf\u548c\u9ed1\u8272\u7ec6\u7ebf\u5206\u522b\u662f \\(\\gamma\\) \u53d6\u8fb9\u754c\u503c\u65f6\u7684\u60c5\u51b5\uff0c\u800c\u7ea2\u8272\u5b9e\u7ebf\u5219\u8868\u793a\u6211\u4eec\u7684\u9884\u671f\u968f \\(\\alpha\\) \u7684\u53d8\u5316\u3002

\u4e0a\u9762\u4f7f\u7528 first-order approximation \u4e3a\u4f8b\u4ecb\u7ecd\u7684\u8fd9\u5957\u65b9\u6cd5\u5c31\u662f\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5(steepest descent method)\u3002

\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5

\\(\\vec p = -J_F^T\\)\uff1b

\u8fd9\u662f\u56e0\u4e3a\uff0c\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u4e3b\u8981\u91c7\u7528\u7684\u662f first-order approximation\uff0c\u6ca1\u6709\u4f53\u73b0\u66f2\u7387\u7279\u5f81\u3002

\u56e0\u800c\u4e00\u79cd\u5f88\u81ea\u7136\u7684\u6539\u8fdb\u65b9\u6cd5\u5c31\u662f\u4f7f\u7528 second-order approximation\uff0c\u5373\u725b\u987f\u6cd5(Newton Method)\u3002

\u725b\u987f\u6cd5

\\(F(x_k + \\Delta x) \\approx F(x_k) + J_F\\Delta x + \\frac{1}{2}\\Delta x^T H_F \\Delta x\\)

\u5bf9\u5b83\u6c42\u5bfc\u5f97\u5230 \\(\\frac{\\partial F}{\\partial \\Delta x} = J_F^T+H_F\\Delta x = 0\\)\u3002

\u6240\u4ee5\u5f97\u5230\u65b9\u5411\u4e3a \\(\\vec p = \\Delta x = -H_F^{-1}J_F^T\\)

\u7531\u6b64\u53d1\u73b0\uff0c\u725b\u987f\u6cd5\u7684\u8868\u73b0\u4f1a\u597d\u5f88\u591a\uff0c\u5982\u679c\u80fd\u591f\u907f\u514d\u8ba1\u7b97\u9ed1\u585e\u77e9\u9635\uff0c\u5c31\u53ef\u4ee5\u8fdb\u4e00\u6b65\u63d0\u9ad8\u725b\u987f\u6cd5\u7684\u6548\u679c\uff0c\u4e8e\u662f\u5c31\u51fa\u73b0\u4e86\u9ad8\u65af\u725b\u987f\u6cd5(Gauss-Newton method)\u3002

\u9ad8\u65af\u725b\u987f\u6cd5

\u5bf9\u4e8e\u89e3\u51b3\u6700\u5c0f\u4e8c\u4e58\u6cd5 \\(\\hat x = \\mathop{\\arg \\min\\limits_x} ||R(x)||^2_2\\) \u7684\u95ee\u9898\u8868\u73b0\u975e\u5e38\u597d\u3002

\u5bf9\u4e8e\u8fd9\u7c7b\u95ee\u9898\uff0c\u9ad8\u65af\u725b\u987f\u6cd5\u4f7f\u7528 \\(J_R^TJ_R\\) \u6765\u8fd1\u4f3c\u4ee3\u66ff \\(H_F\\)\uff0c\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u4e3a \\(\\vec p = -(J_R^TJ_R)^{-1}J_R^T,\\;\\;\\text{where }J_R\\text{ is the Jacobian of }R(x)\\)\u3002

Levenberg-Marquardt

Wiki: \ud83d\udd17

\\[ \\Delta x = -(J_R^TJ_R+\\lambda I)^{-1}J_R^TR(x_k) \\]

\u7b80\u5355\u6765\u8bf4\uff0cLM \u5c31\u662f\u7efc\u5408\u4e86\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u548c\u725b\u987f\u6cd5\u7684\u4f18\u70b9\uff0c\u5728\u8fdc\u79bb\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\uff0c\u4fdd\u8bc1\u542f\u52a8\u901f\u5ea6\u5feb\uff1b\u5728\u9760\u8fd1\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u725b\u987f\u6cd5\uff0c\u4fdd\u8bc1\u6536\u655b\u901f\u5ea6\u8db3\u591f\u5feb\uff1b\u5e76\u4e14\u4fdd\u8bc1 \\(J_R^TJ_R+\\lambda I\\) \u6b63\u5b9a\uff0c\u6240\u4ee5\u59cb\u7ec8\u80fd\u591f\u4f7f\u725b\u987f\u6cd5\u6210\u7acb\u3002

\u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898

\u5bf9\u4e8e\u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898(constrained optimization)\uff0c\u5219\u9700\u8981\u6839\u636e\u5b9e\u9645\u95ee\u9898\u6c42\u89e3\u3002

\u63a8\u8350\u540c\u540d\u8bfb\u7269\uff1ahttps://web.stanford.edu/class/ee364a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","title":"\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","text":"

\u5206\u591a\u4e2a batch \u6765\u5904\u7406\uff0c\u5927\u91cf\u6492\u70b9\uff0c\u7136\u540e\u6bd4\u8f83\u6bcf\u4e00\u4e2a batch \u7684\u7ed3\u679c\uff0c\u6700\u7ec8\u53d6\u6700\u597d\u7684\u4e00\u4e2a\u5373\u53ef\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9c81\u68d2\u4f30\u8ba1","title":"\u9c81\u68d2\u4f30\u8ba1","text":"

\u9c81\u68d2\u4f30\u8ba1(robust estimation)\u662f\u5bf9\u4ece\u5404\u79cd\u6982\u7387\u5206\u5e03\uff08\u5c24\u5176\u662f\u975e\u6b63\u6001\u5206\u5e03\uff09\u4e2d\u63d0\u53d6\u7684\u6570\u636e\u5177\u6709\u826f\u597d\u6027\u80fd\u7684\u7edf\u8ba1\u3002

\u5728\u62df\u5408\u6a21\u578b\u4e2d\uff0c\u96be\u514d\u51fa\u73b0\u4e00\u4e9b\u4e0d\u7b26\u5408\u9884\u671f\u7684\u70b9\uff0c\u800c\u5b83\u4eec\u4f1a\u5bf9\u62df\u5408\u7ed3\u679c\u4ea7\u751f\u6216\u591a\u6216\u5c0f\u7684\u5f71\u54cd\uff0c\u800c\u5982\u4f55\u6743\u8861\u8fd9\u4e9b\u566a\u58f0\u4e0e\u771f\u6b63\u6709\u7528\u7684\u6570\u636e\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u9c81\u68d2\u4f30\u8ba1\u7684\u8bfe\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5185\u70b9--\u5916\u70b9","title":"\u5185\u70b9 & \u5916\u70b9","text":"

\u9996\u5148\u6211\u4eec\u5bf9\u6570\u636e\u70b9\u8fdb\u884c\u5206\u7c7b\uff1a

\u5916\u70b9\u7684\u5f71\u54cd

\u7531\u4e8e\u5916\u70b9\u504f\u79bb\u5f88\u5927\uff0c\u800c\u6700\u5c0f\u4e8c\u4e58\u6cd5\u4e2d\u5b58\u5728\u5e73\u65b9\u64cd\u4f5c\uff0c\u6240\u4ee5\u6700\u5c0f\u4e8c\u4e58\u6cd5\u62df\u5408\u53d7\u8fd9\u4e9b\u5916\u70b9\u5f71\u54cd\u5f88\u5927\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","title":"\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","text":"

\u4e8e\u662f\u6211\u4eec\u8003\u8651\uff0c\u53ef\u4ee5\u66f4\u6362\u62df\u5408\u7684\u635f\u5931\u51fd\u6570\uff0c\u6765\u51cf\u5c0f\u5927\u504f\u5dee\u70b9\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6bd4\u5982\u4f7f\u7528 L1 loss(\u5373\u6c42\u7edd\u5bf9\u503c)\u3002\u4e0d\u8fc7\u66f4\u597d\u7684\u662f\u4e00\u79cd\u9009\u62e9\u53eb huber loss\uff0c\u5b83\u5728\u8ddd\u79bb\u8fdc\u70b9\u8f83\u8fdc\u7684\u65f6\u5019\u6bd4\u8f83\u63a5\u8fd1 L1 loss\u3002

L1 & L2 & Huber

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u968f\u673a\u62bd\u6837\u4e00\u81f4","title":"\u968f\u673a\u62bd\u6837\u4e00\u81f4","text":"

\u968f\u673a\u62bd\u6837\u4e00\u81f4(random sample consensus, RANSAC)\u91c7\u7528\u8fed\u4ee3\u7684\u65b9\u5f0f\u4ece\u5305\u542b\u5916\u70b9\u7684\u6570\u636e\u4e2d\u4f30\u8ba1\u6570\u5b66\u6a21\u578b\u53c2\u6570\uff0c\u662f\u4e00\u4e2a\u5bf9\u4e8e\u5b58\u5728\u660e\u663e\u5916\u70b9\u7684\u6570\u636e\u975e\u5e38\u6709\u6548\u7684\u65b9\u6cd5\u3002

RANSAC procedure

  1. \u9996\u5148\u968f\u673a\u627e\u4e24\u4e2a\u70b9\u62df\u5408\u4e00\u6761\u76f4\u7ebf\uff0c\u7136\u540e\u68c0\u67e5\u6709\u591a\u5c11\u70b9\u7b26\u5408\u8fd9\u6761\u76f4\u7ebf\uff0c\u5e76\u5bf9\u5176\u8fdb\u884c vote\uff1b
  2. \u91cd\u590d\u8fd9\u4e2a\u6b65\u9aa4\uff0c\u6700\u540e\u9009\u62e9\u7968\u6570\u6700\u9ad8\u7684\u62df\u5408\uff1b

\u7531 outlier \u62df\u5408\u51fa\u6765\u7684\u76f4\u7ebf\u4e00\u822c votes \u6bd4\u8f83\u5c11\uff0c\u56e0\u4e3a outlier \u4e4b\u95f4\u5f88\u96be\u4e00\u81f4\uff1b\u4f46\u662finlier\u4e4b\u95f4\u5bb9\u6613\u4e00\u81f4\uff0c\u56e0\u800c\u5f97\u5206\u5f80\u5f80\u66f4\u9ad8\uff0c\u4e8e\u662f\u5c06\u5b83\u4eec\u533a\u5206\u5f00\u6765\u3002\u8fd9\u4e0d\u5c31\u662f Voting Tree (\u9003

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u75c5\u6001\u95ee\u9898","title":"\u75c5\u6001\u95ee\u9898","text":"

\u5982\u679c\u4e00\u4e2a\u95ee\u9898\u7684\u89e3\u4e0d\u552f\u4e00\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898(ill-posed problem)\u3002\u7279\u522b\u7684\uff0c\u5728\u7ebf\u6027\u95ee\u9898\u4e2d\uff0c\u4e00\u4e2a\u7ebf\u6027\u65b9\u7a0b\uff08\u7ec4\uff09\u7684\u89e3\u5982\u679c\u4e0d\u552f\u4e00\uff08\u4e0d\u6ee1\u79e9\uff09\uff0c\u5219\u540c\u6837\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898\u3002

\u5f53\u7136\uff0c\u5bf9\u4e8e\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u6839\u636e\u7ebf\u6027\u4ee3\u6570\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u53ef\u4ee5\u589e\u52a0\u65b9\u7a0b\uff0c\u5373\u589e\u52a0\u7ea6\u675f\u3002\u800c\u8fd9\u79cd\u7ea6\u675f\u4e00\u822c\u6765\u81ea\u4e8e\u5bf9\u53d8\u91cf\u7684\u5148\u9a8c\u7ea6\u675f\uff0c\u6bd4\u5982\uff1a

L2 regularization

L2 norm: \\(||x||_2 = \\sum_i x_i^2\\);

L2 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_2 \\leq 1\\);

\u901a\u8fc7\u8ba9\u9009\u62e9\u7684\u89e3\u5c3d\u53ef\u80fd\u63a5\u8fd1\u539f\u70b9\uff0c\u800c\u8ba9\u6211\u4eec\u6ca1\u6709\u7528\u7684\u89e3\u7684\u7ef4\u5ea6\u5c3d\u53ef\u80fd\u63a5\u8fd1 0\uff0c\u4ee5\u51cf\u5c0f\u6ca1\u7528\u7684\u53d8\u91cf\u7684\u5f71\u54cd\uff0c\u6291\u5236\u5197\u4f59\u53d8\u91cf\u3002

L1 regularization

L1 norm: \\(||x||_1=\\sum_i|x_i|\\);

L1 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_1 \\leq 1\\)

L1 \u53ef\u89c6\u5316\u4e2d\u53ef\u4ee5\u53d1\u73b0\uff0c\u5750\u6807\u8f74\u4e0a\u6bd4\u8f83\u5bb9\u6613\u6293\u4f4f\u89e3\uff0c\u6b64\u65f6\u610f\u5473\u7740\u6709\u4e9b\u53d8\u91cf(\u7ef4\u5ea6)\u662f 0\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u80fd\u8ba9\u89e3\u53d8\u5f97\u201c\u7a00\u758f(sparse)\u201d\uff0c\u5373\u5728\u7ef4\u5ea6\u4e0a\u7684\u5206\u5e03\u53ea\u6bd4\u8f83\u96c6\u4e2d\u4e8e\u4e2a\u522b\u9879\u3002

\u4e0d\u8fc7\uff0c\u5c06\u4ed6\u4eec\u4f5c\u4e3a\u7ea6\u675f\u6761\u4ef6\u53c2\u4e0e\u6c42\u89e3\uff0c\u4e0d\u5982\u76f4\u63a5\u52a0\u8fdb\u53bb\u4f5c\u4e3a\u4e00\u4e2a\u9879\uff0c\u5176\u6548\u679c\u662f\u7b49\u4ef7\u7684\uff1a

\\[ \\begin{matrix} \\text{L2 regularization:} & | & \\text{or L1 regularization:}\\\\ \\min_{x}||Ax-b||^2_2+\\lambda ||x||_2^2 & | & \\min_{x}||Ax-b||^2_2+\\lambda ||x||_1\\\\ s.t. ||x||_2 \\leq 1 & | & s.t. ||x||_1 \\leq 1 \\\\ \\end{matrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","title":"\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","text":"

\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u4e5f\u8981\u5c0f\u5fc3\u8fc7\u62df\u5408(overfitting)\u548c\u6b20\u62df\u5408(underfitting)\uff0c\u5b83\u4eec\u7684\u542b\u4e49\u975e\u5e38\u76f4\u767d\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u63d2\u503c","title":"\u63d2\u503c","text":"

\u63d2\u503c(interpolation)\u5176\u5b9e\u5df2\u7ecf\u5728 lec 3 \u7684\u7b14\u8bb0 \u91cc\u63d0\u5230\u8fc7\u4e86\u3002

\u8fd9\u91cc\u5148\u7565\u8fc7\u3002

sketch

\u7ebf\u6027\u62df\u5408\u3001\u4e8c\u6b21\u6837\u6761\u63d2\u503c\uff08\u6bcf\u4e00\u6bb5\u90fd\u662f\u4e00\u4e2a\u4e8c\u6b21\u51fd\u6570\uff09\u3001\u4e09\u6b21\u6837\u6761\u63d2\u503c\uff08\u4e00\u9636\u5bfc\u4e8c\u9636\u5bfc\u8fde\u7eed\uff0c\u4f46\u6700\u7ec8\u662f\u4e2a\u75c5\u6001\u95ee\u9898\uff0c\u9700\u8981\u989d\u5916\u518d\u7ea6\u675f\u8d77\u70b9\u548c\u7ec8\u70b9\u4e8c\u9636\u5bfc\u4e3a\u96f6\u6216\u8005\u9650\u5b9a\u7ed9\u5b9a\u659c\u7387\u7b49\uff0c\u5c31\u9700\u8981\u4fe9\u989d\u5916\u7ea6\u675f\u6761\u4ef6\uff09\u3001

\u4e0a\u9762\u662f\u8fde\u7eed\u4f18\u5316\u95ee\u9898\uff0c\u4e0b\u9762\u662f\u79bb\u6563\u4f18\u5316\u95ee\u9898

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272--\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u56fe\u5272 & \u9a6c\u53ef\u592b\u968f\u673a\u573a","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","title":"\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","text":"

\u56fe\u50cf\u6807\u7b7e\u95ee\u9898(image labeling problems)\u5373\u901a\u8fc7\u56fe\u7247\u4fe1\u606f\u7ed9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u5206\u914d\u6807\u7b7e\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u5206\u7c7b\u548c\u8bc6\u522b\u95ee\u9898\u3002

\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5f3a\u7684\u5148\u9a8c(prior)\u662f\uff1a\u76f8\u90bb\u4e14\u76f8\u4f3c\u7684\u50cf\u7d20\u5e94\u5f53\u62e5\u6709\u76f8\u540c\u7684\u6807\u7b7e\u3002

\u800c\u56fe\u5272\u548c\u9a6c\u53ef\u592b\u968f\u673a\u573a\u53ef\u4ee5\u5efa\u6a21\u8fd9\u79cd\u5148\u9a8c\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272","title":"\u56fe\u5272","text":"

\u56fe\u5272(Graphcut)\u7684\u6838\u5fc3\u601d\u60f3\u662f\uff0c\u628a\u4e00\u5f20\u56fe\u7247\u7684\u6bcf\u4e00\u4e2a\u50cf\u7d20\u770b\u4f5c\u4e00\u4e2a graph \u4e2d\u7684 vertex\uff0c\u5e76\u5728\u50cf\u7d20\u4e4b\u95f4\u5efa edge\uff0c\u5e76\u5c06 weight \u5b9a\u4e49\u4e3a\u4e24\u50cf\u7d20\u4e4b\u95f4\u7684\u76f8\u4f3c\u6027\u6216\u5173\u8054\u6027(affinity or similarity)\u3002

measuring affinity

\u6bd4\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8861\u91cf\u50cf\u7d20\u7684\u76f8\u4f3c\u6027\uff1a

\u518d\u63a5\u4e0b\u6765\uff0c\u901a\u8fc7\u8fd9\u6837\u7684\u65b9\u5f0f\u5c06\u56fe\u7247\u5efa\u6210\u56fe\u540e\uff0c\u5c31\u53ef\u4ee5\u628a\u95ee\u9898\u8f6c\u5316\u4e3a\u56fe\u5272\u95ee\u9898\uff0c\u6211\u4eec\u5c06\u5c0f\u6743\u7684\u8fb9\u5220\u53bb\uff0c\u6700\u7ec8\u4f1a\u5f62\u6210\u82e5\u5e72\u8fde\u901a\u5206\u91cf\uff0c\u800c\u8fd9\u4e9b\u8fde\u901a\u5206\u91cf\u90a3\u7684\u70b9\u5219\u88ab\u89c6\u4e3a\u4e00\u4e2a\u201c\u5206\u5272\u201d\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u56fe\u5272\u7684\u4ee3\u4ef7\u4e3a\u65ad\u7684\u8fb9\u6743\u4e4b\u6743\u91cd\u548c \\(cut(V_A,V_B)= \\sum_{u\\in V_A, v\\in V_B} w(u,v)\\)\uff0c\u800c\u6211\u4eec\u9700\u8981\u627e\u4ee3\u4ef7\u5c3d\u53ef\u80fd\u5c0f\u7684\uff0c\u6ee1\u8db3\u6211\u4eec\u8981\u6c42\u7684\u56fe\u5272\u3002\u5f53\u7136\uff0c\u8fd9\u4e2a\u95ee\u9898\u4e5f\u7b49\u6548\u4e8e\u6700\u5927\u6d41\u95ee\u9898\uff1b

Problem with min-cut

Bias to cut small, isolated segments.

\u7531\u4e8e min-cut \u7684\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u8861\u91cf\u8fd9\u4e2a\u5b50\u96c6\u662f\u5426\u8db3\u591f\u7a20\u5bc6\uff0c\u6240\u4ee5\u6211\u4eec\u503e\u5411\u4e8e\u4f7f\u7528 normalized-cut\u3002

\\[ assoc(V_A,V) = \\sum_{u\\in V_A, v\\in V} w(u,v) \\\\ NCut(V_A,V_B) = \\frac{cut(V_A,V_B)}{assoc(V_A,V)} + \\frac{cut(V_A,V_B)}{assoc(V_B,V)} \\] "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u9a6c\u53ef\u592b\u968f\u673a\u573a","text":"

\u9a6c\u53ef\u592b\u968f\u673a\u573a(Markov Random Field, MRF)\u662f\u4e00\u79cd\u66f4\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u60dc\u6211\u7b2c\u4e00\u6b21\u6ca1\u542c\u61c2\uff0c\u7b49\u6211\u542c\u61c2\u4e86\u518d\u6765\u8865\u5145\u8fd9\u91cc\u7684\u5185\u5bb9\u3002

sketch

Markov chains

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/","title":"Lecture 5 | Feature Matching and Motion Estimation","text":"

\u7ea6 3966 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 13 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u56fe\u50cf\u7279\u5f81\u5339\u914d","title":"\u56fe\u50cf\u7279\u5f81\u5339\u914d","text":"

\u672c\u8282\u7684\u8bfe\u9898\u662f\u7279\u5f81\u5339\u914d(feature matching)\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u627e\u5230\u4e24\u5f20\u56fe\u50cf\u4e2d\u53ef\u80fd\u6307\u4ee3\u540c\u4e00\u5ba2\u4f53\u7684\u90e8\u5206\uff0c\u5173\u952e\u5728\u4e8e\u627e\u5230\u56fe\u7247\u4e4b\u95f4\u70b9\u548c\u70b9\u7684\u5339\u914d\u5173\u7cfb\u3002\u8be5\u95ee\u9898\u662f\u5f88\u591a\u95ee\u9898\u7684\u57fa\u77f3\uff0c\u4f8b\u5982\uff1a

applications

\u5934\u8111\u98ce\u66b4

\u7a76\u5176\u6839\u672c\uff0c\u7279\u5f81\u5339\u914d\u201c\u8054\u901a\u201d\u4e86\u4e24\u5f20\u56fe\u7247\uff0c\u4f7f\u5b83\u4eec\u539f\u672c\u5b64\u7acb\u8868\u8fbe\u7684\u4fe1\u606f\u8fde\u7ed3\u8d77\u6765\u3002

\u7b80\u5355\u7684\u5e94\u7528\u5982\u56fe\u50cf\u62fc\u63a5\uff0c\u518d\u5f80\u540e\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\u4e09\u7ef4\u91cd\u5efa\u4e2d\u4e5f\u4f1a\u5e94\u7528\u5230\u7279\u5f81\u5339\u914d\u5230\u76f8\u5173\u5185\u5bb9\u3002

\u6982\u62ec\u4f20\u7edf\u7279\u5f81\u5339\u914d\u4e3b\u8981\u73af\u8282\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u4e09\u6b65\uff1a

  1. \u68c0\u6d4b(detection): \u627e\u5230\u5173\u952e\u70b9(interest points)\uff0c\u5373\u53ef\u80fd\u4f1a\u88ab\u5339\u914d\u7684\u201c\u7279\u5f81\u70b9\u201d\uff1b
  2. \u8868\u8fbe(description): \u63d0\u53d6\u6bcf\u4e2a\u5173\u952e\u70b9\u5468\u56f4\u7684\u5411\u91cf\u7279\u5f81\u63cf\u8ff0\u7b26(feature descriptor)\uff0c\u5373\u5c06\u201c\u7279\u5f81\u201d\u6570\u636e\u5316\uff1b
  3. \u5339\u914d(matching): \u51b3\u5b9a\u4e24\u4e2a\u89c6\u89d2\u4e0b\u7279\u5f81\u63cf\u8ff0\u7b26\u7684\u5173\u8054\u5e76\u5339\u914d\uff0c\u5373\u6784\u5efa\u201c\u7279\u5f81\u201d\u4e4b\u95f4\u7684\u5339\u914d\u5173\u7cfb\uff1b
"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u68c0\u6d4b","title":"\u5173\u952e\u70b9\u68c0\u6d4b","text":"

\u63a8\u8350\u9605\u8bfb

\u3010\u8ba1\u7b97\u673a\u89c6\u89c9\u30112. \u7279\u5f81\u70b9\u68c0\u6d4b\uff1aHarris, SIFT, SURF, ORB

\u68c0\u6d4b(detection)\u7684\u9996\u8981\u95ee\u9898\u662f\u5982\u4f55\u9009\u62e9\u5173\u952e\u70b9(interest points/feature points)\uff0c\u6216\u8005\u8bf4\uff0c\u4e00\u4e2a\u70b9\u4ec0\u4e48\u60c5\u51b5\u4e0b\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7279\u5f81\u70b9\u3002

\u603b\u4f53\u6765\u8bf4\uff0c\u5173\u952e\u70b9\u9700\u8981\u7531\u8fd9\u4e48\u4e24\u4e2a\u7279\u5f81\uff1a

  1. \u72ec\u7279\u6027(uniqueness)\uff0c\u5373\u8fd9\u4e2a\u70b9\u9700\u8981\u80fd\u591f\u8868\u5f81\u4e00\u5b9a\u7279\u6027\uff1b
  2. \u5bf9\u4e8e\u53d8\u6362\u4e0d\u654f\u611f\uff0c\u5373\u5bf9\u4e8e\u4e00\u4e2a\u5ba2\u89c2\u4e0a\u7684\u5173\u952e\u70b9\uff0c\u5373\u4f7f\u56fe\u7247\u88ab\u65cb\u8f6c\u3001\u538b\u7f29\u3001\u9002\u5f53\u7684\u626d\u66f2\uff0c\u5b83\u90fd\u5e94\u5f53\uff08\u5c3d\u53ef\u80fd\u5730\uff09\u88ab\u8bc6\u522b\u4e3a\u5173\u952e\u70b9\uff1b

\u5173\u952e\u70b9

\u867d\u7136\u8bf4\u662f\u5173\u952e\u201c\u70b9\u201d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u4e00\u5c0f\u5757\u533a\u57df\u3002\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u80fd\u8868\u8fbe\u5c40\u90e8\u7279\u5f81\u7684\u70b9\uff0c\u5b83\u5fc5\u7136\u9700\u8981\u56ca\u62ec\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u4fe1\u606f\u3002

\u9996\u5148\u6211\u4eec\u8ba8\u8bba\u5982\u4f55\u8861\u91cf\u4e00\u4e2a\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff0c\u672c\u6587\u4f1a\u4ecb\u7ecd\u4e24\u79cd\u68c0\u6d4b\u5668\uff1a

  1. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u89d2\u70b9 - Harris corner detector\uff1b
  2. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u6591\u70b9 - Blob detector(LoG or DoG)\uff1b
"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u89d2\u70b9\u68c0\u6d4b","title":"\u89d2\u70b9\u68c0\u6d4b","text":"

\u63a8\u8350\u9605\u8bfb

Harris Corners @ 16-385 Computer Vision (Kris Kitani) @ Carnegie Mellon University

\u89d2\u70b9\u68c0\u6d4b\u7684\u57fa\u672c\u601d\u8def\u662f\uff0c\u6211\u4eec\u79f0\u67d0\u4e2a\u70b9\u6bd4\u8f83\u72ec\u7279\u65f6\uff0c\u5b83\u76f8\u5bf9\u4e8e\u5468\u56f4\u4e00\u5b9a\u53c8\u4e00\u4e9b\u201c\u4e0d\u540c\u201d\u7684\u5730\u65b9\u3002\u6216\u8005\u8bf4\u5b58\u5728\u4e00\u4e9b\u9ad8\u9891\u7279\u5f81\uff0c\u800c\u4e14\u8fd9\u79cd\u9ad8\u9891\u7279\u5f81\u4e0d\u4f1a\u5404\u5411\u540c\u6027\u6216\u8005\u8bf4\u51e0\u4e2a\u5411\u540c\u6027\u3002

\u5728\u6a21\u5f0f\u5316\u7684\u63cf\u8ff0\u8fd9\u4e2a\u601d\u8def\u5c31\u662f\uff1a

Local measures of uniqueness(rough):

\u6211\u4eec\u4ee5\u7a97\u53e3\u7684\u5f62\u5f0f\u5bf9\u76ee\u6807\u70b9\u53ca\u5176\u90bb\u57df\u8fdb\u884c\u91c7\u6837\uff0c\u5f53\u65e0\u8bba\u5f80\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\u7a97\u53e3\uff0c\u91c7\u6837\u7ed3\u679c\u90fd\u4f1a\u4ea7\u751f\u8f83\u5927\u53d8\u5316\u65f6\uff0c\u6211\u4eec\u5c31\u8ba4\u4e3a\u8fd9\u4e2a\u70b9\u72ec\u7279\u6027\u5f3a\u3002

Flag Edge Corner \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4e0d\u4f1a\u6709\u592a\u5927\u53d8\u5316 \u5f53\u6cbf\u7740\u201cEdge\u201d\u7684\u65b9\u5411\u79fb\u52a8\u65f6\uff0c\u4e0d\u592a\u6709\u53d8\u5316 \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4f1a\u5bfc\u81f4\u8f83\u5927\u7684\u53d8\u5316

\u4e0d\u8fc7\u8fd9\u4ecd\u7136\u662f\u4e00\u4e2a\u76f8\u5bf9\u6a21\u7cca\u7684\u5b9a\u4e49\uff0c\u4e3a\u4e86\u5bf9\u5176\u8fdb\u884c\u5efa\u6a21\uff0c\u6211\u4eec\u8fdb\u4e00\u6b65\u5730\u5bf9\u4e0a\u9762\u63d0\u5230\u7684\u201c\u53d8\u5316\u5e45\u5ea6\u201d\u8d4b\u4e88\u6570\u5b66\u542b\u4e49\uff1a

Local measures of uniqueness(detail):

\u6240\u8c13\u53d8\u5316\u5927\uff0c\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u76f8\u540c\u7684\u5355\u4f4d\u957f\u5ea6\u91cc\uff0c\u8272\u5f69\u503c\u7684\u5dee\u66f4\u5927\uff0c\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e0d\u7528\u68af\u5ea6\u6765\u8861\u91cf\u5462\uff1f\u5173\u6ce8\u533a\u57df\u5185\u7684\u68af\u5ea6\u5206\u5e03\uff1a

\u6839\u636e\u68af\u5ea6\u7684\u5206\u5e03\uff0c\u6211\u4eec\u53ef\u4ee5\u5927\u81f4\u89c2\u5bdf\u5230\u56fe\u5f62\u7684\u7279\u5f81\uff0c\uff0c\u5305\u62ec\u5b58\u5728\u591a\u5c11\u4e2a Edge \u4ee5\u53ca\u8fd9\u4e9b Edge \u7684\u65b9\u5411\u3002

\u4e0d\u8fc7\u7eaf\u7cb9\u6839\u636e\u68af\u5ea6\u6765\u5bfb\u627e\u89d2\u70b9\u6709\u65f6\u5019\u53ef\u80fd\u4f1a\u6536\u5230\u566a\u58f0\u7684\u5f71\u54cd\uff0c\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4e3b\u6210\u5206\u5206\u6790(Principle Component Analysis)\u6765\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002\u3002

Principle Component Analysis

\u2460 Subtract off the mean for each data point.

\u2461 Compute the covariance matrix at each point.

\\[ H = \\sum_{(u,v)}w(u,v) \\begin{bmatrix} I_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \\end{bmatrix} \\text{ where } I_x = \\frac{\\partial f}{\\partial x}, I_y = \\frac{\\partial y}{\\partial y} \\]

\\(w(u,v)\\) \u4e00\u822c\u662f\u9ad8\u65af\u6743\u91cd\u3002

\u2462 Compute eigenvalues.

\\[ H = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\;\\;\\;\\; \\lambda_{\\pm} = \\frac{1}{2}\\left( (a+d) \\pm \\sqrt{4bc + (a-d)^2} \\right) \\] error function approximation

Carnegie Mellon University \u7684 slides P18 \u5f00\u59cb\u8fd8\u63d0\u5230\u4e86\u4e0d\u540c\u4f4d\u79fb\u4e0b\u7684\u8bef\u5dee\u51fd\u6570\uff0c\u5e76\u7ed9\u51fa\u4e86\u4e09\u79cd\u60c5\u51b5\u4e0b\u8bef\u5dee\u51fd\u6570\u7684\u70ed\u529b\u56fe\u3002

\u2463 Components are the eigenvectors ranked by the eigenvalues.

\u5728\u672c\u8282\u7684\u8bed\u5883\u4e0b\uff0c\u5f62\u8c61\u5730\u53d9\u8ff0\u4e3b\u6210\u5206\u5206\u6790\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u65b9\u5dee\u6700\u5927\u7684\u65b9\u5411\uff0c\u7b2c\u4e8c\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u5782\u76f4\u4e8e\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u7684\u65b9\u5411\uff0c\u5b83\u4eec\u7684\u5927\u5c0f\u5219\u4e0e\u8fd9\u4e9b\u65b9\u5dee\u6b63\u76f8\u5173\u3002

\u5bf9\u4e8e\u4e0a\u9762\u7684\u4e09\u79cd\u60c5\u51b5\uff0c\u5b83\u4eec\u505a\u4e3b\u6210\u5206\u5206\u6790\u540e\u5f97\u5230\u7684\u7ed3\u679c\u662f\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u4e09\u4e2a\u60c5\u51b5\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u5f88\u5927\u3002

\u6211\u4eec\u901a\u8fc7\u5224\u65ad\u4e24\u4e2a\u7279\u5f81\u503c\u7684\u5927\u5c0f\u5173\u7cfb\u60c5\u51b5\u6765\u5224\u65ad\u4e00\u4e2a\u533a\u57df\u662f\u5426\u5305\u542b\u4e00\u4e2a\u89d2(corner)\u3001\u8fb9(edge)\u6216\u5e73\u9762(flat)\uff0c\u53ef\u4ee5\u5c06\u4ed6\u4eec\u653e\u5230\u4e00\u4e2a\u76f4\u65b9\u56fe\u4e2d\uff0c\u6839\u636e\u4e24\u4e2a\u7279\u5f81\u503c\u5f62\u6210\u7684\u70b9\u5bf9\u5728\u6574\u4e2a\u8c61\u9650\u4e2d\u51fa\u73b0\u7684\u4f4d\u7f6e\u6765\u5224\u65ad\u89d2\u70b9\u60c5\u51b5\uff1a

Figure from Carnegie Mellon University's slides. Corner detection.

\u4e3a\u4e86\u80fd\u591f\u91cf\u5316\u5730\u8868\u8fbe\u4e0a\u9762\u8fd9\u5f20\u56fe\u7684\u5206\u7c7b\u89c4\u5219\uff0c\u6211\u4eec\u5f15\u5165\u54c8\u91cc\u65af\u7b97\u5b50(Harris operator):

\\[ f = \\frac{\\lambda_1\\lambda_2}{\\lambda_1+\\lambda_2} = \\frac{determinant(H)}{trace(H)} \\]

\u8fd9\u91cc\u7684\u4e00\u4e2a\u7279\u6027\u662f\uff0c\u5bf9\u4e8e\u4e8c\u7ef4\u77e9\u9635\u6765\u8bf4\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u5e76\u4e0d\u9700\u8981\u6309\u7167\u4e4b\u524d\u7684\u6b65\u9aa4\uff0c\u8fdb\u884c\u4e3b\u6210\u5206\u5206\u6790\u4ee5\u540e\u518d\u5f97\u5230\uff0c\u800c\u662f\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8fd9\u4e2a\u516c\u5f0f\u5f97\u5230\u3002

\u800c\u8fd9\u4e2a \\(f\\) \u5c31\u53eb\u505a corner response\u3002

reminder \\[ det\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = ad-bc \\;\\;\\;\\;\\; trace\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = a+d \\]

\u5982\u4e0a\u8fd9\u5957\u65b9\u6cd5\u5c31\u662fHarris corner detector\u7684\u5b9e\u73b0\u3002

\u5f52\u7eb3\u4e00\u4e0b\uff0c\u5176\u6b65\u9aa4\u5c31\u662f\uff1a

Harris detector

  1. \u6c42\u5bfc | Compute derivatives at each pixel.
  2. \u534f\u65b9\u5dee\u77e9\u9635 | Compute covariance matrix \\(H\\) in a Gaussian window around each pixel.
  3. \u54cd\u5e94\u51fd\u6570 | Compute corner response function \\(f\\).
  4. \u9608\u503c\u8fc7\u6ee4 | Threshold \\(f\\).
  5. \u975e\u6781\u5927\u503c\u6291\u5236 | Find local maxima of response function (nonmaximum suppression).

\u66f4\u8be6\u7ec6\u7684\u8bf4\u660e\u53ef\u4ee5\u53c2\u8003 wiki \u4e0a\u7684\u8bf4\u660e\uff1aHarris corner detector\u3002

\u53e6\u4e00\u4e2a\u5173\u952e\u95ee\u9898\u662f\uff0c\u901a\u8fc7\u8fd9\u4e2a\u65b9\u6cd5\u5f97\u5230\u7684\u5173\u952e\u70b9\uff0c\u5177\u6709\u5bf9\u53d8\u6362\u4e0d\u654f\u611f\u6027\u5417\uff1f

\u5bf9\u6b64\uff0c\u7ed3\u8bba\u662f\uff1a

  1. Partially invariant to affine intensity change.
  2. Corner response is invariant w.r.t. translation.
  3. Corner response is invariant w.r.t. image rotation.
  4. Corner response is NOT invariant to scaling.

\u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\u7684\u89e3\u51b3\u65b9\u6848

\u9488\u5bf9\u7ed3\u8bba 4\uff0c\u7531\u4e8e Harris detector \u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u4f7f\u7528\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8fc7\u7a0b\u4e2d\u9700\u8981\u6ce8\u610f\u5c3a\u5ea6\uff0c\u5373\u7a97\u53e3\u7684\u5927\u5c0f\u9009\u5b9a\u3002

\u4e00\u79cd\u8bbe\u60f3\u7684\u65b9\u6848\u662f\uff0c\u4e0d\u65ad\u5c1d\u8bd5\u4e0d\u540c\u7684 window size\uff0c\u7136\u540e\u53d6\u5f97 response \u66f2\u7ebf\uff0c\u5047\u8bbe response \u7684\u5927\u5c0f\u53ea\u4e0e scale \u6709\u5173\uff0c\u5219\u66f2\u7ebf\u90fd\u5e94\u8be5\u662f\u5355\u5cf0\u7684\uff0c\u800c\u53d6\u51fa\u8fd9\u4e2a\u5cf0\u503c\uff08\u7279\u5f81\u6700\u660e\u663e\u7684\u65f6\u5019\uff09\uff0c\u5c31\u53ef\u4ee5\u5f53\u4ed6\u4e3a\u5bf9\u5e94\u7684 scale \u4ee5\u53ca\u5bf9\u5e94\u7684 response\u3002

\u4e0d\u8fc7\u4e00\u822c\u5b9e\u9645\u7684\u505a\u6cd5\u662f\u56fa\u5b9a\u7a97\u53e3\u5927\u5c0f\uff0c\u800c\u6539\u53d8\u56fe\u7247\u7684\u5927\u5c0f\uff0c\u518d\u5728\u5f97\u5230\u7684\u56fe\u50cf\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8ba1\u7b97\uff0c\u5373\u5bf9\u4e0d\u540c\u5206\u8fa8\u7387\u7684\u56fe\u7247\u4e0a\u5206\u522b\u8fdb\u884c\u54c8\u91cc\u65af\u68c0\u6d4b\u3002\uff08\u76f8\u5f53\u4e8e\u7ed9\u56fe\u7247\u589e\u52a0\u4e86\u4e00\u4e2a\u7ef4\u5ea6\uff0c\u672c\u8d28\u4e0a\u548c\u4e0a\u9762\u7684\u65b9\u6cd5\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u7528\u4e86\u4e00\u4e2a\u66f4\u5408\u7406\u7684\u5b9e\u73b0\u89d2\u5ea6\u3002\uff09

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u6591\u70b9\u68c0\u6d4b","title":"\u6591\u70b9\u68c0\u6d4b","text":"

\u9664\u4e86\u89d2\u70b9\uff0c\u6591\u70b9(blob)\u4e5f\u662f\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u7279\u6027\uff0c\u975e\u5e38\u9002\u5408\u4f5c\u4e3a\u5173\u952e\u70b9\u3002

\u800c\u6591\u70b9\u7684\u5bfb\u627e\u6211\u4eec\u5219\u53ef\u4ee5\u5229\u7528\u6ee4\u6ce2\u5668\u6765\u5b9e\u73b0\uff0c\u8ba9\u6211\u4eec\u56de\u987e\u7b2c\u4e09\u7ae0\u8fb9\u7f18\u63d0\u53d6\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u7c7b\u4f3c\u7684\u505a\u6cd5\uff0c\u4f7f\u7528\u4e00\u4e2a\u4e2d\u95f4\u8d1f\u56db\u5468\u6b63\u7684\u6ee4\u6ce2\u5668\u6765\u63d0\u53d6\u6591\u70b9\u3002

\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u4f7f\u7528 Gaussian \u6ee4\u6ce2\u5668\u7684 Laplacian\uff0c\u5373 Laplacian of Gaussian Filter(LoG)\uff0c\u6765\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u548c\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\u3002

\ud83d\udc49 Laplacian \u7b97\u5b50

\u5b9e\u9645\u4e0a\u4e5f\u7b49\u6548\u4e8e\u5148\u5bf9\u56fe\u7247\u4f5c\u9ad8\u65af\u6a21\u7cca\uff08\u51cf\u5c0f\u566a\u58f0\u5f71\u54cd\uff09\uff0c\u518d\u8ba1\u7b97\u5176\u62c9\u666e\u62c9\u65af\u7b97\u5b50\uff0c\u5373\uff1a

\\[ \\nabla^2(f*g) = f * \\nabla^2 g \\]

\u5176\u4e2d\uff0cLoG \u7684 scale \u662f\u901a\u8fc7\u9ad8\u65af\u51fd\u6570\u7684 \\(\\sigma\\) \u63a7\u5236\u7684\uff0c\u4e5f\u540c\u6837\u901a\u8fc7\u50cf\u7d20\u91d1\u5b57\u5854\u6765\u5b9e\u73b0\u3002

\u53c8\u6216\u8005\u53ef\u4ee5\u4f7f\u7528 Difference of Gaussian(DoG)\uff0c\u5373\u5c06 Laplacian of Gaussian Filter \u66ff\u6362\u4e3a\u4e00\u4e2a\u7531\u4e24\u4e2a\u9ad8\u65af\u51fd\u6570\u505a\u5dee\u5f97\u5230\u7684 Filter\uff0c\u76f8\u5bf9\u6765\u8bf4\u6548\u7387\u66f4\u9ad8\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u8868\u8fbe","title":"\u5173\u952e\u70b9\u8868\u8fbe","text":"

\u9009\u5b9a\u5173\u952e\u70b9\u540e\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u5982\u4f55\u63cf\u8ff0\u548c\u8868\u8fbe\u8fd9\u4e9b\u70b9\uff0c\u4ee5\u4f7f\u5bf9\u5e94\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fd1\uff0c\u800c\u4e0d\u76f8\u5173\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fdc\u3002

\u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u5c06\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u4f5c\u4e3a\u4e00\u4e2a\u7279\u6027\u5411\u91cf(feature vector)\u8fdb\u884c\u6bd4\u8f83\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u5bf9\u504f\u79fb\u7684\u8bef\u5dee\u8fc7\u4e8e\u654f\u611f\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e5f\u8bb8\u4e24\u5f20\u56fe\u7247\u5f88\u50cf\uff0c\u4f46\u662f\u56e0\u4e3a\u4e00\u70b9\u4f4d\u79fb\u8bef\u5dee\uff0c\u5bfc\u81f4\u5411\u91cf\u521a\u597d\u9519\u5f00\uff0c\u5bfc\u81f4\u7ed3\u679c\u663e\u793a\u4e24\u4e2a\u70b9\u5dee\u522b\u5f88\u5927\u3002\u8fd9\u662f\u56e0\u4e3a\u8fd9\u79cd\u505a\u6cd5\u5bf9\u50cf\u7d20\u70b9\u5728\u7a97\u53e3\u4e2d\u7684\u4f4d\u7f6e\u5f88\u654f\u611f\uff0c\u4f46\u662f\u663e\u7136\u4f4d\u7f6e\u5e76\u4e0d\u662f\u5173\u952e\u70b9\u7684\u7279\u5f81\u4e4b\u6240\u5728\u3002

\u53e6\u5916\u66f4\u597d\u7684\u505a\u6cd5\u662f\u5c3a\u5ea6\u4e0d\u53d8\u7684\u7279\u5f81\u53d8\u6362(Scale Invariant Feature Transform, SIFT) descriptor\uff0c\u4e0d\u518d\u4f7f\u7528\u50cf\u7d20\u503c\uff0c\u800c\u662f\u4f7f\u7528\u533a\u57df\u4e2d\u7684\u68af\u5ea6\u7684\u5206\u5e03\u4f5c\u4e3a\u4e00\u4e2a\u63cf\u8ff0\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\u4e00\u5f20 \\([0,2\\pi)\\) \u7684\uff0c\u5faa\u73af\u7684\u76f4\u65b9\u56fe\u3002\u6b64\u65f6\u5c0f\u7684\u5e73\u79fb\u548c\u7f29\u653e\u90fd\u4e0d\u4f1a\u5bf9\u5b83\u4ea7\u751f\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u65cb\u8f6c\u53ea\u4f1a\u5bfc\u81f4\u76f4\u65b9\u56fe\u7684\u5faa\u73af\u5e73\u79fb\u2014\u2014\u4e0d\u8fc7\u8fd9\u79cd\u5faa\u73af\u5e73\u79fb\u662f\u5f88\u597d\u5904\u7406\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u4e2d\u6700\u5927\u7684\u5206\u91cf\u4f5c\u4e3a\u53c2\u8003\uff0c\u5e76\u5c06\u6574\u4e2a\u76f4\u65b9\u56fe\u5e73\u79fb\u5bf9\u9f50\u3002\u76f8\u6bd4\u76f4\u63a5\u5c06\u50cf\u7d20\u8f6c\u5316\u4e3a\u7279\u5f81\u5411\u91cf SIFT \u9c81\u68d2\u6027\u66f4\u9ad8\u3002

\u5b8c\u6574\u7684 SIFT \u662f\u5305\u62ec\u300c\u68c0\u6d4b\u300d\u6b65\u9aa4\u7684\u3002

Other detectors and descriptors:

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u5339\u914d","title":"\u5173\u952e\u70b9\u5339\u914d","text":"

\u6240\u8c13\u7684\u5339\u914d(matching)\u5c31\u662f\u5b57\u9762\u4e0a\u7684\u5c06\u4e24\u5f20\u56fe\u4e2d\u5bf9\u5e94\u7684\u70b9\u5efa\u7acb\u8d77\u5339\u914d\u5173\u7cfb\u3002\u800c\u8bc4\u4f30\u65b9\u6cd5\u5c31\u662f\u5bfb\u627e\u300c\u8ddd\u79bb\u300d\u6700\u63a5\u8fd1\u7684\u70b9\u3002

\u800c\u8fd9\u91cc\u7684\u300c\u8ddd\u79bb\u51fd\u6570\u300d\u662f\u7528\u6765\u8861\u91cf\u4e24\u4e2a\u5173\u952e\u70b9\u7684\u8868\u8fbe\u7684\u5dee\u5f02\u7684\u51fd\u6570\uff0c\u4e00\u822c\u4f7f\u7528 L2 distance\uff0c\u5373 \\(||f_1 - f_2||\\)\u3002

\u91cd\u590d\u6027\u7eb9\u7406

\u7136\u800c\u9700\u8981\u7279\u522b\u6ce8\u610f\u70b9\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u67d0\u4e2a\u7279\u5f81\u56fe\u6848\u91cd\u590d\u51fa\u73b0\u7684\u60c5\u51b5\uff0c\u8fd9\u7c7b\u95ee\u9898\u53eb\u505a\u91cd\u590d\u6027\u7eb9\u7406\u95ee\u9898\u3002

\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ef\u80fd\u6709\u5f88\u591a\u5173\u952e\u70b9\u80fd\u548c\u8fd9\u4e2a\u5173\u952e\u70b9\u5b9e\u73b0\u5339\u914d\uff08\u8868\u8fbe\u76f8\u8fd1\uff09\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u7528 Ratio score = \\(\\frac{ ||f_1 - f_2|| }{ ||f_1 - f_2'|| }\\)\uff0c\u6bd4\u8f83\u6700\u63a5\u8fd1\u7684\u4e24\u79cd\u5339\u914d\u3002

\u5982\u679c Ratio score \u63a5\u8fd1 1\uff0c\u8bf4\u660e \\(f_1, F_2,f_2'\\) \u7684\u8868\u8fbe\u90fd\u5f88\u63a5\u8fd1\uff0c\u8fd9\u4e2a\u5339\u914d\u5e76\u4e0d\u53ef\u9760\uff0c\u53ea\u80fd\u4e22\u6389\u8fd9\u4e2a\u5173\u952e\u70b9\u3002

\u5728\u4f20\u7edf CV \u6280\u672f\u4e2d\uff0c\u6211\u4eec\u5f88\u96be\u5904\u7406\u8fd9\u4e00\u7c7b\u91cd\u590d\u6027\u7eb9\u7406\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u9047\u5230\u8fd9\u79cd\u96be\u4ee5\u5bfb\u627e\u5339\u914d\u5173\u7cfb\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ea\u80fd\u9009\u62e9\u4e0d\u5339\u914d\u5b83\u4eec\u3002

\u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u52a0\u5339\u914d\u7684\u51c6\u786e\u6027\uff0c\u6211\u4eec\u8fd8\u6709\u4e00\u4e2a\u5224\u5b9a\u89c4\u5219\uff1a\u4e24\u70b9\u76f8\u4e92\u6700\u76f8\u4f3c\uff0c\u5219\u8be5\u5339\u914d\u5341\u5206\u53ef\u4fe1\u3002\uff08\u5728 I2 \u4e2d\u4f60\u6700\u50cf\u6211\uff0c\u5728 I1 \u4e2d\u6211\u6700\u50cf\u4f60\uff09

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u8fd0\u52a8\u4f30\u8ba1","title":"\u8fd0\u52a8\u4f30\u8ba1","text":"

\u5148\u524d\uff0c\u6211\u4eec\u7740\u773c\u4e8e\u5355\u5f20\u56fe\u7247\uff0c\u6216\u8005\u8bf4\u51e0\u5f20\u56fe\u7247\uff0c\u4ecd\u7136\u662f\u4ee5\u4e00\u4e2a\u9759\u6001\u7684\u89c6\u89d2\u6765\u89c2\u5bdf\u56fe\u50cf\u3002

\u800c\u5f53\u6211\u4eec\u628a\u7814\u7a76\u5bf9\u8c61\u4ece\u56fe\u7247\u6539\u53d8\u4e3a\u89c6\u9891\u6216\u8005\u8bf4\u56fe\u7247\u5e8f\u5217\u7684\u65f6\u5019\uff0c\u56fe\u7247\u5c31\u88ab\u8d4b\u4e88\u4e86\u8fd0\u52a8\u7684\u5c5e\u6027\uff0c\u800c\u8fd9\u5c31\u5f15\u51fa\u4e86\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u3002

\u9996\u5148\uff0c\u8fd0\u52a8\u6309\u7167\u6210\u56e0\u4e3b\u8981\u53ef\u4ee5\u5206\u4e3a\u76f8\u673a\u8fd0\u52a8\u548c\u573a\u666f\u8fd0\u52a8\u4e24\u4e2a\u7ef4\u5ea6\u3002

\u76f8\u673a\u8fd0\u52a8 \u573a\u666f\u8fd0\u52a8 eg (\u5149\u7ebf\u53d8\u5316\u7b49\u5f71\u54cd\u89c6\u9891\u6bcf\u4e00\u5e27\u7684\u5185\u5bb9\u5b58\u5728\u5149\u5f71\u5dee\u5f02\u7b49) \u9759\u666f\u201c\u8fd0\u955c\u201d \u76d1\u63a7\u5f55\u50cf \u4f53\u80b2\u8d5b\u4e8b\u955c\u5934\u8ddf\u8e2a

\u800c\u9488\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\uff0c\u6709\u8fd9\u4e48\u51e0\u79cd\u89e3\u51b3\u7684\u89c6\u89d2\uff1a

\u800c\u4e24\u4e2a\u89c6\u89d2\u90fd\u53ef\u4ee5\u4f7f\u7528 Lucas-Kanade method \u89e3\u51b3\u3002

\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u4e00\u4e2a\u66f4\u660e\u786e\u7684\u5b9a\u4e49\uff1a

motion estimation

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

\u8fd0\u52a8\u4f30\u8ba1\u662f\u6307\u4ece\u4e00\u4e2a 2D \u56fe\u50cf\u5230\u53e6\u4e00\u4e2a 2D \u56fe\u50cf\u7684\u8f6c\u6362\u4e2d\u786e\u5b9a\u63cf\u8ff0\u8fd0\u52a8\u7684\u8fd0\u52a8\u77e2\u91cf\u7684\u8fc7\u7a0b\uff0c\u901a\u5e38\u662f\u4ece\u89c6\u9891\u5e8f\u5217\u4e2d\u76f8\u90bb\u7684\u5e27\u4e2d\u63d0\u53d6\u3002

\u5047\u8bbe\u6211\u4eec\u6709\u5339\u914d\u70b9 \\(P(x,y,t)\\) \u548c \\(P(x+u, y+v, t+1)\\)\uff0c\u5219\u8fd0\u52a8\u4f30\u8ba1\u5219\u662f\u6c42\u89e3 \\((u,v)\\) \u7684\u8fc7\u7a0b\u3002

\u4e0d\u540c\u4e8e\u5173\u952e\u70b9\u7684\u5339\u914d\uff0c\u8fd0\u52a8\u4f30\u8ba1\u66f4\u4fa7\u91cd\u4e8e\u5bf9\u5173\u952e\u70b9\u7684\u65f6\u5e8f\u5173\u7cfb\u7684\u5339\u914d\u4e0e\u63cf\u8ff0\u3002

\u800c\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u8ba8\uff0c\u90fd\u9700\u8981\u57fa\u4e8e LK \u5047\u8bbe\u5c55\u5f00\uff1a

Key Asumptions of Lucas-Kanade

  1. [Small motion] \u76f8\u90bb\u5e27\uff0c\u5339\u914d\u70b9\u7684\u8fd0\u52a8\u8ddd\u79bb\u5c0f\uff1b
  2. [Brightness constancy] \u76f8\u90bb\u5e27\uff0c\u70b9\u7684\u4eae\u5ea6\u503e\u5411\u4e8e\u4e0d\u53d8\uff0c\u5373\u53d8\u5316\u5fae\u5c0f\uff1b
  3. [Spatial coherence] \u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\uff1b

\u63a5\u4e0b\u6765\uff0c\u57fa\u4e8e LK \u5047\u8bbe\uff0c\u6211\u4eec\u6765\u7814\u7a76\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\u7684\u6c42\u89e3\u3002

\u9996\u5148\uff0c\u6211\u4eec\u5c06\u7b2c\u4e8c\u6761\u5047\u8bbe\u8868\u8fbe\u5f0f\u5316\uff0c\u5373\u6709\uff1a

\\[ I(x,y,t) = I(x+u, y+v, t+1) \\]

\u4e3a\u4e86\u6c42\u89e3 \\(u\\) \u548c \\(v\\)\uff0cLK Method \u5bf9\u5176\u4f5c\u6cf0\u52d2\u5c55\u5f00\uff1a

\\[ I(x+u,y+v,t+1) \\approx I(x,y,t) + I_x\\cdot u + I_y \\cdot v + I_t \\]

\u79fb\u9879\uff1a

\\[ I(x+u,y+v,t+1) - I(x,y,t) = I_x\\cdot u + I_y \\cdot v + I_t \\]

\u6839\u636e\u5047\u8bbe 2\uff0c\u5f97\u5230\uff1a

\\[ I_x\\cdot u + I_y \\cdot v + I_t \\approx 0 \\]

\u5373\uff1a

\\[ \\nabla I \\cdot \\begin{bmatrix} u & v \\end{bmatrix}^T + I_t = 0 \\]

\u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\u5173\u4e8e \\(u\\) \u548c \\(v\\) \u7684\u4e00\u4e2a\u8f83\u7b80\u5355\u7684\u7b49\u5f0f\u3002

\u7136\u800c\u6211\u4eec\u53ea\u6709\u4e00\u4e2a\u7b49\u5f0f\uff0c\u4f46\u9700\u8981\u6c42\u89e3\u7684\u672a\u77e5\u5143 \\(u\\) \u548c \\(v\\) \u6709\u4e24\u4e2a\u3002

\u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86\u5047\u8bbe 3\uff0c\u5373\u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\u3002

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u628a\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u90fd\u5e26\u5165\u4e0a\u9762\u90a3\u4e2a\u7b49\u5f0f\uff0c\u5c1d\u8bd5\u6765\u6c42\u89e3\uff08\u5927\u81f4\u90fd\u76f8\u4f3c\u7684\uff09\\(u\\) \u548c \\(v\\)\u3002\u6b64\u65f6\u6211\u4eec\u7684\u65b9\u7a0b\u6570\u91cf\u5c31\u975e\u5e38\u5145\u88d5\u4e86\u3002\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\u3002

\\[ Ad=b \\rightarrow \\min\\limits_d ||Ad-b||^2 \\]

Least squares solution(\u524d\u9762\u63d0\u5230\u8fc7\u7684\u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u8fd1\u4f3c\u89e3) for d given by \\((A^TA)d = A^Tb\\).

\u800c\u8fd9\u4e2a\u89e3\u662f\u5426\u5b58\u5728\u7684\u6761\u4ef6\u662f\uff1a

\\[ \\underbrace{ \\begin{bmatrix} \\sum I_x I_x & \\sum \\sum I_x I_x \\\\ \\sum I_x I_y & \\sum I_y I_y \\end{bmatrix} }_{A^T A} \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\underbrace{ \\begin{bmatrix} \\sum I_x I_t \\\\ \\sum I_y I_t \\end{bmatrix} }_{A^T b} \\]

\u5728\u8be5\u5f0f\u4e2d\uff0c\\(A^TA\\) \u9700\u8981\u662f\u53ef\u9006\u7684\uff0c\u5e76\u4e14\u5b83\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u4e0d\u80fd\u592a\u5c0f\u3002\u4e5f\u5c31\u8be5\u70b9\u80fd\u591f\u88ab Harris corner detector \u68c0\u6d4b\u5230\u70b9\u89d2\u70b9\uff01

\u56e0\u6b64\uff0c\u5018\u82e5\u4f7f\u7528 LK \u65b9\u6cd5\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(A^TA\\) \u53ef\u9006\uff0c\u4e14\u56fe\u50cf\u4e2d\u4e0d\u80fd\u6709\u592a\u591a\u566a\u70b9\u3002

\u6b64\u5916\uff0c\u5173\u4e8e\u5bf9\u5047\u8bbe 1 \u7684\u7ea6\u675f\uff0c\u539f\u5219\u4e0a\u4e24\u5e27\u4e4b\u95f4\u7684\u8fd0\u52a8\u5dee\u8ddd\u5e94\u8be5\u5c0f\u4e8e\u4e00\u4e2a\u50cf\u7d20\uff0c\u7136\u800c\u8fd9\u4e2a\u6761\u4ef6\u975e\u5e38\u82db\u523b\u3002\u6240\u4ee5\u6211\u4eec\u7684\u53ef\u4ee5\u5148\u5bf9\u56fe\u7247\u8fdb\u884c\u6a21\u7cca/\u7f29\u5c0f\u5904\u7406\uff0c\u50cf\u7d20\u8db3\u591f\u201c\u5927\u201d\u4e4b\u540e\u5c31\u53ef\u4ee5\u6ee1\u8db3\u8fd9\u4e2a\u5047\u8bbe 1\u3002\u7136\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u4f1a\u4e22\u5931\u5f88\u591a\u4fe1\u606f\uff0c\u6240\u4ee5\u53ea\u6839\u636e\u8fd9\u4e2a\u6761\u4ef6\u6765\u8ba1\u7b97\u4e5f\u4e0d\u884c\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u50cf\u7d20\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u9010\u5c42\u6b21\u4f30\u8ba1\uff0c\u518d\u4e0d\u65ad\u7ec6\u5316\u7684\u505a\u6cd5\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec06/","title":"Lecture 6 | Image Alignment and Stitching","text":"

\u7ea6 1320 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec06/#\u56fe\u50cf\u62fc\u63a5","title":"\u56fe\u50cf\u62fc\u63a5","text":"

\u6240\u8c13\u7684\u56fe\u50cf\u62fc\u63a5\uff0c\u6a21\u5f0f\u4e0a\u5c31\u662f\u5bfb\u627e\u82e5\u5e72\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u5e76\u5c06\u753b\u9762\u5185\u5bb9\u8fdb\u884c\u62fc\u63a5\u548c\u5ef6\u5c55\uff0c\u5176\u672c\u8d28\u662f\u6c42\u89e3\u56fe\u50cf\u4e4b\u95f4\u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u6a21\u5f0f\u62df\u5408\u7684\u95ee\u9898\u3002\u5e94\u7528\u4e0a\u6bd4\u5982 \u5168\u666f\u56fe(panorama) \u6216 360\u00b0VR\u7b49\u3002

\u6295\u5f71\u5e73\u9762/\u66f2\u9762

\u5e38\u89c1\u7684\u56fe\u50cf\u62fc\u63a5\u6709\u6bd4\u5982\u5c06\u5e73\u884c\u7684\u666f\u8c61\u5728\u5e73\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\uff0c\u4e5f\u6709\u5c06\u6c34\u5e73\u73af\u7ed5\u7684\u7684\u666f\u8c61\u5728\u67f1\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\u7b49\u3002\u533a\u522b\u5728\u4e8e\u9700\u8981\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u8868\u8fbe\u8fdb\u884c\u4e00\u4e2a\u201c\u53d8\u6362\u201d\uff0c\u4f46\u5b9e\u9645\u53d8\u5316\u65b9\u6cd5\u4e0d\u4f1a\u6709\u5927\u533a\u522b\uff0c\u4ecd\u7136\u662f\u5148\u68c0\u6d4b\u76f8\u540c\u90e8\u5206\u518d\u6c42\u89e3\u53d8\u6362\u5173\u7cfb\u3002

\u5728\u8fd9\u91cc\u9700\u8981\u505a\u7684\u4e00\u4e2a\u7279\u522b\u8bf4\u660e\u662f\uff0c\u5728\u4e4b\u540e\u8be6\u7ec6\u4ecb\u7ecd\u201c\u53d8\u6362\u201d\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\u624b\u673a\u62cd\u6444\u5e7f\u89d2\u7167\u7247\u65f6\uff0c\u4f1a\u8981\u6c42\u62cd\u6444\u8005\u53ea\u505a\u89c6\u89d2\u53d8\u5316\u800c\u4e0d\u505a\u4f4d\u79fb\u3002

\u8fc7\u7a0b\u6982\u8ff0

\u6211\u4eec\u8fd9\u91cc\u8003\u8651\u7684\u56fe\u50cf\u62fc\u63a5\u95ee\u9898\uff0c\u66f4\u591a\u6307\u7684\u662f\u4e24\u5f20\u56fe\u7247\u62e5\u6709\u5171\u540c\u523b\u753b\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u62fc\u63a5\uff0c\u5373\u4e24\u5f20\u7167\u7247\u5b58\u5728\u4ea4\u96c6\u3002

\u9996\u5148\uff0c\u6211\u4eec\u901a\u8fc7\u56fe\u50cf\u7279\u5f81\u5339\u914d\u76f8\u5173\u6280\u672f\uff0c\u627e\u5230\u8fd9\u4e24\u5f20\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u8fd9\u4e9b\u5171\u540c\u90e8\u5206\u5982\u4f55\u5b9e\u73b0\u8f6c\u5316\uff08\u76f8\u5f53\u4e8e\u5728\u505a\u201c\u5bf9\u9f50\u201d\uff09\u3002

\u62fc\u63a5\u8fc7\u7a0b\u4e2d\u4f1a\u51fa\u73b0\u8fb9\u754c\uff0c\u800c\u8fd9\u4e2a\u8fb9\u754c\u6211\u4eec\u662f\u53ef\u4ee5\u4eba\u4e3a\u9009\u62e9\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u8ba9\u5b83\u5dee\u8ddd\u6700\u5c0f\u7684\u5730\u65b9\u6210\u4e3a\u8fb9\u754c\uff0c\u53c8\u6216\u8005\u662f\u4e00\u4e2a\u56fe\u5272\u95ee\u9898\uff1b

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/","title":"Lecture 7 | Structure From Motion","text":"

\u7ea6 8658 \u4e2a\u5b57 14 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 29 \u5206\u949f

\u524d\u8a00

\u4e2a\u4eba\u611f\u89c9\u8fd9\u4e00\u7ae0\u7684\u5185\u5bb9\u867d\u7136\u8109\u7edc\u6e05\u6670\uff0c\u4f46\u662f\u9700\u8981\u4e0d\u65ad\u5f15\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5982\u679c\u76f4\u63a5\u91c7\u7528\u201c\u7528\u5230\u4ec0\u4e48\u8bb2\u4ec0\u4e48\u201d\u7684\u987a\u5e8f\u9610\u8ff0\uff0c\u53ef\u80fd\u4f1a\u6709\u4e9b\u6742\u4e71\uff0c\u4e0d\u65b9\u4fbf\u77e5\u8bc6\u7d22\u5f15\u548c\u590d\u4e60\uff0c\u6240\u4ee5\u6211\u5927\u81f4\u6309\u7167\u62d3\u6251\u6392\u5e8f\u7684\u987a\u5e8f\u6392\u5217\u5185\u5bb9\uff0c\u503e\u5411\u4e8e\u5b8c\u6574\u5730\u4ecb\u7ecd\u4e00\u4e0b\u524d\u7f6e\uff0c\u518d\u5f15\u5165\u4e4b\u540e\u7684\u5185\u5bb9\u5e76\u9636\u6bb5\u6027\u5c0f\u7ed3\uff0c\u53ef\u80fd\u770b\u8d77\u6765\u6bd4\u8f83\u5510\u7a81\uff0c\u4f46\u662f\u5927\u6982\u5bf9\u56de\u5934\u67e5\u77e5\u8bc6\u70b9\u6bd4\u8f83\u65b9\u4fbf\u3002

\u8bf4\u660e

\u672c\u6587\u4e2d\u63d0\u5230\u7684\u6240\u6709\u7684\u300c\u6210\u50cf\u5e73\u9762\u300d\u6307\u7684\u90fd\u662f\u6211\u4eec\u7684\u7b80\u5316\u51e0\u4f55\u6a21\u578b\u4e2d\u7684\u865a\u62df\u6210\u50cf\u5e73\u9762\uff0c\u5e76\u4e0d\u662f\u7269\u7406\u610f\u4e49\u4e0a\u5c0f\u5b54\u6210\u50cf\u6240\u5728\u7684\u90a3\u4e2a\u6210\u53cd\u5411\u5012\u7acb\u50cf\u7684\u5e73\u9762\uff01

\u8fd0\u52a8\u63a8\u65ad\u7ed3\u6784(Structure from Motion, SfM)\u7528\u4e8e\u4f30\u8ba1\u4e8c\u7ef4\u56fe\u50cf\u4e2d\u7684\u4e09\u7ef4\u7ed3\u6784\uff0c\u901a\u8fc7\u76f8\u673a\u8fd0\u52a8\uff08\u5e73\u79fb\u3001\u65cb\u8f6c\uff09\u5f15\u8d77\u7684\u753b\u9762\u53d8\u5316\u6765\u8ba1\u7b97\u5176\u53cd\u5e94\u7684 3D \u7ed3\u6784\u3002

\u5728\u673a\u5668\u4eba\u9886\u57df\uff0c\u4e00\u4e2a\u76f8\u5173\u7684\u9886\u57df\u662f \u540c\u65f6\u5b9a\u4f4d\u4e0e\u5730\u56fe\u6784\u5efa(Simultaneous Localization and Mapping, SLAM)\u3002

\u4e09\u4e2a\u5173\u952e\u95ee\u9898

  1. \u5982\u4f55\u63cf\u8ff0\u76f8\u673a\u7684\u6295\u5f71\u884c\u4e3a\uff0c\u4e5f\u5c31\u662f\u76f8\u673a\u6a21\u578b\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u672c\u5c0f\u7ed3\u6307\u900f\u89c6\u6a21\u578b\uff1b
  2. \u5982\u4f55\u901a\u8fc7\u56fe\u50cf\u6c42\u89e3\u76f8\u673a\u53c2\u6570\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u76f8\u673a\u6807\u5b9a(Camera Calibration)\uff0c\u4ee5\u53ca\u5982\u4f55\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4e0e\u671d\u5411\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\uff1b
  3. \u5982\u4f55\u5229\u7528\u82e5\u5e72\u89c6\u89d2\u8fdb\u884c\u91cd\u5efa\uff1b

\u5176\u4e2d\uff0c\u7b2c\u4e00\u4e2a\u547d\u9898\u7684\u5185\u5bb9\u5df2\u7ecf\u5728\u7b2c\u4e8c\u8bb2\u4e2d\u6d89\u53ca\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

\u76f8\u673a\u6807\u5b9a(Camera Calibration)\u5373\u6c42\u89e3\u76f8\u673a\u7528\u6765\u63cf\u8ff0\u76f8\u673a\u6a21\u578b\u7684\u81ea\u8eab\u53c2\u6570\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5185\u53c2(Intrinsic Parameters)\uff1b\u800c\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4ee5\u53ca\u671d\u5411\uff0c\u4e0e\u5185\u53c2\u76f8\u5bf9\u5e94\u7684\uff0c\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5916\u53c2(Extrinsic Parameters)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","title":"\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","text":"

\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898

\u9996\u5148\uff0c\u4e3a\u4e86\u5c55\u5f00\u4e4b\u540e\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898(Visual Localization Problem)\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684\u4e09\u7ef4\u6a21\u578b\uff0c\u4ece\u67d0\u4e2a\u4f4d\u7f6e\u5bf9\u5176\u8fdb\u884c\u62cd\u6444\uff0c\u6c42\u89e3\u62cd\u6444\u4f4d\u7f6e\u548c\u89c6\u89d2\u3002

\u800c\u4e3a\u4e86\u5c55\u5f00\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u5bf9\u76f8\u673a\u6210\u50cf\u8fd9\u4e2a\u8fc7\u7a0b\u8fdb\u884c\u4e00\u4e2a\u6570\u5b66\u5efa\u6a21\u2014\u2014\u66f4\u8be6\u7ec6\u7684\u6765\u8bf4\uff0c\u662f\u5efa\u6a21\u4e00\u4e2a\u7a7a\u95f4 3D \u70b9\u4e0e\u76f8\u673a\u4e0a\u7279\u5b9a\u50cf\u7d20\u533a\u57df\u7684\u8f6c\u5316\u5173\u7cfb\u3002

\u9996\u5148\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u6295\u5f71\u6a21\u578b\u7684\u53ef\u89c6\u5316\u8868\u793a\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\uff1a

\u56de\u987e

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

\u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

\u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cd\u5c06\u76f8\u673a\u6a21\u578b\u6210\u50cf\u539f\u7406\u53ef\u89c6\u5316\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u653e\u5230 3D \u7a7a\u95f4\u4e2d\uff1a

\u8fd9\u5f20\u56fe\u5927\u81f4\u63cf\u8ff0\u4e86\uff1a\u5728\u7279\u5b9a\u4f4d\u7f6e\u6709\u7740\u7279\u5b9a\u671d\u5411\u7684\u76f8\u673a\u6a21\u578b\u5982\u4f55\u62cd\u5230\u5df2\u77e5 3D \u666f\u8c61\u7684\u7279\u5b9a\u753b\u9762\uff0c\u4f46\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u300cPicture\u300d\u4ee3\u8868\u7684\u662f Image Plane\uff0c\u4e5f\u5c31\u662f\u6210\u50cf\u5e73\u9762\uff0c\u6b64\u65f6\u300c\u5750\u6807\u300d\u7684\u5355\u4f4d\u662f\u957f\u5ea6\uff0c\u5982\u6beb\u7c73\u2014\u2014\u4e0e\u4ee5\u300c\u50cf\u7d20\u300d\u4e3a\u57fa\u672c\u5355\u5143\u7684\u201c\u56fe\u7247\u201d\u6709\u4e00\u5b9a\u533a\u522b\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u4ece 3D \u4e2d\u7684\u67d0\u4e00\u4e2a\u70b9\uff0c\u5230\u56fe\u7247\u4e0a\u7684\u67d0\u5757\u50cf\u7d20\u533a\u57df\uff0c\u6709\u5927\u81f4\u5982\u4e0b\u51e0\u4e2a\u9636\u6bb5\uff1a

graph LR\n    A[3D \u666f\u8c61] --> B[2D \u6210\u50cf\u5e73\u9762] --> C[\u50cf\u7d20\u56fe\u50cf];

\u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4e2d\u4ecb\u7ecd\u7684\u4e00\u7cfb\u5217\u5efa\u6a21\uff0c\u662f\u5efa\u7acb\u5728\u4ee5\u76f8\u673a\u4e3a\u53c2\u8003\u7cfb\u7684\u60c5\u51b5\u4e0b\u7684\uff0c\u800c\u5728\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u62e5\u6709\u7684 3D \u666f\u8c61\u4fe1\u606f\u80af\u5b9a\u4e0d\u662f\u901a\u8fc7\u76f8\u673a\u5750\u6807(Camera Coordinates)\u6765\u8868\u793a\u7684\uff0c\u800c\u662f\u7528\u4e16\u754c\u5750\u6807(World Coordinates)\uff0c\u663e\u7136\uff0c\u8fd9\u91cc\u53ea\u5305\u62ec\u5e73\u79fb\u548c\u65cb\u8f6c\uff0c\u4e5f\u5c31\u662f\u7ecf\u8fc7\u4e00\u6b21\u4eff\u5c04\u53d8\u6362\u3002

\u6211\u4eec\u5bf9\u4e0a\u9762\u90a3\u4e2a\u6d41\u7a0b\u56fe\u7684\u7ed3\u679c\u8fdb\u884c\u4e00\u4e2a\u6539\u8fdb\uff1a

graph LR\n    A[\"(\u4e16\u754c\u5750\u6807) 3D \u666f\u8c61\"] --> B[\"(\u76f8\u673a\u5750\u6807) 3D \u666f\u8c61\"] --> C[\"(\u6210\u50cf\u5e73\u9762) 2D \u6620\u5c04\"] --> D[\"(\u4f20\u611f\u5668\u5e73\u9762) \u50cf\u7d20\u56fe\u50cf\"];
"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e16\u754c\u5750\u6807-to-\u76f8\u673a\u5750\u6807","title":"\u4e16\u754c\u5750\u6807 to \u76f8\u673a\u5750\u6807","text":"

\u4e3a\u4e86\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u8f6c\u6362\uff0c\u6211\u4eec\u9700\u8981\u77e5\u9053\u76f8\u673a\u5750\u6807\u5728\u4e16\u754c\u5750\u6807\u4e2d\u7684\u65b9\u5411\u4e0e\u4f4d\u7f6e\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b9e\u9645\u4e0a\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u77e5\u9053\u76f8\u673a\u7684\u5916\u53c2\u3002

\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u5c31\u662f\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u80fd\u591f\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7cfb\u4e0b\u5750\u6807\u7684\u8f6c\u6362\uff1a

\\[ \\underbrace{\\;\\mathbf{x}_w = \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix}\\;}_{\\text{World Coordinates}} \\xrightarrow{\\text{Rotation \\& Movement}} \\underbrace{\\;\\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix}\\;}_{\\text{Camera Coordinates}} \\]

\u6211\u4eec\u5b9a\u4e49\u5916\u53c2 \\((R,\\mathbf{c}_w)\\)\uff0c\u5206\u522b\u4ee3\u8868\u300c\u4ece\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u65cb\u8f6c\u77e9\u9635\u300d\u548c\u300c\u5728\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u76f8\u673a\u7684\u4e2d\u5fc3\u5750\u6807\u300d\uff0c\u5219\u53d8\u6362\u540e\u7684\u5750\u6807\u5373\u4e3a\uff1a

\\[ \\mathbf{x}_c = R(\\mathbf{x}_w - \\mathbf{c}_w) = R \\mathbf{x}_w - R \\mathbf{c}_w = R \\mathbf{x}_w + \\mathbf{t},\\ \\ \\text{ where } \\mathbf{t} = -R \\mathbf{c}_w \\\\ \\text{i.e.} \\;\\; \\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\]

\u5f53\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u7edf\u4e00\uff1a

\\[ \\mathbf{\\tilde x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\underbrace{\\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix}}_{\\text{Extrinsic Matrix}} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

\u5916\u53c2\u77e9\u9635

\u5176\u4e2d\uff0c\u65b0\u5f97\u5230\u7684\u8fd9\u4e2a 44 \u7684\u77e9\u9635\u5c31\u88ab\u79f0\u4e3a\u5916\u53c2\u77e9\u9635(Extrinsic Matrix)*\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

\\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u5750\u6807-to-\u6210\u50cf\u5e73\u9762","title":"\u76f8\u673a\u5750\u6807 to \u6210\u50cf\u5e73\u9762","text":"

\u5b9e\u9645\u4e0a\u8fd9\u4e00\u6b65\u5c31\u662f\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4ecb\u7ecd\u8fc7\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5728\u4e0a\u4e00\u6b65\u5df2\u7ecf\u505a\u597d\u4e86\u9f50\u6b21\u5750\u6807\u7684\u94fa\u57ab\uff0c\u6240\u4ee5\u8fd9\u4e00\u6b65\u683c\u5916\u7b80\u5355\u3002

\\[ \\begin{bmatrix} \\mathbf{x}_{i_{1 \\times 2}} \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

\u6ce8\u610f

\u8fd9\u91cc 3*4 \u7684\u77e9\u9635\u8fd8\u4e0d\u662f\u5185\u53c2\u77e9\u9635\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u5e73\u9762-to-\u4f20\u611f\u5668\u5e73\u9762","title":"\u6210\u50cf\u5e73\u9762 to \u4f20\u611f\u5668\u5e73\u9762","text":"

\u4e4b\u524d\u8bf4\u8fc7\uff0c\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u548c\u4f20\u611f\u5668\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u6700\u5927\u7684\u4e0d\u540c\u5c31\u662f\u8ba1\u91cf\u5355\u4f4d\u4e0d\u540c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u957f\u5ea6\u4fe1\u606f\u8f6c\u5316\u4e3a\u50cf\u7d20\u4fe1\u606f\uff1b\u6b64\u5916\uff0c\u4e2d\u5fc3\u5750\u6807\u4e5f\u9700\u8981\u53d8\u6362\u3002

\u5047\u8bbe \\(m_x\\) \u548c \\(m_y\\) \u5206\u522b\u662f\u5355\u4f4d\u957f\u5ea6\u4e0a\u7684\u50cf\u7d20\u5bc6\u5ea6\uff08\u4ee5 px/mm \u4e3a\u4f8b\uff09\uff0c\\((c_x,c_y)\\) \u5206\u522b\u662f\u5728\u6210\u50cf\u5e73\u9762\u4e0b\u4f20\u611f\u5668\u5e73\u9762\u7684\u4e2d\u5fc3\u5750\u6807\uff0c\u5219\uff1a

\\[ \\left\\{ \\begin{aligned} u &= m_x \\cdot x_i + c_x\\\\ v &= m_y \\cdot y_i + c_y \\end{aligned} \\right. \\]

\u5e26\u5165\u4e0a\u4e00\u8282\u7684\u7ed3\u679c\uff0c\u5f97\u5230\uff08\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u201c\u9f50\u6b21\u5750\u6807\u201d\u662f\u4e0a\u4e00\u8282\u5e26\u6765\u7684\uff0c\u8fd9\u4e00\u8282\u7684\u8ba1\u7b97\u5e76\u4e0d\u9700\u8981\u9f50\u6b21\u5750\u6807\uff09\uff1a

\\[ \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = ... \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{{\\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix}}}_{\\text{Intrinsic Matrix}} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

\u5185\u53c2\u77e9\u9635

\u8fd9\u91cc\u5f97\u5230\u7684\uff0c\u5305\u542b \\(f\\) \u548c \\(m\\) \u7684\u77e9\u9635\u624d\u662f\u5185\u53c2\u77e9\u9635(Intrinsic Matrix)\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

\\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635\u3001\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","text":"

\u7b80\u5355\u603b\u7ed3\u4e0a\u9762\u51e0\u4e2a\u6b65\u9aa4\u4e0e\u5185\u53c2\u5916\u53c2\u77e9\u9635\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u4e0b\u9762\u8fd9\u5f20\u6d41\u7a0b\u56fe\uff1a

graph LR\n    subgraph EM[\"Using Extrinsic Matrix\"]\n        A[\"Coordinate Transformation\"]\n    end\n    subgraph IM[\"Using Intrinsic Matrix\"]\n        B[\"Perspective Projection\"]\n        C[\"Image Plane to Image Sensor Mapping\"]\n    end\n    A ---> B\n    B ---> C
"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635","text":"

\u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5185\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

\\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]

\u5176\u4e2d\u4e3b\u8981\u6709 4 \u4e2a\u81ea\u7531\u5ea6\uff1a\\(m_x f\\)\u3001\\(m_y f\\)\u3001\\(c_x\\)\u3001\\(c_y\\)\u3002

\u7136\u800c\u5b9e\u9645\u4e0a\u672a\u5fc5\u5982\u6b64\uff0c\u7531\u4e8e\u7578\u53d8\u7b49\u53ef\u80fd\u5b58\u5728\u7684\u539f\u56e0\uff0c\u5b9e\u9645\u7684\u5185\u53c2\u77e9\u9635\uff0c\u6216\u8005\u662f\u6c42\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\u5e76\u4e0d\u4e00\u5b9a\u5f62\u5982\u6b64\uff0c\u6211\u4eec\u5728\u540e\u9762\u4f1a\u63d0\u5230\uff0c\u7531\u4e8e\u67d0\u4e9b\u6027\u8d28\u5206\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\uff0c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u53f3\u4e0a\u4e09\u89d2\u9635\uff0c\u5373\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u7684\u5143\u7d20\u672a\u5fc5\u4e3a\u96f6\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5916\u53c2\u77e9\u9635","title":"\u5916\u53c2\u77e9\u9635","text":"

\u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5916\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

\\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]

\u5176\u4e2d\u4e3b\u8981\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5305\u542b\u4e86\u65cb\u8f6c\u77e9\u9635 \\(R\\) \u548c\u65cb\u8f6c\u540e\u7684\u4f4d\u79fb\u5411\u91cf \\(\\mathbf{t}\\)\u3002

\u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u65cb\u8f6c\u77e9\u9635\uff0c\u8fd9\u91cc\u7684\u65cb\u8f6c\u77e9\u9635\u540c\u6837\u62e5\u6709 \u6b63\u4ea4 \u548c \\(||R||_2^2 = 1\\) \u7684\u6027\u8d28\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6295\u5f71\u77e9\u9635","title":"\u6295\u5f71\u77e9\u9635","text":"

\u603b\u7ed3\u5e94\u7528\u4e24\u4e2a\u77e9\u9635\u7684\u4e24\u4e2a\u9636\u6bb5\uff1a

Camera to Pixel: Intrinsic Matrix

\\[ \\mathbf{\\tilde{u}} = M_{int} \\mathbf{\\tilde{x}}_c \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x & 0 \\\\ 0 & f_y & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

World to Camera: Extrinsic Matrix

\\[ \\mathbf{\\tilde{x}}_c = M_{ext} \\mathbf{\\tilde{x}}_w \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

\u800c\u5c06\u5b83\u4eec\u7ed3\u5408\uff0c\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u5b8c\u6574\u7684\u6295\u5f71\u77e9\u9635(Projection Matrix)\\(P\\)\uff1a

\\[ \\mathbf{\\tilde u} = M_{int}M_{ext} \\mathbf{\\tilde x}_w = P \\mathbf{\\tilde x} \\;\\;\\;\\; i.e. \\;\\;\\;\\; \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{\\text{Projection Matrix } P} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1_1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

\u6839\u636e\u6295\u5f71\u77e9\u9635\u6211\u4eec\u5f97\u5230\u4e86\u50cf\u7d20\u70b9\u4e0e 3D \u666f\u7269\u4e16\u754c\u5750\u6807\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u800c\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u5c31\u662f\u5229\u7528\u8fd9\u4e2a\u5173\u7cfb\u5f0f\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002\u6240\u4ee5\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u540c\u65f6\u77e5\u9053\u82e5\u5e72\u70b9\u7684\u50cf\u7d20\u70b9\u4f4d\u7f6e\u548c 3D \u666f\u7269\u4e16\u754c\u5750\u6807\uff0c\u4e00\u822c\u6765\u8bf4\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u662f\u8fd9\u4e48\u5b9e\u73b0\u7684\uff1a

\u6b65\u9aa4\u4e00

\u7ed9\u5b9a\u4e00\u4e2a\u51e0\u4f55\u7279\u6027\u5df2\u77e5\u7684\u6807\u5b9a\u677f\uff0c\u4eba\u4e3a\u5b9a\u4e49\u5176\u4e16\u754c\u5750\u6807\u7cfb\u3002

\u7531\u4e8e\u5750\u6807\u90fd\u662f\u7531\u6211\u4eec\u4eba\u4e3a\u7ed9\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u6309\u7167\u5c3d\u53ef\u80fd\u65b9\u4fbf\u7684\u539f\u5219\u8fdb\u884c\u89c4\u5212\u3002\u6b64\u5916\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\uff0c\u6807\u5b9a\u677f\u7684\u5185\u5bb9\u4e00\u822c\u662f\u7b80\u5355\u660e\u4e86\u7684\u3002

\u4f8b\u5982\u56fe\u4e2d\uff0c\u5b9a\u4e49\u4e16\u754c\u5750\u6807\u7cfb\u540e\uff0c\u6bcf\u4e00\u683c\u7684\u8fb9\u957f\u4e3a 5cm\uff0c\u6240\u4ee5\u7d2b\u8272\u70b9\u7684\u5750\u6807\u4e3a \\((0, 15, 20) cm\\)\u3002

\u6b65\u9aa4\u4e8c

\u5bfb\u627e\u7279\u5b9a\u5173\u952e\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u505a\u7279\u5f81\u5339\u914d\uff0c\u5373\u82e5\u5e72\u70b9\u5bf9\uff0c\u6bcf\u4e00\u4e2a\u70b9\u5bf9\u90fd\u662f\u4e00\u4e2a 3D \u70b9\u548c\u4e00\u4e2a 2D \u70b9\u7684\u5bf9\u5e94\u3002

\u9700\u8981\u8bf4\u660e\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5df2\u77e5\u7684\u7279\u5f81\u5339\u914d\u662f\u5efa\u7acb\u5728\u4e24\u5f20\u4e8c\u7ef4\u56fe\u7247\u4e0a\u7684\uff0c\u800c\u73b0\u5728\u8981\u505a\u7684\u662f 3D \u5230 2D \u7684\u5339\u914d\u3002\u4e00\u79cd\u60f3\u6cd5\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 3D \u666f\u8c61\u6309\u7167\u6211\u4eec\u5e0c\u671b\u7684\u65b9\u6cd5\u6620\u5c04\u4e3a 2D \u666f\u8c61\uff0c\u4f8b\u5982\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u62ff\u8fd9\u4e2a\u6807\u5b9a\u677f\u7684 zy \u5e73\u9762\u6765\u8fdb\u884c\u7279\u5f81\u5339\u914d\u3002

\u6b65\u9aa4\u4e09

\u6839\u636e\u521a\u521a\u5f97\u5230\u7684\u82e5\u5e72\u5bf9\u5174\u8da3\u70b9\uff0c\u5efa\u7acb\u65b9\u7a0b\uff0c\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002

\u6bcf\u4e00\u5bf9\u5173\u952e\u70b9\u53ef\u4ee5\u5206\u522b\u6839\u636e \\(u\\) \u548c \\(v\\) \u5efa\u7acb\u4e24\u4e2a\u7b49\u5f0f\uff1a

\\[ \\underbrace{\\begin{bmatrix} u^{(i)} \\\\ v^{(i)} \\\\ 1 \\end{bmatrix}}_{known} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{unknown} \\underbrace{\\begin{bmatrix} x_w^{(i)} \\\\ y_w^{(i)} \\\\ z_w^{(i)} \\\\ 1 \\end{bmatrix}}_{known} \\\\ i.e. \\;\\;\\;\\; \\left\\{ \\begin{aligned} u^{(i)} &= \\frac{p_{11}x_w^{(i)} + p_{12}y_w^{(i)} + p_{13}z_w^{(i)} + p_{14}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\\\ v^{(i)} &= \\frac{p_{21}x_w^{(i)} + p_{22}y_w^{(i)} + p_{23}z_w^{(i)} + p_{24}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\end{aligned} \\right. \\]

\u7531\u4e8e\u6295\u5f71\u77e9\u9635\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 6 \u5bf9\u5173\u952e\u70b9 12 \u4e2a\u7b49\u5f0f\u3002

\u6b65\u9aa4\u56db

\u5c06\u82e5\u5e72\u65b9\u7a0b\u91cd\u65b0\u6392\u5217\u4e3a\u77e9\u9635\u5f62\u5f0f\uff0c\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\u3002

\u5c06\u6b65\u9aa4\u4e09\u5f97\u5230\u7684\u5f0f\u5b50\u540c\u5206\u79fb\u9879\uff0c\u5f62\u6210 \\(f(...) = 0\\) \u7684\u5f62\u5f0f\uff0c\u518d\u5c06 12 \u4e2a\u5f0f\u5b50\u7ed3\u5408\u5728\u4e00\u8d77\u5c31\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e2a\u5e9e\u5927\u7684\u77e9\u9635\u65b9\u7a0b\uff1a

\\[ \\begin{bmatrix} x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & 0 & 0 & 0 & 0 & -u_1x_w^{(1)} & -u_1y_w^{(1)} & -u_1z_w^{(1)} & -u_1 \\\\ 0 & 0 & 0 & 0 & x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & -v_1x_w^{(1)} & -v_1y_w^{(1)} & -v_1z_w^{(1)} & -v_1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & 0 & 0 & 0 & 0 & -u_ix_w^{(i)} & -u_iy_w^{(i)} & -u_iz_w^{(i)} & -u_i \\\\ 0 & 0 & 0 & 0 & x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & -v_ix_w^{(i)} & -v_iy_w^{(i)} & -v_iz_w^{(i)} & -v_i \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & 0 & 0 & 0 & 0 & -u_nx_w^{(n)} & -u_ny_w^{(n)} & -u_nz_w^{(n)} & -u_n \\\\ 0 & 0 & 0 & 0 & x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & -v_nx_w^{(n)} & -v_ny_w^{(n)} & -v_nz_w^{(n)} & -v_n \\\\ \\end{bmatrix} \\begin{bmatrix} p_{11} \\\\ p_{12} \\\\ p_{13} \\\\ p_{14} \\\\ p_{21} \\\\ p_{22} \\\\ p_{23} \\\\ p_{24} \\\\ p_{31} \\\\ p_{32} \\\\ p_{33} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\]

\u6211\u4eec\u5c06\u5176\u7b80\u5199\uff0c\u4e5f\u5c31\u662f \\(A\\mathbf{p} = 0\\)\u3002

\u6b65\u9aa4\u4e94

\u6c42\u89e3 \\(A\\mathbf{p} = 0\\) \u5f97\u5230 \\(\\mathbf{p}\\)\u3002

\u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u7684\u64cd\u4f5c\uff0c\u8fd9\u91cc\u5f97\u5230\u7684 \\(mathbf{p}\\) \u4e5f\u6709\u591a\u79cd\u53ef\u80fd\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5bf9\u5b83\u8fdb\u884c\u7ea6\u675f\uff0c\u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

\u4e00\u822c\u6211\u4eec\u9009\u62e9\u540e\u8005\uff0c\u4e5f\u5c31\u662f\u8ba9 \\(mathbf{p}\\) \u7684\u957f\u5ea6\u4e3a 1\uff0c\u6b64\u65f6\u81ea\u7531\u5ea6\u524a\u51cf\u4e3a 11\uff0c\u4ecd\u7136\u9700\u8981\u516d\u5bf9\u5173\u952e\u70b9\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u65b9\u7a0b \\(A\\mathbf{p} = 0\\) \u8f6c\u5316\u4e3a \\(\\mathop{minimize} \\limits_\\mathbf{p} ||A\\mathbf{p}||^2 \\;\\; \\text{ such that } ||\\mathbf{p}||^2 = 1\\) \u7684\u4f18\u5316\u95ee\u9898\uff0c\u7531\u4e8e\u548c\u4e4b\u524d\u7684\u4e00\u6837\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

\u5206\u89e3\u6295\u5f71\u77e9\u9635

\u6839\u636e\u6295\u5f71\u77e9\u9635\u7684\u76f8\u5173\u5185\u5bb9\u6211\u4eec\u77e5\u9053\uff1a

\u901a\u5e38\u6765\u8bf4\uff0c\u5c06\u4e00\u4e2a\u77e9\u9635\u5206\u89e3\u4e3a\u4e24\u4e2a\u7279\u5b9a\u77e9\u9635\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u4f46\u662f\u6b64\u5904\u7684\u5185\u53c2\u77e9\u9635\u7684\u5b50\u5f0f\u5177\u6709\u201c\u4e0a\u4e09\u89d2\u9635\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u5916\u53c2\u77e9\u9635\u4e2d\u65cb\u8f6c\u77e9\u9635\u5b50\u5f0f\u5177\u6709\u201c\u6b63\u4ea4\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u800c\u4e14\u89c2\u5bdf 0 \u7684\u5206\u5e03\uff0c\u6211\u4eec\u53d1\u73b0 \\([p_{11} \\sim p_{33}]\\) \u7531 \\(KR\\) \u5f97\u5230\u3002\u6240\u4ee5\u6211\u4eec\u6070\u597d\u53ef\u4ee5\u4f7f\u7528QR \u5206\u89e3\u6765\u5b9e\u73b0\uff1a

\\[ \\begin{bmatrix} p_{11} & p_{12} & p_{13} \\\\ p_{21} & p_{22} & p_{23} \\\\ p_{31} & p_{32} & p_{33} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} = KR \\]

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4f7f\u7528 QR \u5206\u89e3\u5f97\u5230\u7684\u4e09\u89d2\u9635\u5e76\u4e0d\u4e00\u5b9a\u5177\u6709\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u5143\u7d20\u4e3a 0 \u7684\u6027\u8d28\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u5df2\u7ecf\u77e5\u9053\u4e86\u9664\u4e86 \\(t_x,t_y,t_z\\) \u4ee5\u5916\u7684\u6240\u6709\u672a\u77e5\u5143\u4e86\uff0c\u6240\u4ee5\u5f53\u7136\u53ef\u4ee5\u56de\u8fc7\u6765\u7ee7\u7eed\u6c42\u5b83\u4eec\u3002

\\[ \\because \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} = K \\mathbf{t} \\\\ \\therefore \\mathbf{t} = K^{-1} \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} \\]

\u6ce8\u610f

\u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u5728\u6211\u4eec\u4e0a\u9762\u6d89\u53ca\u7684\u8ba8\u8bba\u4e2d\uff0c\u6211\u4eec\u90fd\u6ca1\u6709\u8003\u8651\u7578\u53d8\u5e26\u6765\u7684\u5f71\u54cd\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","title":"\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","text":"

\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898(Perspective-n-Point Problem)\uff0c\u5373 PnP \u95ee\u9898\uff0c\u6307\u7684\u662f\u5df2\u77e5\u5185\u53c2\u6c42\u5916\u53c2\u7684\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u3002

\u5e38\u89c1\u7684\u89e3\u51b3\u65b9\u6848\u6709\u5982\u4e0b\u51e0\u79cd\u3002

DLT Direct Linear Transform

\u4e5f\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u505a\u6cd5\u3002

P3P

\u81f3\u5c11\u9700\u8981 3 \u7ec4\u5bf9\u5e94\u5173\u7cfb\u624d\u80fd\u6c42\u89e3\u76f8\u673a\u4f4d\u7f6e\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a\u989d\u5916\u7684\u70b9\u6765\u4fdd\u8bc1\u7b54\u6848\u7684\u552f\u4e00\u6027\uff08\u5426\u5219\u4e00\u822c\u6765\u8bf4\u4f1a\u6709\u56db\u4e2a\u89e3\uff09

\u5176\u4e3b\u8981\u601d\u8def\u662f\u6839\u636e\u56fe\u50cf\uff0c\u4f7f\u7528\u4f59\u5f26\u5b9a\u5f8b\u8fdb\u884c\u6c42\u89e3\u3002

\u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

PnP

n > 3 \u7684\u60c5\u51b5\u7684\u505a\u6cd5\u3002

\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u7406\u8bba\u548c\u5b9e\u9645\u7684\u70b9\u8bef\u5dee\u2014\u2014\u91cd\u6295\u5f71\u8bef\u5dee(reprojection error)\u6700\u5c0f\u65f6\u7684\u5916\u53c2\uff0c\u6ce8\u610f\u5c06\u9f50\u6b21\u5750\u6807\u8f6c\u5316\u4e3a\u4e8c\u7ef4\u5750\u6807\u3002

Initialized by P3P, optimized by Gauss-Newton\u3002

\u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

EPnP

\u76ee\u524d\u6700\u53d7\u6b22\u8fce\u7684\u505a\u6cd5\uff0cO(N) \u5341\u5206\u9ad8\u6548\u4e5f\u5341\u5206\u51c6\u786e\uff0c\u5927\u6982\u662f\u7528\u56db\u4e2a\u63a7\u5236\u70b9\u8868\u793a\u5176\u4ed6\u70b9\u3002

\u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

\u8bf4\u660e

\u672c\u8282\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\uff0c\u8bb2\u7684\u662f\u5982\u4f55\u4e09\u7ef4\u91cd\u5efa\u5f97\u5230\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u5982\u4f55\u5f97\u5230\u7a20\u5bc6\u7684\u4e09\u7ef4\u91cd\u5efa\uff0c\u5c06\u6210\u4e3a\u4e0b\u4e00\u8282\u7684\u91cd\u70b9\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

\u53cc\u76ee\u89c6\u89c9(Stereo Vision)\uff1a\u5df2\u77e5\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\uff0c\u6839\u636e\u4e24\u5f20\u56fe\u50cf\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u7684\u5916\u53c2\u548c\u76ee\u6807\u7684 3D \u7ed3\u6784\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5bf9\u6781\u51e0\u4f55","title":"\u5bf9\u6781\u51e0\u4f55","text":"

\u5728\u524d\u4e00\u8282\u6211\u4eec\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728\u300c3D \u666f\u8c61\u6a21\u578b\u5df2\u77e5\u300d\u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\u6216\u8fdb\u884c\u672a\u77e5\u4f30\u8ba1\uff0c\u4f46\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u5982\u4f55\u4ece 2D \u56fe\u7247\u4e2d\u91cd\u5efa\u51fa 3D \u6a21\u578b\u3002

\u8ba9\u6211\u4eec\u8003\u8651\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa\u4e2d\u7684\u60c5\u5f62\u2014\u2014\u4e24\u4e2a\u76f8\u673a\u4e0b\u4e0d\u540c\u666f\u8c61\u4e4b\u95f4\u663e\u7136\u662f\u5b58\u5728\u4e00\u5b9a\u7684\u51e0\u4f55\u5173\u7cfb\u7684\uff0c\u800c\u5bf9\u6781\u51e0\u4f55(Epipolar Geometry)\u7740\u773c\u4e8e\u4e0b\u9762\u8fd9\u4e09\u4e2a\u76ee\u6807\u4e4b\u95f4\u7684\u51e0\u4f55\u5173\u7cfb\uff1a\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\)\uff08\u6216\u8005 \\(P\\)\uff09\u3002

WIKI page

https://en.wikipedia.org/wiki/Epipolar_geometry

Epipolar geometry is the geometry of stereo vision. When two cameras view a 3D scene from two distinct positions, there are a number of geometric relations between the 3D points and their projections onto the 2D images that lead to constraints between the image points. These relations are derived based on the assumption that the cameras can be approximated by the pinhole camera model.

\u5bf9\u6781\u51e0\u4f55\u662f\u7acb\u4f53\u89c6\u89c9\u7684\u51e0\u4f55\u5b66\u3002\u5f53\u4e24\u4e2a\u6444\u50cf\u673a\u4ece\u4e24\u4e2a\u4e0d\u540c\u7684\u4f4d\u7f6e\u67e5\u770b 3D \u573a\u666f\u65f6\uff0c3D \u70b9\u4e0e\u5b83\u4eec\u5728 2D \u56fe\u50cf\u4e0a\u7684\u6295\u5f71\u4e4b\u95f4\u5b58\u5728\u8bb8\u591a\u51e0\u4f55\u5173\u7cfb\uff0c\u5bfc\u81f4\u56fe\u50cf\u70b9\u4e4b\u95f4\u5b58\u5728\u7ea6\u675f\u3002\u8fd9\u4e9b\u5173\u7cfb\u662f\u57fa\u4e8e\u76f8\u673a\u53ef\u4ee5\u7528\u9488\u5b54\u76f8\u673a\u6a21\u578b\u8fd1\u4f3c\u7684\u5047\u8bbe\u5bfc\u51fa\u7684\u3002

\u2014\u2014Wiki

\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u5bf9\u6781\u51e0\u4f55\u4e2d\u7684\u51e0\u4e2a\u6982\u5ff5\uff0c\u6211\u4eec\u5c06\u501f\u52a9\u4e0a\u56fe\u8fdb\u884c\u8bf4\u660e\u3002

\u57fa\u7ebf

\u57fa\u7ebf(Baseline)\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\uff0c\u5373 \\(OO'\\)\u3002

\u5bf9\u6781\u70b9

\u5bf9\u6781\u70b9(Epipole)\u6307\u7684\u662f\uff1a\u5176\u4e2d\u4e00\u4e2a\u76f8\u673a\u7684\u76f8\u673a\u4e2d\u5fc3\u5728 \u53e6\u5916\u4e00\u4e2a\u76f8\u673a\u7684\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u70b9\uff0c\u5373 \\(e_l\\) \u548c \\(e_r\\)\uff0c\u4e14\u4ed6\u4eec\u5728\u65e2\u5b9a\u7684\u5177\u4f53\u53cc\u76ee\u6a21\u578b\u4e0b\u662f\u552f\u4e00\u7684\u3002

\u5bf9\u6781\u9762

\u5bf9\u6781\u9762(Epipolar Plane)\u6307\u7684\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u8fd9\u4e09\u4e2a\u70b9\u6240\u786e\u5b9a\u7684\u7a7a\u95f4\u5e73\u9762\u3002

\u5176\u4e2d\u6709\u4e00\u4e2a\u6027\u8d28\uff0c\u5bf9\u6781\u9762\u603b\u662f\u7ecf\u8fc7\u76f8\u673a\u4e2d\u5fc3\u8fde\u7ebf \\(O_L O_R\\)\uff0c\u6240\u4ee5\u5bf9\u4e8e\u67d0\u4e2a\u666f\u7269\u4e2d\u7684\u70b9 \\(X_i\\)\uff0c\u5176\u5bf9\u6781\u9762\u90fd\u662f\u552f\u4e00\u7684\u3002\uff08\u663e\u7136\uff0c\u53cd\u8fc7\u6765\u4e0d\u6210\u7acb\u3002\uff09

\u5bf9\u6781\u7ebf

\u5bf9\u6781\u7ebf(Epipolar Line)\u662f\u5173\u4e8e\u52a8\u70b9 \\(X\\) \u6765\u8bf4\u7684\uff0c\u4f53\u73b0\u4e3a\u5bf9\u6781\u9762\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u7ebf\u3002

\u5047\u8bbe\u6211\u4eec\u53ea\u77e5\u9053 \\(X_L\\) \u800c\u4e0d\u77e5\u9053 \\(X_R\\)\uff0c\u90a3\u4e48 \\(X\\) \u53ef\u80fd\u5728 \\(O_L X_L\\) \u8fd9\u6761\u7ebf\u4e0a\u7684\u4efb\u4e00\u70b9\uff1b\u800c\u8fd9\u6761\u7ebf\u5728 \\(R\\) \u5e73\u9762\u4e0a\u7684\u6295\u5f71\u5c31\u662f\u4e00\u6761\u5bf9\u6781\u7ebf\uff0c\u5b83\u7684\u542b\u4e49\u662f\u53ef\u80fd\u7684 \\(X_R\\) \u7684\u8f68\u8ff9\u3002

\u6b64\u5916\uff0c\u5bf9\u6781\u7ebf\u6709\u4e00\u4e2a\u6027\u8d28\uff1a\u5bf9\u6781\u7ebf\u5fc5\u5b9a\u7ecf\u8fc7\u5bf9\u6781\u70b9\uff0c\u800c\u7ecf\u8fc7\u5bf9\u6781\u70b9\u7684\u4efb\u610f\u4e00\u6761\u76f4\u7ebf\uff08\u5f53\u7136\u5f97\u5728\u6210\u50cf\u5e73\u9762\u4e0a\uff09\u90fd\u53ef\u4ee5\u662f\u5bf9\u6781\u7ebf\u3002

\ud83d\udc49 WIKI\u3002

\u5176\u4ed6\u8bf4\u660e

\u56fe\u4e2d\u8fd8\u9700\u8981\u989d\u5916\u89e3\u91ca\u7684\u5c31\u662f \\(X_L\\) \u548c \\(X_R\\)\uff0c\u5b83\u4eec\u5206\u522b\u662f\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u50cf\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6781\u7ebf\u7ea6\u675f","title":"\u6781\u7ebf\u7ea6\u675f","text":"

\u73b0\u5728\u6211\u4eec\u5173\u6ce8\u5bf9\u6781\u9762\uff0c\u7740\u773c\u4e8e\u89e3\u51b3\u4e0b\u9762\u8fd9\u6837\u4e00\u4e2a\u95ee\u9898\u3002

\u5176\u4e2d\u4e24\u4fa7\u7684\u76f8\u673a\u7406\u6240\u5f53\u7136\u7684\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5750\u6807\u7cfb\uff0c\u73b0\u5728\u6211\u4eec\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff08\u56fe\u4e2d\u8c8c\u4f3c\u6807\u9519\u4e86\u65b9\u5411\uff09\uff0c\\(\\mathbf{x}_l = \\overrightarrow{O_l P}\\) \u800c \\(\\mathbf{x}_r = \\overrightarrow{O_r P}\\) \u3002

\u4e0b\u9762\u5f00\u59cb \u53d8\u9b54\u6cd5 \u8fdb\u884c\u4e00\u4e9b\u53d8\u5316\uff1a

\u5f62\u5f0f \u2461 \u63a8\u7406\u8fc7\u7a0b

\u9996\u5148\uff0c\u5728\u540c\u4e00\u4e2a\uff08\u4efb\u4f55\u4e00\u4e2a\uff09\u7b1b\u5361\u5c14\u5750\u6807\u7cfb\u4e2d\uff0c\u90fd\u6709 \\(\\mathbf{x}_l \\cdot (\\mathbf{t} \\times \\mathbf{x}_l) = 0\\)\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\\(\\mathbf{t}\\) \u548c \\(\\mathbf{x}_l\\) \u90fd\u662f\u5bf9\u6781\u9762\u5185\u7684\u4e24\u4e2a\u4e0d\u5e73\u884c\uff08\u6211\u4eec\u5047\u5b9a\u8fd9\u4e00\u70b9\u6052\u6210\u7acb\uff09\u7684\u5411\u91cf\uff0c\u90a3\u4e48 \\(\\mathbf{t} \\times \\mathbf{x}_l\\) \u7684\u7ed3\u679c\u5fc5\u7136\u662f\u4e00\u4e2a\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u7684\u5411\u91cf\u3002\u800c\u8fd9\u4e2a\u5411\u91cf\u5fc5\u7136\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u4e0a\u4efb\u610f\u4e00\u4e2a\u5411\u91cf\uff0c\u6240\u4ee5\u4e0a\u5f0f\u7ed3\u679c\u4e3a \\(0\\)\u3002\u800c\u5c06\u8fd9\u4e2a\u5f0f\u5b50\u5199\u6210\u77e9\u9635\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff0c\u5c31\u662f\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} \\right) = 0 \\;\\;\\;\\;\\;\\left( 1 \\right) \\]

\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u5c06 \\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\) \u4e5f\u5199\u6210\u77e9\u9635\u548c\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff1a

\\[ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\;\\;\\;\\;\\;\\left( 2 \\right) \\]

\u6211\u4eec\u5c06 \\((2)\\) \u5f0f\u5e26\u5165 \\((1)\\) \u5f0f\uff0c\u5f97\u5230\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\left( \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\right) = 0 \\]

\u7a0d\u4f5c\u53d8\u5316\uff08\u628a\u542b \\(t\\) \u7684\u65b9\u9635\u62ff\u5230\u62ec\u53f7\u91cc\u9762\uff09\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} }_{\\mathbf{t} \\times \\mathbf{t} = 0} \\right) = 0 \\]

\u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u91cc\u9762\u51fa\u6765\u4e86\u4e00\u4e2a \\(0\\)\uff0c\u628a\u5b83\u6458\u6389\u4ee5\u540e\u5c31\u53d8\u6210\u4e86\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} }_{\\text{Essential Matrix E}} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u8fd9\u4e2a\u95ee\u9898\uff1a

\u5f62\u5f0f \u2460\uff1a\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff1b

\u5229\u7528\u5bf9\u6781\u51e0\u4f55\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u8f6c\u6362\u4e3a\u4e86\uff1a

\u5f62\u5f0f \u2461\uff1a\u6c42\u89e3 \\(E\\) \u4f7f\u5f97 \\(\\mathbf{x}_l^T E \\mathbf{x}_r = 0\\)\uff0c\u5176\u4e2d \\(E = T_{\\times}R\\)\uff0c\u5176\u4e2d \\(T\\) \u662f \\(\\mathbf{t}\\) \u7684\u77e9\u9635\u5f62\u5f0f\uff1b

\u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u8fdb\u4e00\u6b65\u53d8\u5316\u3002

\u5f62\u5f0f \u2462 \u63a8\u7406\u8fc7\u7a0b

\u6839\u636e\u900f\u89c6\u6295\u5f71\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

\\[ \\small \\begin{aligned} \\text{Left Camera} && \\text{Right Camera} \\\\ z_l \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} & = \\underbrace{ \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} \\\\ 0 & f_y^{(l)} & o_y^{(l)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_l} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} & z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\underbrace{ \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} \\\\ 0 & f_y^{(r)} & o_y^{(r)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_r} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} \\\\ \\mathbf{x}_l^T &= \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T & \\mathbf{x}_r &= K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} \\end{aligned} \\]

\u5c06\u4e0a\u5f0f\u5e26\u5165\u5230\u5f62\u5f0f \u2461 \u5f97\u5230\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

\u5c31\u53d8\u6210\u4e86\uff1a

\\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

\u8fd9\u65f6\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\\(\\mathbf{u}_l\\) \u548c \\(\\mathbf{u}_r\\) \u7ec8\u4e8e\u662f\u6211\u4eec\u5df2\u77e5\u7684\u4e1c\u897f\u4e86\uff0c\u8fd9\u4e0b\u6211\u4eec\u53ef\u4ee5\u6c42\u89e3\u57fa\u672c\u77e9\u9635 \\(F\\)\uff0c\u800c\u7531\u4e8e\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u53ef\u4ee5\u5012\u8fc7\u6765\u63a5\u7740\u5f97\u5230\u672c\u5f81\u77e9\u9635 \\(E\\)\uff0c\u6700\u540e\u901a\u8fc7 SV \u5206\u89e3\u5f97\u5230\u6211\u4eec\u60f3\u8981\u7684 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u6c42\u89e3\u57fa\u672c\u77e9\u9635\u3001\u672c\u5f81\u77e9\u9635\u3001\u5750\u6807\u53d8\u6362\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

\u6c42\u89e3\u6b65\u9aa4

\u5bf9\u4e8e\u5173\u952e\u70b9 \\(i\\)\uff0c\u6211\u4eec\u9700\u8981\u6c42\u89e3\uff1a

\\[ \\begin{bmatrix} u_l^{(i)} & v_l^{(i)} & 1 \\end{bmatrix} \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\begin{bmatrix} u_r^{(i)} \\\\ v_r^{(i)} \\\\ 1 \\end{bmatrix} = 0 \\]

\u5c06\u5176\u5c55\u5f00\uff1a

\\[ \\left( f_{11} u_r^{(i)} + f_{12} v_r^{(i)} + f_13 \\right) u_l^{(i)} + \\left( f_{21} u_r^{(i)} + f_{22} v_r^{(i)} + f_23 \\right) v_l^{(i)} + f_{31} u_r^{(i)} + f_{32} v_r^{(i)} + f_33 = 0. \\]

\u63a5\u4e0b\u6765\u5c06\u6240\u6709\u7684 \\(m\\) \u7ec4\u65b9\u7a0b\u5408\u518d\u540c\u4e00\u4e2a\u77e9\u9635\u91cc\uff08\u6211\u4eec\u81f3\u5c11\u9700\u8981\u989d\u5916\u7684 8 \u4e2a\u65b9\u7a0b\uff0c\u4e4b\u540e\u4f1a\u8bf4\uff09\uff1a

\\[ \\underbrace{ \\begin{bmatrix} u_l^{(1)}u_r^{(1)} & u_l^{(1)}v_r^{(1)} & u_l^{(1)} & v_l^{(1)}u_r^{(1)} & v_l^{(1)}v_r^{(1)} & v_l^{(1)} & u_r^{(1)} & v_r^{(1)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(i)}u_r^{(i)} & u_l^{(i)}v_r^{(i)} & u_l^{(i)} & v_l^{(i)}u_r^{(i)} & v_l^{(i)}v_r^{(i)} & v_l^{(i)} & u_r^{(i)} & v_r^{(i)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(m)}u_r^{(m)} & u_l^{(m)}v_r^{(m)} & u_l^{(m)} & v_l^{(m)}u_r^{(m)} & v_l^{(m)}v_r^{(m)} & v_l^{(m)} & u_r^{(m)} & v_r^{(m)} & 1 \\\\ \\end{bmatrix} }_{A: \\text{ Known }} \\underbrace{ \\begin{bmatrix} f_{11} \\\\ f_{12} \\\\ f_{13} \\\\ f_{21} \\\\ f_{22} \\\\ f_{23} \\\\ f_{31} \\\\ f_{32} \\\\ f_{33} \\\\ \\end{bmatrix} }_{\\mathbf{f}: \\text{ Unknown }} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\\\ \\text{i.e.} \\;\\;\\;\\; A\\mathbf{f}=0 \\]

\u5f53\u7136\uff0c\u50cf\u4e4b\u524d\u4e00\u6837\uff0c\u7531\u4e8e\u8fd9\u4e2a\u65b9\u7a0b\u53ef\u4ee5\u89e3\u51fa \\(k\\mathbf{f}, \\forall k\\in \\text{Z}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ed9 \\(\\mathbf{f}\\) \u4e00\u4e2a\u7ea6\u675f\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u53d6 \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u4e8e\u662f\u95ee\u9898\u5c31\u53c8\u53d8\u6210\u4e86\uff1a

\\[ \\mathop{minimize} \\limits_{\\mathbf{f}} ||A\\mathbf{f}||^2 \\text{ such that } ||\\mathbf{f}||^2 = 1 \\]

\u4e3a\u4e86\u6c42\u89e3 \\(F\\) \u4e2d\u7684 9 \u4e2a\u672a\u77e5\u6570\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e00\u4e2a\u786e\u5b9a\u7684\u7ea6\u675f\u65b9\u7a0b\u662f \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u989d\u5916 8 \u4e2a\u65b9\u7a0b\u3002

\u6c42\u89e3\u5f97\u5230 \\(F\\) \u4ee5\u540e\uff0c\u6839\u636e \\(E = K_l^T F K_r\\) \u5f97\u5230 \\(E\\)\u3002

\u524d\u9762\u4e5f\u5df2\u7ecf\u8bf4\u8fc7\uff0c\u5bf9 \\(E\\) \u8fdb\u884c SV \u5206\u89e3\u5c31\u53ef\u4ee5\u5f97\u5230 \\(R\\) \u548c \\(T_{\\times}\\)\uff0c\u5bf9 \\(T_{\\times}\\) \u91cd\u6392\u5217\u5c31\u5f97\u5230\u4e86 \\(\\mathbf{t}\\)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u672c\u5f81\u77e9\u9635","title":"\u672c\u5f81\u77e9\u9635","text":"

\u66f4\u8fdb\u4e00\u6b65\u5316\u7b80\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e2d\u95f4\u4e24\u4e2a\u77e9\u9635\u5408\u8d77\u6765\uff0c\u5f97\u5230\u672c\u5f81\u77e9\u9635(Essential Matrix)\\(E\\)\uff1a

\\[ E=T_{\\times}R= \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\]

\u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\;\\;\\;\\text{i.e.} \\;\\;\\; \\mathbf{x}_l^T E \\mathbf{x}_r = 0 \\]

\u672c\u5f81\u77e9\u9635\u7684\u6027\u8d28

\u7531\u4e8e Essential Matrix \u7684\u5b9a\u4e49\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a

\\(T_{\\times}\\) \u53cd\u5bf9\u79f0(Skew-Symmetric)\uff0c\\(R\\) \u6b63\u4ea4(Orthonormal)\u3002

\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5947\u5f02\u503c\u5206\u89e3(Singular Value Decomposition)\u6216\u8005\u8bf4 SV \u5206\u89e3\u6765\u53bb\u8026\u5408\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u57fa\u672c\u77e9\u9635","title":"\u57fa\u672c\u77e9\u9635","text":"

\u6211\u4eec\u53ef\u4ee5\u5c06\u5e38\u6570 \\(z_l\\) \u548c \\(z_r\\) \u7ea6\u6389\uff0c\u5e76\u4e14\u5408\u5e76\u4e2d\u95f4\u7684\u4e09\u4e2a\u77e9\u9635\uff0c\u5f97\u5230\uff1a

\\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} \\underbrace{ (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} }_{\\text{Fundamental Matrix F}} \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

\u4e8e\u662f\u5f97\u5230\u4e86\u57fa\u672c\u77e9\u9635(Fundamental Matrix)\\(F\\)\uff1a

\\[ F = (K_l^{-1})^T E K_r^{-1} = (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} = \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\]

\u8fd9\u5c31\u662f\u6211\u4eec\u7684\u5f62\u5f0f \u2462\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e09\u89d2\u6d4b\u91cf","title":"\u4e09\u89d2\u6d4b\u91cf","text":"

\u6211\u4eec\u77e5\u9053\uff0c\u5982\u679c\u5047\u8bbe\u6570\u636e\u90fd\u662f\u51c6\u786e\u7684\uff0c\u90a3\u4e48 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u5e94\u5f53\u76f8\u4ea4\u4e8e\u7a7a\u95f4\u70b9 \\(X\\)\u3002\u800c\u4e09\u89d2\u6d4b\u91cf\u63cf\u8ff0\u7684\u5c31\u662f\u5982\u4f55\u901a\u8fc7\u8fd9\u6837\u4e00\u4e2a\u8fc7\u7a0b\u5f97\u5230\u7a7a\u95f4\u70b9 \\(X\\)\u3002

\u6211\u4eec\u5728 \u6781\u7ebf\u7ea6\u675f \u91cc\u5df2\u7ecf\u77e5\u9053\u4e86 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\) \u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u7684\u65b9\u7a0b\u4e86\u3002\u90a3\u4e48\u5e94\u5f53\u80fd\u591f\u89e3\u51fa\u8fd9\u4e2a \\(X\\)\uff0c\u4e0d\u8fc7\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u6709\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u53ea\u80fd\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u5f97\u5230\u8fd1\u4f3c\u89e3\u3002

\u5177\u4f53\u7684\u63a8\u7406\u6b65\u9aa4\u5982\u4e0b\uff1a

\u6c42\u89e3\u6b65\u9aa4

\u9996\u5148\u6211\u4eec\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u6539\u5199\u53d8\u6362\u65b9\u7a0b\uff0c\u5e76\u6700\u7ec8\u5199\u6210\u5173\u4e8e \\(\\mathbf{u}\\) \u7684\u5f62\u5f0f \\begin{aligned} \\text{Left Camera} \\\\ \\because \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} ,\\ \\ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\therefore \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_l &= P_l \\mathbf{\\tilde x}_r \\\\ \\text{Right Camera} \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} & 0 \\\\ 0 & f_y^{(r)} & o_y^{(r)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_r &= M_{int_r} \\mathbf{\\tilde x}_r \\end{aligned}

\u7a0d\u4f5c\u603b\u7ed3\uff0c\u5c31\u662f\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e24\u4e2a\u5173\u7cfb\uff1a

\\[ \\mathbf{\\tilde u}_l = P_l \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \\\\ m_{21} & m_{22} & m_{23} & m_{24} \\\\ m_{31} & m_{32} & m_{33} & m_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\\\ \\mathbf{\\tilde u}_l = M_{int_r} \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\]

\u6211\u4eec\u53d1\u73b0\uff0c\u9664\u4e86 \\(\\mathbf{x}_r\\) \u7684\u90e8\u5206\u90fd\u662f\u5df2\u77e5\u7684\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u53ef\u4ee5\u300c\u8054\u7acb\u300d\u8fd9\u4e24\u4e2a\u65b9\u7a0b\uff0c\u5c06\u4ed6\u4eec\u91cd\u6392\u5217\u4e3a\u5982\u4e0b\u5f62\u5f0f\uff1a

\\[ \\underbrace{ \\begin{bmatrix} u_r m_{31} - m_{11} & u_r m_{32} - m_{12} & u_r m_{33} - m_{13} \\\\ v_r m_{31} - m_{21} & v_r m_{32} - m_{22} & v_r m_{33} - m_{23} \\\\ u_l p_{31} - p_{11} & u_l p_{32} - p_{12} & u_l p_{33} - p_{13} \\\\ v_l p_{31} - p_{21} & v_l p_{32} - p_{22} & v_l p_{33} - p_{23} \\end{bmatrix} }_{A_{4\\times 3}} \\underbrace{ \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} }_{\\mathbf{x}_r} = \\underbrace{ \\begin{bmatrix} m_{14} - m_{34} \\\\ m_{24} - m_{34} \\\\ p_{14} - p_{34} \\\\ p_{24} - p_{34} \\end{bmatrix} }_{\\mathbf{b}} \\]

\u6211\u4eec\u5df2\u77e5 \\(A_{4 \\times 3}\\) \u548c \\(\\mathbf{b}\\)\uff0c\u9700\u8981\u6c42 \\(\\mathbf{x}_r\\)\u3002

\u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u63d0\u5230\uff0c\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u5b58\u5728\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u6ca1\u53d1\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u800c\u662f\u53ef\u4ee5\u4f7f\u7528\u6700\u5c0f\u4e8c\u4e58\u7684\u7ed3\u8bba\uff0c\u5f97\u5230\uff1a

\\[ \\mathbf{x}_r = (A^TA)^{-1}A^T\\mathbf{b} \\]

\u8fd8\u6709\u4e00\u79cd\u6539\u8fdb\uff0c\u5c31\u662f\u5c06\u5b83\u8f6c\u5316\u6210\u6700\u5c0f\u5316\u518d\u6295\u5f71\u8bef\u5dee(Reprojection Error)\u7684\u4f18\u5316\u95ee\u9898\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u6c42\u4e00\u4e2a \\(X\\) \u4f7f\u5f97\u5b83\u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u548c\u5b9e\u9645\u7684\u6295\u5f71\u4e4b\u95f4\u7684\u8bef\u5dee\u6700\u5c0f\u3002

\u5b9a\u4e49\u518d\u6295\u5f71\u8bef\u5dee\u4e3a\uff1a

\\[ cost(P) = dist(\\mathbf{u}_l, \\cap{\\mathbf{u}_l})^2 + dist(\\mathbf{u}_r, \\cap{\\mathbf{u}_r})^2 \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5177\u4f53\u6b65\u9aa4","title":"\u5177\u4f53\u6b65\u9aa4","text":"

\u524d\u63d0

\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\\(K\\) \u5df2\u77e5\u3002

\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u53c2\u6570\u5c06\u76f8\u673a\u6210\u50cf\u53ef\u89c6\u5316\uff0c\u5982\u4e0b\u56fe\u3002

\u5176\u4e2d\u4e0b\u6807\u4e3a \\(l\\) \u7684\u8868\u793a\u5de6\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\uff0c\u4e0b\u6807\u4e3a \\(r\\) \u7684\u8868\u793a\u53f3\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\u3002

\u6b65\u9aa4\u4e00

\u5bf9\u4e24\u5f20\u56fe\u7247\u8fdb\u884c \u5173\u952e\u70b9\u5339\u914d\uff0c\u627e\u5230\u81f3\u5c11 8 \u5bf9\u5339\u914d\u7279\u5f81\u3002

\u300c\u4e3a\u4ec0\u4e48\u9700\u8981 8 \u5bf9\u300d\u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u4e2d\u5df2\u7ecf\u8bf4\u660e\u3002

\u6b65\u9aa4\u4e8c

\u6309\u7167 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u63d0\u5230\u7684\u6b65\u9aa4\uff0c\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u5750\u6807\u7684\u53d8\u6362\u53c2\u6570 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

\u6b65\u9aa4\u4e09

\u63a5\u4e0b\u6765\u5bf9\u4e8e\u6bcf\u4e00\u5bf9\u5339\u914d\u7684\u5173\u952e\u70b9\uff0c\u6309\u7167 #\u4e09\u89d2\u6d4b\u91cf \u63d0\u5230\u7684\u65b9\u6cd5\uff0c\u6c42\u89e3\u7a7a\u95f4\u70b9 \\(X_i\\)\u3002

\u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u6240\u6709\u5339\u914d\u7684\u5173\u952e\u70b9\u8ba1\u7b97\u5f97\u5230\u7684\u7a7a\u95f4\u70b9\uff0c\u6700\u7ec8\u5f97\u5230\u4e00\u4efd\u7a00\u758f\u7684\u7a7a\u95f4\u70b9\u4e91\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

Sequential SfM\uff1a

  1. \u4ece\u5176\u4e2d\u4e24\u5f20\u5f00\u59cb\uff0c\u5bf9\u573a\u666f\u8fdb\u884c\u91cd\u5efa
  2. \u4e4b\u540e\u4e0d\u65ad\u62ff\u51fa\u65b0\u7684\u56fe\u50cf\uff0c\u6839\u636e\u5df2\u77e5\u8ba1\u7b97 camera pose\uff0c\u518d\u8fdb\u4e00\u6b65\u4f18\u5316\u4e4b\u524d\u91cd\u5efa\u51fa\u6765\u7684 3D \u70b9\uff0c\u4ee5\u53ca\u589e\u52a0\u4e00\u4e9b\u65b0\u7684\u70b9
  3. \u4f7f\u7528\u96c6\u675f\u4f18\u5316\u8fdb\u4e00\u6b65\u4f18\u5316\u548c\u8c03\u6574
"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u96c6\u675f\u4f18\u5316","title":"\u96c6\u675f\u4f18\u5316","text":"

\u96c6\u675f\u4f18\u5316(Bundle Adjustment)\u4e5f\u5c31\u662f\u5728\u591a\u76ee\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6240\u6709\u70b9\u7684 \u518d\u6295\u5f71\u8bef\u5dee \u4f18\u5316\u95ee\u9898\uff1a

\\[ \\mathop{minimize} \\limits_\\mathbf{P} E(P_{proj}, \\mathbf{P}) = \\sum^m_{i=1}\\sum^n_{j=1} dist(u_j^{(i)}, P_{proj}^{(i)}\\mathbf{P}_j)^2 \\]

\u5176\u6c42\u89e3\u53ef\u4ee5\u4f7f\u7528 LM algorithm\u3002

A modern SfM system: COLMAP

COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections.

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/","title":"Lecture 8 | Depth Estimation & 3D Reconstruction","text":"

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

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

\u5f15\u5165

\u5728 \u4e0a\u4e00\u7ae0 \u4e2d\uff0c\u6211\u4eec\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5982\u4f55\u91cd\u5efa\u5f97\u5230\u5173\u952e\u70b9\u7684\u70b9\u4e91\uff0c\u4f46\u662f\u6b64\u65f6\u6211\u4eec\u5f97\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u672c\u7ae0\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\u5982\u4f55\u201c\u7a20\u5bc6\u201d\u5730\u8fdb\u884c\u91cd\u5efa\u3002

\u800c\u5728\u7a20\u5bc6\u91cd\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4e0d\u80fd\u5355\u5355\u7740\u773c\u4e8e\u5173\u952e\u70b9\uff0c\u800c\u662f\u8981\u5e7f\u6cdb\u5730\u9762\u5411\u56fe\u50cf\u4e2d\u7684\u6240\u6709\u50cf\u7d20\uff0c\u800c\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4e2a\u6280\u672f\u5c31\u662f\u6df1\u5ea6\u4f30\u8ba1(Depth Estimation)\u3002

\u300c\u6df1\u5ea6\u300d\u8fd9\u4e2a\u6982\u5ff5\u548c\u5b83\u7684\u5b57\u9762\u610f\u601d\u51e0\u4e4e\u4e00\u6837\uff0c\u800c\u5728\u300c\u6df1\u5ea6\u4f30\u8ba1\u300d\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u56fe\u50cf\uff0c\u6807\u8bb0\u6bcf\u4e00\u4e2a\u50cf\u7d20\u7684\u6df1\u5ea6\u3002\u800c\u5c06\u5176\u53ef\u89c6\u5316\uff0c\u5c31\u662f\u6df1\u5ea6\u56fe\u3002

\u53ea\u4e0d\u8fc7\u6709\u65f6\u5019\u6df1\u5ea6\u6307\u7684\u662f\u7a7a\u95f4\u70b9\u5230\u76f8\u673a\u4e2d\u95f4\u6216\u8005\u76f8\u673a\u5e73\u9762\u7684\u8ddd\u79bb\uff0c\u4e5f\u6709\u7684\u65f6\u5019\u6307\u7684\u662f\u67d0\u4e2a\u7a7a\u95f4\u5750\u6807\u8f74\u5411\u7684\u6df1\u5ea6\uff0c\u5177\u4f53\u5e94\u5f53\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u6765\u3002

\u6309\u7167\u6df1\u5ea6\u611f\u77e5\u7684\u624b\u6bb5\u5206\u7c7b\uff0c\u6709\u4e3b\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Active depth sensing)\u548c\u88ab\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Passive depth sensing)\u4e24\u79cd\uff0c\u5176\u4e2d\u6211\u4eec\u5c06\u8981\u5c55\u5f00\u7684\u89c6\u89c9\u65b9\u6cd5\u90fd\u662f\u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5\u3002

\u4e3b\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u975e\u89c6\u89c9\u65b9\u6cd5

\u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u89c6\u89c9\u65b9\u6cd5

\u903b\u8f91\u94fe\uff1a

(\u53cc\u76ee\u89c6\u89c9 -> \u6df1\u5ea6\u611f\u77e5) => ((\u53cc\u89c6\u89d2\u5339\u914d\u70b9 + \u89c6\u5dee -> \u6df1\u5ea6) + (\u5bf9\u6240\u6709\u50cf\u7d20\u8fdb\u884c\u5339\u914d)) => \u6781\u7ebf\u4e0a\u5bfb\u627e\u5339\u914d\u70b9

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u89c6\u89c9","title":"\u7acb\u4f53\u89c6\u89c9","text":"

\u6211\u4eec\u5df2\u7ecf\u6709\u4e86\u7a00\u758f\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u60f3\u8981\u5f97\u5230\u7a20\u5bc6\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u4e00\u4e2a\u6700\u66b4\u529b\u7684\u65b9\u6cd5\u5c31\u662f\u5c1d\u8bd5\u7740\u53bb\u5339\u914d\u6240\u6709\u50cf\u7d20\uff0c\u5f53\u7136\u8fd9\u770b\u8d77\u6765\u65f6\u95f4\u5f00\u9500\u975e\u5e38\u5927\u3002\u4f46\u662f\u6bcb\u5eb8\u7f6e\u7591\u7684\u662f\uff0c\u5728\u76ee\u524d\u8fd8\u6ca1\u6709\u4ecb\u5165\u4eba\u5de5\u667a\u80fd\u6280\u672f\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u50cf\u7d20\u7684\u5339\u914d\u5173\u7cfb\u3002

\u4ee5\u53ca\u8fd8\u6709\u4e00\u4e2a\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\uff0c\u5982\u4f55\u5f97\u5230\u5339\u914d\u70b9\u7684\u6df1\u5ea6\u4fe1\u606f\u3002

\u6240\u4ee5\u603b\u7ed3\u4e0b\u6765\uff0c\u6709\u4e24\u4e2a\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff1a

\u7531\u4e8e\u5339\u914d\u4e2d\u4f1a\u6709\u90e8\u5206\u4f18\u5316\u5185\u5bb9\u6d89\u53ca\u5230\u6df1\u5ea6\u8ba1\u7b97\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u6211\u60f3\u5148\u4ece\u6df1\u5ea6\u8ba1\u7b97\u5f00\u59cb\u8bb2\uff0c\u4e5f\u5c31\u662f\u4ece\u89c6\u5dee\u5f00\u59cb\u8bb2\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u89c6\u5dee","title":"\u89c6\u5dee","text":"

\u9996\u5148\uff0c\u6211\u4eec\u90fd\u77e5\u9053\u4eba\u7684\u53cc\u773c\u8d4b\u4e88\u4e86\u4eba\u7c7b\u89c6\u89c9\u4e0a\u6df1\u5ea6\u611f\u77e5\u7684\u80fd\u529b\uff0c\u4e5f\u5c31\u662f\u7acb\u4f53\u89c6\u89c9(stereo vision)\u3002\u4e00\u4e2a\u6bd4\u8f83\u5bb6\u55bb\u6237\u6653\u7684\u5b9e\u9a8c\u5c31\u662f\u5355\u773c\u7a7f\u9488\u4f1a\u53d8\u5f97\u5341\u5206\u56f0\u96be\u3002

\u5728\u5355\u76ee\u89c6\u89c9\u4e0b\uff0c\u4f53\u73b0\u8fdc\u8fd1\u6700\u7b80\u5355\u7684\u539f\u7406\u63cf\u8ff0\u5c31\u662f\u300c\u8fd1\u5927\u8fdc\u5c0f\u300d\uff0c\u800c\u5728\u52a8\u6001\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e5f\u4f53\u73b0\u5728\u79fb\u52a8\u76f8\u540c\u7684\u8ddd\u79bb\uff0c\u8fd1\u5904\u7684\u7269\u4f53\u79fb\u52a8\u66f4\u660e\u663e\uff0c\u800c\u8fdc\u5904\u7684\u66f4\u4e0d\u660e\u663e\u3002\u7136\u800c\u8fd9\u4e2a\u4fe1\u606f\u548c\u5355\u7eaf\u7684\u201c\u5927\u5c0f\u201d\u4fe1\u606f\u662f\u53ef\u4ee5\u6df7\u6dc6\u7684\uff0c\u6216\u8005\u8bf4\u5728\u201c\u5927\u5c0f\u201d\u53d8\u5316\u4e0d\u660e\u663e\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4fe1\u606f\u662f\u5f88\u96be\u88ab\u8bc6\u522b\u51fa\u6765\u7684\u3002

\u800c\u5728\u53cc\u76ee\u89c6\u89c9\u4e0b\uff0c\u6211\u4eec\u6709\u6709\u4e00\u4e2a\u66f4\u8fd1\u4e00\u6b65\u7684\u539f\u7406\uff0c\u4e5f\u5c31\u662f\u89c6\u5dee(disparity)\uff0c\u901a\u8fc7\u89c6\u5dee\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u7cbe\u786e\u5730\u611f\u53d7\u5230\u201c\u8ddd\u79bb\u201d\uff08\u5b9e\u9645\u4e0a\u4e5f\u662f\u5bf9\u6781\u51e0\u4f55\u90a3\u4e00\u5957\uff09\uff0c\u63a5\u4e0b\u6765\u9610\u8ff0\u5176\u539f\u7406\u3002

\u9996\u5148\uff0c\u6211\u4eec\u7ed8\u5236\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\uff1a

\u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe\u4e24\u4e2a\u56fe\u50cf\u4e2d\u7684\u5339\u914d\u70b9\u7b26\u5408\u4e4b\u540e\u4f1a\u5728\u7acb\u4f53\u5339\u914d\u4e00\u8282\u91cc\u63d0\u5230\u7684\u6700\u7b80\u60c5\u51b5(simplest case)\uff0c\u4f46\u662f\u53ef\u4ee5\u4e0d\u7528\u7ba1\u8fd9\u4e2a\u6700\u7b80\u60c5\u51b5\u662f\u4ec0\u4e48\uff0c\u76f4\u63a5\u5f53\u4f5c\u8fd9\u662f\u4e00\u4e2a\u4fef\u89c6\u89c6\u89d2\u4e0b\u7684\u7b80\u5316\uff0c\u76f4\u63a5\u770b\u4e0b\u9762\u7684\u6a21\u578b\u5373\u53ef\u3002

\u8fd9\u56fe\u6211\u753b\u4e86\u81f3\u5c11\u534a\u5c0f\u65f6 T^T\uff08\u5f3a\u8feb\u75c7\u306e\u6028\u5ff5\uff09

(1) \u4e2d OL \u548c OR \u5206\u522b\u662f\u4e24\u76f8\u673a\u4e2d\u5fc3\uff0c\u6de1\u84dd\u8272\u7ebf\u6761\u8868\u793a\u6210\u50cf\u5e73\u9762\uff0cXL \u548c XR \u5206\u522b\u8868\u793a\u5b9e\u9645\u70b9 X \u5728\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\uff0c\u6a59\u8272\u7ebf\u6761\u8868\u793a\u4ed6\u4eec\u7684\u6a2a\u5411\u5750\u6807\uff08\u5047\u8bbe\u4ed6\u4eec\u90fd\u5728\u540c\u4e00\u6c34\u5e73\u7ebf\u4e0a\uff09\uff0cz \u8868\u793a\u5b9e\u9645\u70b9 X \u5230\u57fa\u7ebf\u7684\u8ddd\u79bb\uff0c\u8fd9\u91cc\u6211\u4eec\u6682\u4e14\u79f0\u4e4b\u4e3a\u201c\u6df1\u5ea6\u201d\uff08\u53cd\u6b63\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\u6df1\u5ea6\uff0c\u6709 z \u90fd\u80fd\u7b97\uff09\u3002

(2) \u4e2d\u6211\u753b\u56fe\u7684\u65f6\u5019\u5fd8\u8bb0\u533a\u5206\u4e24\u4e2a XR \u4e86\uff0c\u6240\u4ee5\u5173\u4e8e (2) \u56fe\u4e2d\u7684 XR \u4e00\u5f8b\u6307\u5de6\u8fb9\u90a3\u4e2a XR\u3002

\u6211\u4eec\u5c06 OR \u7684\u6210\u50cf\u6a21\u578b\u5e73\u79fb\u5230\u5de6\u4fa7\uff0c\u5373\u56fe (2)\uff0c\u53d1\u73b0\u6a59\u8272\u7684\u4e09\u89d2\u5f62\u548c\u7ea2\u8272\u7684\u4e09\u89d2\u5f62\u76f8\u4f3c\uff1a\\(\\Delta O X_L X_R \\cong \\Delta X O_L O_R\\) \uff08\u6ce8\u610f\uff0c\u5b9e\u9645\u60c5\u51b5\u4e0d\u4e00\u5b9a\u7b49\u8170\uff01\uff09

\u4e8e\u662f\u6211\u4eec\u5f97\u5230\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff1a

\\[ \\frac{\\overline{X_L X_R}}{f} = \\frac{\\overline{O_L O_R}}{z} \\\\ \\text{ i.e. }\\; disparity = \\Delta{\\mathbf{x}} = |\\mathbf{x}_l - \\mathbf{x}_r| = |x_l - x_r| = \\frac{B \\cdot f}{z} \\\\ \\text{where }B\\text{ is the length of baseline} \\\\ \\text{ i.e. }\\; z = \\frac{B \\cdot f}{|x_l-x_r|} \\]

\u63d0\u793a

\u867d\u7136\u662f\u4e2a\u7b80\u5316\u60c5\u51b5\uff0c\u4f46\u662f\u5728\u6700\u7b80\u60c5\u51b5(simplest case)\u4e0b\u662f\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\u7684\uff0c\u7a0d\u540e\u6211\u4f1a\u63d0\u9192\u56de\u987e\u8fd9\u4e00\u8282\u6765\u7406\u89e3\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u5b89\u5fc3\u987a\u7740\u8bfb\u4e0b\u53bb\u5373\u53ef\u3002

\u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u89e3\u51b3\u4e00\u4e2a\u4e86\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u5339\u914d","title":"\u7acb\u4f53\u5339\u914d","text":"

\u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u5047\u8bbe\uff0c\u4e5f\u5c31\u662f\u5728\u5339\u914d\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684\u4e24\u4e2a view \u7684\u8ddd\u79bb\u76f8\u5dee\u4e0d\u5927\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c40\u90e8\u7279\u5f81\u4ecd\u7136\u662f\u76f8\u4f3c\u7684\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u641c\u7d22","title":"\u641c\u7d22","text":"

\u7acb\u4f53\u5339\u914d(Stereo Matching)\u7684\u539f\u7406\u5c31\u662f\uff0c\u9009\u5b9a\u7b2c\u4e00\u4e2a\u56fe\u50cf\u5185\u7684\u67d0\u4e00\u70b9\uff0c\u7136\u540e\u53bb\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u80fd\u591f\u548c\u5b83\u5339\u914d\u7684\u70b9\u3002\u6ca1\u9519\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u5339\u914d\u7684\u70b9\u5373\u53ef\uff0c\u8fd9\u5927\u5927\u4f18\u5316\u4e86\u590d\u6742\u5ea6\u3002\u800c\u5b83\u7684\u6839\u636e\u6070\u597d\u5c31\u662f\u5bf9\u6781\u7ebf\u7684\u5b9a\u4e49\u3002

\ud83d\udc49 \u56de\u987e\u5bf9\u6781\u51e0\u4f55\uff01

\u6ca1\u9519\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u77e5\u4e86 \\(X_L\\)\uff08\u7531\u6211\u4eec\u9009\u5b9a\u7684\uff09\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u8f68\u8ff9\u4fbf\u662f\u5bf9\u6781\u7ebf\uff0c\u4e8e\u662f\u6211\u4eec\u53ea\u9700\u8981\u5148\u627e\u5230\u6211\u4eec\u9009\u5b9a\u7684 \\(X_L\\) \u5728\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u4e0a\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\uff0c\u7136\u540e\u518d\u5728\u8fd9\u6761\u7ebf\u4e0a\u641c\u7d22\u7279\u5f81\u4e0e \\(X_L\\) \u6700\u5339\u914d\u7684\u90a3\u4e2a\u70b9\u5373\u53ef\u3002\uff08\u8fd9\u91cc\u6211\u4eec\u4e5f\u6ca1\u6709\u5fc5\u8981\u4f7f\u7528 SIFT\uff0c\u76f4\u63a5\u505a\u5dee\u5c31\u591f\u4e86\uff09

\u4f46\u662f\u8bdd\u53c8\u8bf4\u56de\u6765\uff0c\u8ba1\u7b97\u5bf9\u6781\u7ebf\u8fd9\u4ef6\u4e8b\u4e5f\u5e76\u975e\u5341\u5206\u7b80\u5355\uff0c\u5982\u679c\u5bf9\u4e8e\u6bcf\u4e2a\u70b9\u6211\u4eec\u90fd\u9700\u8981\u53bb\u8ba1\u7b97\u5bf9\u6781\u7ebf\uff0c\u90a3\u4e48\u5c06\u5e26\u6765\u4e0d\u5c0f\u7684\u5e38\u6570\uff0c\u800c\u4e14\u7531\u4e8e\u8fd9\u4ef6\u4e8b\u6ca1\u6cd5\u201c\u6574\u4f53\u5730\u9884\u5904\u7406\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4f18\u5316\u8fd9\u4ef6\u4e8b\u3002

\u6700\u7b80\u60c5\u51b5

\u9996\u5148\u8003\u8651\u6700\u7b80\u60c5\u51b5(simplest case)\u8fd9\u4e2a\u7279\u6b8a\u60c5\u51b5\uff1a

  1. \u4e24\u4e2a\u76f8\u673a\u7684\u7126\u8ddd\u76f8\u540c\uff1b
  2. \u76f8\u673a\u4f4d\u7f6e\u5728\u540c\u4e00\u6c34\u5e73\u9762\u4e0a\uff0c\u5373\u9ad8\u5ea6\u76f8\u540c\uff1b
  3. \u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u548c\u57fa\u7ebf\uff0c\u4e09\u8005\u76f8\u4e92\u5e73\u884c\uff0c\u6216\u8005\u8bf4\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u5171\u9762\uff08\u6b64\u65f6\u5bf9\u6781\u70b9\u4e0d\u5b58\u5728\uff09\uff1b

\u6b64\u65f6\uff0c\u5bf9\u6781\u7ebf\u4e5f\u6c34\u5e73\uff0c\u800c\u4e14\u4e24\u6761\u5bf9\u6781\u7ebf\u4e5f\u5171\u7ebf\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5f53\u6211\u4eec\u9009\u5b9a\u5de6\u56fe\u4e2d\u7684\u67d0\u4e2a\u70b9 \\(X_L\\)\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u5019\u9009\u4f4d\u7f6e\u5c31\u5728\u53f3\u56fe\u4e2d\u540c\u4e00\u9ad8\u5ea6\u7684\u90a3\u6761\u6c34\u5e73\u7ebf\u4e0a\u3002

\u90a3\u4e48\u5982\u4f55\u89e3\u51b3\u8fd9\u79cd\u60c5\u51b5\u4ee5\u5916\u7684\u60c5\u51b5\u5462\uff1f\u65e2\u7136\u6211\u90fd\u8fd9\u4e48\u6392\u4e86\uff0c\u90a3\u89e3\u51b3\u529e\u6cd5\u81ea\u7136\u5c31\u662f\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\u6765\u505a\u4e86\u3002

\u8f6c\u5316\u601d\u60f3

\u53c8\u662f\u4e00\u4e2a\u7a81\u7136\u7684\u60f3\u6cd5\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u6216\u8bb8\u53ef\u4ee5\u4e0d\u4ece\u6574\u4f53\u53bb\u601d\u8003\uff0c\u800c\u662f\u5148\u89e3\u51b3\u4e00\u4e2a\u6700\u7b80\u60c5\u51b5\uff0c\u518d\u8f6c\u5316\u95ee\u9898\u3002

\u4e00\u822c\u60c5\u51b5

\u8fd9\u4e2a\u95ee\u9898\u88ab\u79f0\u4e3a\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\uff0c\u8fd9\u91cc\u5e76\u4e0d\u5c55\u5f00\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1a

C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.

\u56de\u987e

\u76f8\u4fe1\u73b0\u5728\u4f60\u5bf9\u201c\u6700\u7b80\u60c5\u51b5\u201d\u5df2\u7ecf\u6709\u66f4\u6df1\u523b\u7684\u7406\u89e3\u4e86\uff0c\u4e0d\u59a8\u56de\u8fc7\u5934\u53bb\u7406\u89e3\u4e00\u4e0b\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u90a3\u4e2a\u7b80\u5316\u7684\u89c6\u5dee\u6a21\u578b\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\uff1f

\ud83d\udc49 \u89c6\u5dee

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d","title":"\u5339\u914d","text":"

\u6240\u8c13\u7684\u5bfb\u627e\u5339\u914d\uff0c\u5c31\u662f\u5728\u5145\u65a5\u7740\u5019\u9009\u70b9\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u6700\u597d\u7684\u4e00\u4e2a\u70b9\uff0c\u6216\u8005\u8bf4\u5dee\u5f02\u6700\u5c0f\u7684\u4e00\u4e2a\u70b9\u3002

\u5e38\u89c1\u7684\u5dee\u5f02\u8861\u91cf\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

SSD: Sum of Squared Differences

\\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,2)|^2 \\]

SAD: Sum of Absolute Differences

\\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,y)| \\]

ZNCC: Zero-mean Normalized Cross Correlation

\\[ diff = \\frac{(W_1(x,y)-\\overline{W_1})(W_2(x,y)-\\overline{W_2})}{\\sigma_{W_1}\\sigma_{W_2}} \\\\ \\text{where } \\overline{W_i} = \\frac{1}{n}\\sum_{x,y} W_i \\;\\;\\; \\sigma_{W_i} = \\sqrt{\\frac{1}{n}\\sum_{x,y}(W_i-\\overline{W_i})^2} \\]

\u5176\u4e2d\uff0cZNCC \u76f8\u6bd4\u5176\u4ed6\u65b9\u6cd5\uff0c\u4f18\u8d8a\u6027\u5728\u4e8e\u5b83\u5bf9\u56fe\u50cf\u6574\u4f53\u7684\u5149\u5f3a\u5ea6\u4e0d\u654f\u611f\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\\(W_i\\) \u5728\u53c2\u4e0e\u8ba1\u7b97\u524d\u90fd\u51cf\u53bb\u4e86 \\(\\overline{W_i}\\)\uff0c\u6240\u4ee5\u6d88\u9664\u4e86\u56fe\u50cf\u6574\u4f53\u4eae\u5ea6\u5e26\u6765\u7684\u5f71\u54cd\u3002

\u4e2a\u4eba\u7591\u60d1

\u8fd9\u91cc\u6240\u8c13\u7684\u201c\u6d88\u9664\u4eae\u5ea6\u5f71\u54cd\u201d\uff0c\u662f\u5426\u662f\u5bf9\u4e8e multi-view \u7684\u60c5\u51b5\u6765\u8bf4\u7684\uff1f\u56e0\u4e3a\u5982\u679c\u53ea\u6709\u4e24\u5f20\u56fe\u7247\uff0c\u4e14\u4eae\u5ea6\u5dee\u8ddd\u6574\u4f53\u6052\u5b9a\u7684\u8bdd\uff0c\u867d\u7136\u8ba1\u7b97\u51fa\u6765\u7684 diff \u4f1a\u504f\u5927\uff0c\u4f46\u662f\u6574\u4f53\u4e0a\u7684\u5927\u5c0f\u5173\u7cfb\u597d\u50cf\u4e5f\u6ca1\u6709\u53d8\u5316\uff1f\u6211\u6ca1\u6709\u60f3\u6e05\u695a\u8fd9\u4e00\u70b9\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d\u7684\u6539\u8fdb","title":"\u5339\u914d\u7684\u6539\u8fdb","text":"

\u7136\u800c\uff0c\u5339\u914d\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u989d\u5916\u7684\u95ee\u9898\u9700\u8981\u89e3\u51b3\u3002

\u7a97\u53e3\u641c\u7d22\u7684\u5f0a\u7aef

\u7a97\u53e3\u641c\u7d22\u7684\u6548\u679c\u5b9e\u9645\u4e0a\u5e38\u5e38\u4e0d\u5c3d\u5982\u4eba\u610f\uff0c\u6709\u4e00\u79cd\u57fa\u4e8e\u56fe\u5272\u7684\u505a\u6cd5\uff0c\u6548\u679c\u76f8\u5bf9\u7a0d\u597d\u3002

\u8fd9\u91cc\u6240\u8bf4\u7684\u7a97\u53e3\uff0c\u6307\u7684\u662f\u5728\u5339\u914d\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u7528\u6765\u6bd4\u8f83\u76f8\u4f3c\u5ea6\u7684\u7a97\u53e3\u5927\u5c0f\u3002

\ud83d\udc49 Boykov et al., Fast Approximate Energy Minimization via Graph Cuts, International Conference on Computer Vision 1999.

\u8fd8\u6709\u53e6\u5916\u4e00\u4e2a\u601d\u8def\uff0c\u90a3\u5c31\u662f\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5982\u679c\u8bf4\u539f\u6765\u7684\u76ee\u6807\u51fd\u6570\u662f\u4e24\u70b9\u7684\u5339\u914d\u7a0b\u5ea6\uff0c\u90a3\u4e48\u73b0\u5728\u7684\u76ee\u6807\u51fd\u6570\u53ef\u4ee5\u662f\u5339\u914d\u7a0b\u5ea6\u548c\u5e73\u6ed1\u7a0b\u5ea6\u7684\u52a0\u6743\u548c\uff1a

\\[ \\begin{aligned} E(d) = E_d(d) + \\lambda E_s(s) \\\\ \\text{match cost: } & E_d(d) = \\sum_{(x,y)\\in I} C(x,y,d(x,y)) \\;\\;\\; \\text{e.g., SSD, SAD, ZNCC} \\\\ \\text{smoothness cost: } & E_s(d) = \\sum_{(p,q) \\in \\varepsilon} V(d_p, d_q) \\;\\;\\; \\text{where } \\varepsilon \\text{ is the set of neighboring pixels } \\end{aligned} \\]

\u5176\u4e2d\uff0c\\(V(d_p,d_q)\\) \u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

\\[ \\begin{aligned} \\begin{aligned} \\text{L_1 Distance: } \\\\ V(d_p, d_q) &= |d_p - d_q| \\end{aligned} & & \\begin{aligned} \\text{Potts Model: } \\\\ V(d_p, d_q) &= \\left\\{ \\begin{array}{*} 0 & \\text{ if } d_p = d_q \\\\ 1 & \\text{ if } d_p \\not = d_q \\end{array} \\right. \\end{aligned} \\end{aligned} \\]

\u7279\u522b\u7684\uff0c\u5982\u679c\u6d89\u53ca\u7684\u662f\u4e00\u4e2a\u7ebf\u6027\u7684\u626b\u63cf\uff0c\u4e5f\u5c31\u662f\u5f53 \\(\\varepsilon\\) \u4e2d\u53ea\u542b\u6709\u5de6\u53f3\u4e24\u4fa7\u7684\u70b9\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u7528 DP \u89e3\u51b3\u3002\u800c\u8fd9\u79cd\u65b9\u5f0f\u4f18\u5316\u51fa\u6765\u7684\u56fe\u7247\u6548\u679c\u662f\u8fd9\u6837\u7684\uff1a

\u7136\u800c\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\u7ebf\u6027\u626b\u63cf\u8fd9\u4e2a\u6761\u4ef6\u7684\u8bdd\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u53d8\u6210\u4e86\u4e00\u4e2a NP-hard \u95ee\u9898\uff0c\u4e0d\u8fc7\u53ef\u4ee5\u7528\u56fe\u5272\u6c42\u8fd1\u4f3c\u89e3\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7efc\u5408","title":"\u7efc\u5408","text":"

\u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u5168\u90e8\u89e3\u51b3\u4e86\u3002

\u4e8e\u662f\u53cc\u76ee\u91cd\u5efa\u7684\u5927\u81f4\u6d41\u7a0b\u5982\u4e0b\u2014\u2014\u9996\u5148\u6211\u4eec\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\uff0c\u83b7\u5f97\u76f8\u673a\u7684\u5185\u53c2\uff1b\u63a5\u4e0b\u6765\u901a\u8fc7\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\u6280\u672f\uff0c\u5c06\u4e24\u5f20\u56fe\u7247\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\uff1b\u7136\u540e\u518d\u5bf9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u8fdb\u884c\u5339\u914d\uff0c\u53ea\u9700\u8981\u5728\u540c\u9ad8\u5ea6\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u5c40\u90e8\u7279\u5f81\u6700\u76f8\u4f3c\u7684\u53e6\u5916\u4e00\u4e2a\u70b9\u5373\u53ef\uff1b\u63a5\u7740\u518d\u6839\u636e\u5339\u914d\u70b9\u7684\u5173\u7cfb\u8fdb\u884c\u6df1\u5ea6\u4f30\u8ba1\u5373\u53ef\u3002

graph LR;\n    A --> B --> C --> D\n    A[\"Calibrate Cameras\"]\n    B[\"Rectify Images\"]\n    C[\"Compute Disparity\"]\n    D[\"Estimate Depth\"]
\u5f15\u8d77\u8bef\u5dee\u7684\u53ef\u80fd\u56e0\u7d20

\u8bfe\u7a0b\u5185\u8fd9\u4e2a\u5217\u8868\u5176\u5b9e\u662f\u7ed9\u5927\u4f5c\u4e1a\u7684\u63d0\u793a\uff0c\u4e2a\u4eba\u8ba4\u4e3a\u4e5f\u6709\u52a9\u4e8e\u68b3\u7406\u6574\u4e2a\u6d41\u7a0b\u3002

\u4e0b\u9762\u8be6\u7ec6\u8bf4\u660e\u51e0\u4e2a\u56e0\u7d20\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\u3002

\u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

\u5f53\u6211\u4eec\u4f7f\u7528\u7a97\u53e3\u641c\u7d22\u65f6\uff0c\u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u4ecd\u7136\u662f\u4e2a\u96be\u9898\u2014\u2014\u7a97\u53e3\u8d8a\u5c0f\uff0c\u5f80\u5f80\u7ed3\u679c\u7684\u7ec6\u8282\u4f1a\u66f4\u591a\uff0c\u76f8\u5bf9\u7684\u566a\u58f0\u4e5f\u66f4\u591a\uff0c\u56fe\u7247\u770b\u8d77\u6765\u5c31\u5f88\u4e71\uff1b\u800c\u7a97\u53e3\u8d8a\u5927\uff0c\u5f80\u5f80\u566a\u58f0\u66f4\u5c11\u3001\u66f4\u5e73\u6ed1\uff0c\u4f46\u662f\u7ec6\u8282\u4e5f\u66f4\u5c11\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2a\u5e73\u6ed1\u5ea6\u548c\u7cbe\u786e\u5ea6\u7684 trade off\u3002

W \u8868\u793a\u7a97\u53e3\u5927\u5c0f\u3002

\u57fa\u7ebf\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

\u8c28\u8bb0\u6211\u53c8\u56e0\u4e3a\u753b\u56fe\u6d6a\u8d39\u534a\u4e2a\u5c0f\u65f6\u3002

\u4e0a\u9762\u7684\u5185\u5bb9\u7ed3\u675f\u540e\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u9057\u7559\u4e0b\u6765\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u5148\u601d\u8003\u4e00\u4e0b\u76ee\u524d\u8fd9\u4e2a\u6d41\u7a0b\u6709\u4ec0\u4e48\u95ee\u9898\uff0c\u518d\u6253\u5f00\u4e0b\u9762\u7684\u63d0\u793a\u6846\u3002

\u4e00\u4e2a\u5c1a\u672a\u88ab\u89e3\u51b3\u7684\u95ee\u9898

\u8ba9\u6211\u4eec\u56de\u5230\u7b2c\u4e94\u7ae0\u7684\u5173\u952e\u70b9\u5339\u914d\u2014\u2014\u4e3a\u4ec0\u4e48\u6211\u4eec\u53ea\u627e\u5173\u952e\u70b9\uff1f

\u6211\u4e2a\u4eba\u7684\u60f3\u6cd5\u662f\uff0c\u9996\u5148\uff0c\u5173\u952e\u70b9\u80fd\u591f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u8868\u8fbe\u4e00\u4e2a\u7269\u4f53\u7684\u7279\u5f81\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u52fe\u52d2\u4e00\u4e2a\u7269\u4f53\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u90e8\u5206\uff1b\u8fd8\u6709\u4e00\u4e2a\u539f\u56e0\u662f\uff0c\u5173\u952e\u70b9\u7279\u5f81\u660e\u663e\uff0c\u5176\u8868\u8fbe\u5177\u6709\u4e00\u5b9a\u7684\u72ec\u7279\u6027\uff08\u4e5f\u5c31\u662f\u5173\u952e\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff09\u3002

\u800c\u73b0\u5728\u6211\u4eec\u505a\u5339\u914d\u7684\u5185\u5bb9\u662f\u4efb\u610f\u7684\u3001\u5e7f\u6cdb\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u73b0\u5728\u5728\u505a\u5339\u914d\u7684\u5f88\u53ef\u80fd\u662f\u4e00\u9762\u767d\u5899\u4e0a\u7684\u67d0\u4e00\u4e2a\u70b9\uff08\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u8fc7\u7684 textureless regions\uff09\uff0c\u8fd9\u6837\u7684\u70b9\u53c8\u8981\u5982\u4f55\u627e\u5230\u5b83\u7684\u5339\u914d\u70b9\u5462\uff1f

\u7b54\u6848\u5c31\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u7ed3\u6784\u5149\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u7ed3\u6784\u5149

\u6211\u4eec\u518d\u68b3\u7406\u4e00\u4e0b\u95ee\u9898\u7684\u8981\u70b9\uff0c\u5c31\u4ee5\u767d\u5899\u4e3a\u4f8b\u5b50\uff0c\u5b83\u96be\u4ee5\u8fdb\u884c\u5339\u914d\u662f\u56e0\u4e3a\u5b83\u7f3a\u5c11\u7279\u5f81\u3001\u7f3a\u5c11\u7eb9\u7406\uff0c\u800c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5bf9\u5176\u7ed3\u6784\u8fdb\u884c\u91cd\u5efa\u2014\u2014\u90a3\u4e48\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u6211\u4eec\u624b\u52a8\u7ed9\u4ed6\u300c\u4e0a\u7eb9\u7406\u300d\uff0c\u5f53\u7136\u5e76\u4e0d\u662f\u6307\u753b\u4e0a\u53bb\uff0c\u800c\u662f\u4f7f\u7528\u7ed3\u6784\u5149\uff1a

\u4e8e\u662f\u6211\u4eec\u7684\u56fe\u50cf\u5c31\u6709\u4e86\u7eb9\u7406\uff0c\u62e5\u6709\u4e86\u201c\u7279\u5f81\u201d\u3002

\u4e2a\u4eba\u60f3\u6cd5

\u6211\u5f53\u65f6\u770b\u5230\u8fd9\u4e2a idea \u7684\u65f6\u5019\uff0c\u611f\u89c9\u5f88\u523a\u6fc0\uff0c\u4f46\u662f\u53c8\u89c9\u5f97\u8fd9\u7834\u574f\u4e86\u666f\u8c61\u672c\u6765\u7684\u7eb9\u7406\uff0c\u4f46\u662f\u8f6c\u5ff5\u4e00\u60f3\uff0c\u662f\u4e0d\u662f\u4f1a\u62cd\u4e24\u5f20\uff0c\u4e00\u5f20\u7528\u6765\u4e0a\u8272\uff0c\u4e00\u5f20\u7528\u6765\u5efa\u6a21\uff1f\u6211\u6682\u65f6\u8fd8\u4e0d\u77e5\u9053\uff0c\u7ebf\u653e\u4e2a\u731c\u60f3\u5728\u8fd9\u91cc\u3002

\u4e0d\u8fc7\u6b64\u65f6\u53c8\u6709\u4e00\u4e2a\u5f15\u7533\u51fa\u6765\u7684\u70b9\uff0c\u5c31\u662f\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5176\u5b9e\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e2a\u76f8\u673a\u3002

\u8fd9\u662f\u56e0\u4e3a\uff0c\u5047\u8bbe\u6211\u4eec\u628a camera 2 \u653e\u5728\u4e0e projector \u4e00\u6837\u7684\u4f4d\u7f6e\uff0c\u6b64\u65f6 camera 2 \u6536\u5230\u7684\u56fe\u50cf\u5e94\u5f53\u548c projector \u5c04\u51fa\u53bb\u7684\u662f\u4e00\u6837\u7684\uff0c\u6216\u8005\u8bf4\u662f\u7c7b\u4f3c\u7684\u3002

\u5982\u4f55\u89e3\u91ca\uff1f

\u8bf4\u5b9e\u8bdd\u6211\u8fd8\u662f\u4e0d\u592a\u80fd\u7406\u89e3\u8fd9\u4e00\u70b9\u3002\u5982\u679c\u8981\u6211\u5f3a\u884c\u7406\u89e3\u7684\u8bdd\uff0c\u6211\u89c9\u5f97\u5927\u6982\u662f\u53c8\u8fd9\u4e48\u4e24\u70b9\uff0c\u7b2c\u4e00\u70b9\u662f\u88ab\u7ed3\u6784\u5149\u7167\u5c04\u7684\u4e1c\u897f\u5bf9\u7ed3\u6784\u5149\u7684\u53cd\u5c04\u4ee5\u6f2b\u53cd\u5c04\u4e3a\u4e3b\uff0c\u800c\u4e14\u6240\u8c13\u7684\u201c\u4e00\u6837\u201d\u4e5f\u53ea\u662f\u7d2f\u6b7b\uff0c\u5e76\u4e0d\u80fd\u5305\u62ec\u9634\u5f71\u5173\u7cfb\u7b49\uff0c\u6240\u4ee5\u5bf9\u8fd9\u4e2a\u7ed3\u8bba\u7684\u6b63\u786e\u4e0e\u5426\u6211\u8868\u793a\u6000\u7591\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u591a\u89c6\u89d2","title":"\u591a\u89c6\u89d2","text":"

\u591a\u89c6\u89d2\u7acb\u4f53(Multi-view Stereo, MVS)\u91cd\u5efa\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u5229\u7528\u66f4\u591a\u7684\u89c6\u89d2\u6765\u8fdb\u884c\u91cd\u5efa\uff0c\u76f8\u6bd4\u4e8e\u524d\u9762\u63d0\u5230\u7684\u53cc\u76ee\u6a21\u578b\uff0c\u5b83\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\u3001\u80fd\u5728\u591a\u4e2a\u5019\u9009\u4e2d\u9009\u62e9\u6700\u5408\u9002\u7684\u65b9\u6848\uff0c\u4ee5\u53ca\u80fd\u5f97\u5230\u66f4\u5b8c\u6574\u7684 3D

\u6211\u4eec\u5728\u53cc\u76ee\u5339\u914d\u4e2d\uff0c\u9996\u5148\u5bfb\u627e\u80fd\u591f\u5339\u914d\u7684\u70b9\u5bf9\u518d\u505a\u63a5\u4e0b\u6765\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u5728\u591a\u89c6\u89d2\u4e2d\uff0c\u627e\u5230\u300c\u5339\u914d\u7684\u4e00\u7cfb\u5217\u70b9\u300d\u662f\u6bd4\u8f83\u56f0\u96be\u4e14\u8017\u65f6\u7684\uff0c\u56e0\u4e3a n \u4e2a\u70b9\u6709 \\(C_n^2\\) \u5bf9\u5339\u914d\u5173\u7cfb\u3002\u6240\u4ee5\u6211\u4eec\u8981\u53d8\u6362\u601d\u8def\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u67d0\u4e00\u4e2a\u89c6\u89d2\u4e3a\u57fa\u7840\uff0c\u5e76\u679a\u4e3e\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff0c\u8ba1\u7b97\u91cd\u6295\u5f71\u8bef\u5dee\uff0c\u627e\u5230\u4f7f\u91cd\u6295\u5f71\u8bef\u5dee\u6700\u4f18\u79c0\u7684\u90a3\u4e2a\u6df1\u5ea6\u4f5c\u4e3a\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff08\u800c\u4e0d\u662f\u5728\u6bcf\u4e00\u4e2a\u5bf9\u6781\u7ebf\u4e0a\u627e\uff0c\u53ef\u4ee5\u601d\u8003\u4e3a\u4ec0\u4e48\uff09\u3002

\u4e2a\u4eba\u7591\u95ee

\u8bdd\u8bf4\u8fd9\u4e2a\u91cd\u6295\u5f71\u8bef\u5dee\u6307\u7684\u662f\u4ec0\u4e48\u554a\uff0c\u662f\u9700\u8981\u5148\u7b97\u597d\u5339\u914d\u70b9\u7136\u540e L2 \u8ddd\u79bb\u7684\u8bef\u5dee\u8fd8\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff1f\u5982\u679c\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff0c\u90a3\u600e\u4e48\u89e3\u51b3\u5f62\u53d8\uff1f

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-reconstruction","title":"3D reconstruction","text":"

\u5177\u4f53\u6765\u8bf4\uff0c3D \u91cd\u5efa\u5305\u62ec\u8fd9\u4e48\u4e09\u4e2a\u6b65\u9aa4\uff1a

  1. \u6df1\u5ea6\u8ba1\u7b97
  2. \u6df1\u5ea6 -> 3D\u7f51\u683c\u8868\u9762
  3. \u7eb9\u7406\u586b\u5145
"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-representations","title":"3D representations","text":"

\u8865\u5145\u56fe\u7247

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-surface-reconstruction","title":"3D surface reconstruction","text":"
  1. \u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a
  2. \u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c
"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u6df1\u5ea6---\u4f53\u7d20\u8868\u793a","title":"\u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a","text":"

\u5e38\u7528\u65b9\u6cd5\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#depth-fusion-depth-maps-to-tsdf","title":"Depth Fusion \uff08depth maps to TSDF\uff09","text":"

\u3010\u5bf9\u4e8e\u56fe\u4e2d\u3011\uff1a

\u601d\u8def

\u4e4b\u524d\u4e5f\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\u3002\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u60f3\u6cd5\u662f\uff0c\u5f53\u4f60\u9700\u8981\u628a\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u4e1c\u897f\u6295\u5f71\u5230\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u5230\u5730\u65b9\u53bb\u65f6\uff0c\u5e94\u5f53\u679a\u4e3e\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u7684\u90a3\u4e00\u4fa7\u7684\u5355\u5143\uff0c\u7136\u540e\u5229\u7528\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u8fd9\u4e00\u4fa7\u53bb\u8ba1\u7b97\uff0c\u800c\u4e0d\u662f\u4ece\u4f4e\u5230\u9ad8\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#poisson-reconstruction-depth-maps-to-occupancy-volume","title":"Poisson reconstruction \uff08depth maps to occupancy volume\uff09","text":"

\u67cf\u677e\u91cd\u5efa

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u4f53\u7d20\u8868\u793a---\u4e09\u7ef4\u7f51\u683c","title":"\u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c","text":"

\u5e38\u7528\u65b9\u6cd5\uff1a

Marching cubes

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#texture-mapping","title":"Texture mapping","text":"

\u5c55\u5f00 get \u7eb9\u7406\u56fe\uff08\u4e8c\u7ef4\u5750\u6807\u80fd\u591f\u5bf9\u5e94\u4e00\u4e2a\u7f51\u683c\u9762\uff09 using \u53c2\u6570\u5316

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/","title":"Lecture 9 | Deep Learning","text":"

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

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u673a\u5668\u5b66\u4e60\u6982\u8ff0","title":"\u673a\u5668\u5b66\u4e60\u6982\u8ff0","text":"

\u8bf4\u660e

\u672c\u8bfe\u7a0b\u4e0d\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u5173\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u6240\u6709\u77e5\u8bc6\uff0c\u4f46\u4ecd\u7136\u5bf9\u57fa\u7840\u6982\u5ff5\u6709\u6240\u8981\u6c42\uff0c\u6240\u4ee5\u5728\u6b64\u4ec5\u505a\u6982\u5ff5\u6027\u5bf9\u7b80\u4ecb\u3002

\u673a\u5668\u5b66\u4e60(Machine Learning, ML) \u7c97\u7565\u7684\u6765\u8bf4\u5c31\u662f\u901a\u8fc7\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u5b66\u4e60\uff0c\u5728\u4e00\u5b9a\u89c4\u5219\u4e0b\u751f\u6210\u7a0b\u5e8f\uff0c\u5bf9\u4e8e\u673a\u5668\u5b66\u4e60\u6765\u8bf4\uff0c\u5b66\u4e60\u51fa\u6765\u7684\u8fd9\u4e2a\u201c\u7a0b\u5e8f\u201d\u7ed3\u679c\u662f\u6a21\u578b(model)\u3002

\u800c\u5982\u679c\u7528\u6765\u5b66\u4e60\u7684\u662f\u88ab\u6807\u6ce8\u8fc7\u7684\u6570\u636e(labeled data)\uff0c\u5219\u79f0\u4e4b\u4e3a(\u6709)\u76d1\u7763(\u7684)\u5b66\u4e60(supervised learning)\u3002

\u65e0\u8bba\u662f\u673a\u5668\u5b66\u4e60\u6280\u672f\u8fd8\u662f\u4f20\u7edf\u7684\u7f16\u7a0b\u6280\u672f\uff0c\u90fd\u662f\u4e3a\u4e86\u89e3\u51b3\u67d0\u4e2a\u95ee\u9898\u800c\u5b58\u5728\u7684\u3002\u800c\u89e3\u51b3\u4e00\u4e2a\u590d\u6742\u95ee\u9898\u2014\u2014\u6b63\u5982\u6211\u4eec\u4e4b\u524d\u5f3a\u8c03\u7684\u2014\u2014\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u62bd\u8c61\u5efa\u6a21\u3002\u800c\u4e00\u4e2a\u673a\u5668\u5b66\u4e60\u5b66\u4e60\u51fa\u6765\u7684\u6a21\u578b(model)\u53ef\u4ee5\u88ab\u89c6\u4f5c\u4e00\u4e2a\u5173\u4e8e\u8f93\u5165\u548c\u8f93\u51fa\u7684\u63cf\u8ff0\uff1a

\\[ \\text{Input } X \\rightarrow f_w \\rightarrow \\text{Output } Y \\]

\u800c\u6839\u636e\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u8f93\u51fa\u201d\u7684\u4e0d\u540c\uff0c\u6309\u7167\u8fde\u7eed\u4e0e\u79bb\u6563\uff0c\u6211\u4eec\u5c06\u6240\u89e3\u51b3\u7684\u95ee\u9898\u533a\u5206\u4e3a\u56de\u5f52(regression)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u8fde\u7eed\u7684\u6570\u503c\uff09\u548c\u5206\u7c7b(classification)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u79bb\u6563\u7684\u6807\u7b7e\uff09\uff0c

\u66f4\u5177\u9898\u7684\u6765\u8bf4\uff0c\u4e00\u822c\u673a\u5668\u5b66\u4e60\u7684 pipeline \u662f\u8fd9\u6837\u7684\uff1a

  1. \u5bf9\u95ee\u9898\u8fdb\u884c\u5b9a\u4e49\uff1b
  2. \u6536\u96c6\uff08\u548c\u5904\u7406\uff09\u7528\u6765\u5b66\u4e60\u7684\u6570\u636e\u96c6\uff1b
  3. \u5bf9\u95ee\u9898\u5efa\u6a21\uff0c\u5e76\u8bbe\u8ba1\u6a21\u578b\uff1b
    • \u62bd\u8c61\u5730\u6765\u8bf4\u662f\u51b3\u5b9a\u8f93\u5165\u8f93\u51fa\u7684\u5173\u8054\u5f62\u5f0f\uff1b
  4. \u6a21\u578b\u8bad\u7ec3\uff1b
    • \u8bbe\u8ba1\u635f\u5931\u51fd\u6570\u6765\u8bc4\u4f30\u6a21\u578b\u7684\u6548\u679c\uff1b
    • \u7528\u4f18\u5316\u6280\u672f\u6c42\u89e3\u4f7f\u6a21\u578b\u6548\u679c\u6700\u597d\u7684\u53c2\u6570\uff1b
  5. \u6a21\u578b\u6d4b\u8bd5\uff1b
    • \u4e5f\u5c31\u662f\u7528\u6d4b\u8bd5\u6570\u636e\u96c6\u6d4b\u8bd5\u5b83\u7684\u8868\u73b0\uff1b
"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u7ebf\u6027\u5206\u7c7b\u5668","title":"\u7ebf\u6027\u5206\u7c7b\u5668","text":"

\u7ebf\u6027\u5206\u7c7b\u5668(Linear Classifier)\u6700\u65e9\u53eb\u611f\u77e5\u673a(Perceptron)\uff0c\u5b83\u662f ML \u4e2d\u4e00\u4e2a\u6700\u7b80\u5355\u4e5f\u662f\u6700\u57fa\u672c\u7684\u6784\u6210\u3002

\\[ y = f(x, W) = W x + b \\\\ \\begin{aligned} & \\text{where } x \\text{ means inputs, such as image, } \\\\ & y \\text{ means outputs, such as the class of the object, } \\\\ & \\text{and } W \\text{ is the parameters matrix.} \\end{aligned} \\]

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u6570\u5b66\u63cf\u8ff0\u5c31\u89e3\u91ca\u4e86\u5b83\u4e3a\u4ec0\u4e48\u53eb\u300c\u7ebf\u6027\u300d\u5206\u7c7b\u5668\u3002

\u66f4\u8be6\u7ec6\u7684\u89e3\u91ca\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\uff0c\u53ef\u4ee5\u67e5\u770b cs231n \u7b14\u8bb0\u7684\u76f8\u5173\u4ecb\u7ecd

\u4f55\u65f6\u8f93\u51fa\u6bd4\u8f83\u5927\uff1f

\u8f93\u51fa\u5927\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u67d0\u884c\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u5206\u7c7b\u5230\u8fd9\u4e00\u884c\u7684\u53ef\u80fd\u6027\u66f4\u5927\uff0c\u4e00\u822c\u662f \\(x\\) \u4e0e \\(W\\) \u7684\u5bf9\u5e94\u884c\u76f8\u4f3c\u65f6\u3002

\u8fd9\u91cc\u6709\u4e00\u4e2a\u7279\u6b8a\u7684\u6982\u5ff5\u662f\u51b3\u7b56\u8fb9\u754c(Decision Boundary)\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training","title":"Training","text":"

\u5982\u4f55\u627e\u5230\u6700\u4f73\u7684\u53c2\u6570\uff1f

\u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u7f3a\u70b9

\u8bc4\u4ef7\u4e24\u4e2a\u6982\u7387\u5206\u5e03\u662f\u5426\u76f8\u4f3c\uff0c\u5e38\u7528\u7684\u662f\u4ea4\u53c9\u5dee\uff0ccross entropy as loss function

\\[ S \\sim S(y) \\\\ D(S,L) = -\\sum_i L_i \\log S_i \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#neural-networks","title":"Neural Networks","text":"

\u7ebf\u6027\u5206\u7c7b\u6700\u65e9\u53eb\u611f\u77e5\u673a\uff0cperceptron

\u7136\u800c\u6709\u4e9b\u5206\u7c7b\u53ef\u80fd\u662f\u975e\u7ebf\u6027\u7684\uff0c\u5982\u56fe

\u8fd9\u79cd\u65f6\u5019\u6211\u4eec\u53ef\u80fd\u4f1a\u4f7f\u7528\u4e00\u4e2a\u51fd\u6570\u5c06\u5b83\u4e0e\u7ebf\u6027\u5206\u7c7b\u6620\u5c04\u8d77\u6765\uff0c\u8fd9\u79cd\u51fd\u6570\u4e00\u822c\u53eb\u6fc0\u6d3b\u51fd\u6570 activation functions

\u591a\u7c7b\u522b\u8868\u793a

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u591a\u5c42\u611f\u77e5\u673a-multi-layer-perceptron","title":"\u591a\u5c42\u611f\u77e5\u673a Multi-layer perceptron","text":"\\[ \\sigma \\text{ is a nonlinear transform.} f(x) = \\sigma(w^T x + b) \\]

hidden layers

\u5982\u679c\u6ca1\u6709\u975e\u7ebf\u6027\u6fc0\u6d3b\u51fd\u6570\uff0c\u6700\u540e\u7b49\u4ef7\u4e8e\u4e00\u4e2a\u5355\u5c42\u7ebf\u6027\u611f\u77e5\u673a

Neural Networks

\u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc Deep Neural Networks \u5c42\u6570\u591a =>

\u5168\u8fde\u5c42 Fully connected layer

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#convolution-neural-networks","title":"Convolution Neural Networks","text":"

What is CNN? What is convolution? Layer Types: 1. Convolutional layer 2. Pooling layer 3. Fully-connected layer

\u5728 CV \u4e2d\uff0c\u6709\u65f6\u5019\u56fe\u50cf\u7684\u5c40\u90e8\u7279\u5f81\u5c31\u591f\u6211\u4eec\u8fdb\u884c\u5206\u7c7b\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u80fd\u4e0d\u9700\u8981\u8ba9\u7f51\u7edc\u8fde\u4e0a\u6240\u6709\u7684\u90e8\u5206\u3002

1 \u4e2a\u7f51\u7edc -> 3 \u4e2a\u7f51\u7edc\uff0cwith weight sharing\uff0c\u56e0\u4e3a 3 \u4e2a\u7f51\u7edc\u90fd\u662f\u7528\u6765\u8bc6\u522b\u540c\u6837\u7684\u4e1c\u897f\u7684\uff0c\u6216\u8005\u8bf4\u529f\u80fd\u76f8\u540c\u3002

\\[ y = \\sigma(x \\otimes w + b) \\]

padding & pooling & stride

\u597d\u5904\u662f\u53c2\u6570\u6bd4\u5168\u8fde\u5c42\u5c11\u5f88\u591a

\u611f\u53d7\u91ce Receptive fields

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6c60\u5316\u5c42","title":"\u6c60\u5316\u5c42","text":"

\u628a\u4e0d\u540c\u5730\u996d\u7684\u7ed3\u679c\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c06\u54cd\u5e94\u56fe\u7684\u591a\u4e2a\u7ed3\u679c\u5408\u5e76\u4e3a\u540c\u4e00\u4e2a

CNN \u4e00\u822c\u8fc7\u7a0b

P71

CNN \u7ecf\u5178\u7f51\u7edc\uff1aAlexNet, VGG,

\u4e0d\u540c channel \u5355\u72ec\u505a ----> Batch Normalization

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training-neural-networks","title":"Training Neural Networks","text":"

\u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u201c\u6700\u4f73\u201d\u7684\u7f51\u7edc\uff0c\u4f46\u662f\u5982\u4f55\u5bfb\u627e\u5176\u4e2d\u6700\u597d\u7684\u53c2\u6570\u5219\u662f\u6709\u4e00\u7cfb\u5217\u4e25\u683c\u7684\u65b9\u6cd5\u3002

loss function

optimization

\u6700\u5c0f\u5316 loss function\uff0c\u4f7f\u7528\u5404\u79cd\u68af\u5ea6\u4e0b\u964d

This training method is called \u540e\u5411/\u53cd\u5411\u4f20\u64ad back-propagation

\\[ \\mathbf{w}^{t+1} = \\mathbf{w}^t - \\eta_t\\frac{\\partial L}{\\partial \\mathbf{w}}\\mathbf{w}^t \\]

\u6c42\u68af\u5ea6-\u300b\u590d\u5408\u51fd\u6570\u6c42\u5bfc-\u300b\u94fe\u5f0f\u6cd5\u5219

\u5bf9\u4e8e\u73b0\u5728\u7684\u6df1\u5ea6\u5b66\u4e60\u5de5\u5177\u6765\u8bf4\uff0c\u53cd\u5411\u4f20\u64ad\u4e0e\u6c42\u5bfc\u7b49\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u81ea\u52a8\u5b9e\u73b0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u597d\u7f51\u7edc\u7ed3\u6784\u548c loss function \u5373\u53ef\uff0c\u800c\u4f18\u5316\u90e8\u5206\u5219\u53ef\u4ee5\u901a\u8fc7\u5de5\u5177\u5b9e\u73b0\u3002

\u968f\u673a\u68af\u5ea6\u4e0b\u964d\uff0c\u968f\u673a\u7684\u91c7\u6837\u4e00\u90e8\u5206\u70b9\uff0c\\(\\Omega\\) @P86\uff0c

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#architecture--hyper-parameters","title":"Architecture & hyper-parameters","text":"

\u65e0\u6cd5\u901a\u8fc7\u90a3\u4e9b\u80fd\u591f\u81ea\u52a8\u8ba1\u7b97\u7684\u6743\u91cd\uff0c\u6d89\u53ca\u5230\u7f51\u7edc\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u6210\u4e3a\u8d85\u53c2\u6570 hyper-parameters\u3002

\u65b9\u6cd5\uff1a\u8bd5\uff08\u5f53\u7136\u4e0d\u662f\u7528\u624b\u8bd5x\uff09\uff01

How to prevent overfitting? \u2022 Cross validation and early stop \u2022 Regularization or dropout \u2022 Data augmentation

\u5982\u4f55\u8bc4\u4ef7\u7ed3\u679c\u201c\u597d\u201d\u8fd8\u662f\u201c\u4e0d\u597d\u201d\uff1f

\u5982\u4f55\u5206\u5272\u6570\u636e\u96c6\uff1f(cross validation: train & validation & test)

Data split idea * 3

P89\uff08cs231n also\uff09

\u4e00\u79cd\u8fdd\u548c\u611f\uff0cvalidation \u53c2\u4e0e\u81ea\u52a8\u53cd\u9988\uff0ctest \u96be\u9053\u4e0d\u7b97\u4e00\u79cd\u4eba\u4e3a\u53cd\u9988\u5417\uff1f

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6b63\u5219\u5316","title":"\u6b63\u5219\u5316","text":"

\u589e\u52a0\u7ea6\u675f\u4ee5\u51cf\u5c11 over fit

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#dropout","title":"Dropout","text":"

\u8bad\u7ec3\u65f6\u5ffd\u7565\u4e00\u90e8\u5206\u54cd\u5e94\uff0c\u6d4b\u8bd5\u7684\u65f6\u5019\u4ecd\u7136\u4f7f\u7528

\u65ed\u5b9d\uff1aDropout\u8bf4\u7684\u7b80\u5355\u4e00\u70b9\u5c31\u662f\uff1a\u6211\u4eec\u5728\u524d\u5411\u4f20\u64ad\u7684\u65f6\u5019\uff0c\u8ba9\u67d0\u4e2a\u795e\u7ecf\u5143\u7684\u6fc0\u6d3b\u503c\u4ee5\u4e00\u5b9a\u7684\u6982\u7387p\u505c\u6b62\u5de5\u4f5c\uff0c\u8fd9\u6837\u53ef\u4ee5\u4f7f\u6a21\u578b\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u56e0\u4e3a\u5b83\u4e0d\u4f1a\u592a\u4f9d\u8d56\u67d0\u4e9b\u5c40\u90e8\u7684\u7279\u5f81\u3002

\u7edf\u8ba1\u4e0a\u7b49\u6548\u4e8e L2

\u6211\uff1a\u56e0\u4e3a\u6bcf\u4e2a\u70b9\u90fd\u6709\u53ef\u80fd\u6982\u7387\u6027\u5931\u6548\uff0c\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u8fd9\u4e5f\u8981\u6c42\u67d0\u4e00\u4e2a\u7279\u5f81\u7684contributes\u4f1a\u88ab\u201c\u5206\u644a\u201d\u5f00\u6765\uff0c\u6240\u4ee5\u6548\u679c\u4e0a\u6709\u70b9\u50cfL2\u7684\u90a3\u79cd\u8ba9\u6743\u91cd\u66f4\u5c0f

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6570\u636e\u589e\u5e7f-data-augmentation","title":"\u6570\u636e\u589e\u5e7f Data augmentation","text":"

overfit \u53ca\u6570\u636e\u592a\u5c11\u8bad\u7ec3\u592a\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5bf9\u5df2\u6709\u6570\u636e\u53d8\u6362\u6765\u201c\u9020\u201d\u4e00\u4e9b\u6570\u636e\u51fa\u6765\uff0c\u6bd4\u5982\u7ffb\u8f6c\u3001\u62c9\u4f38\u2026\u2026

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#batch-normalization","title":"Batch Normalization","text":"

\u5bf9\u591a\u4e2a channel \u5bf9\u7ed3\u679c\u8fdb\u884c\u5f52\u4e00\u5316\u64cd\u4f5c

Reduce internal covariate shift\uff0c\u4ee5\u51cf\u5c11 channal \u4e4b\u95f4\u7684\u53d1\u6563\u6027\uff0c\u66f4\u7a33\u5b9a\u66f4\u6536\u655b

For more: https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#deep-learning-frameworks","title":"Deep Learning Frameworks","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec09/#network-architectures","title":"Network Architectures","text":"

\u65e9\u671f\u4e0d\u53d7\u6b22\u8fce\uff1a\u6548\u679c\u5dee & \u53ef\u63a5\u53d7\u6027\u5dee

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#resnet","title":"ResNet","text":"

\u5047\u8bbe\u6570\u636e\u91cf\u591f\u5927\uff0c\u662f\u4e0d\u662f\u5c42\u6570\u8d8a\u591a\u8d8a\u597d\uff1f

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#densenet","title":"DenseNet","text":"

\u66f4\u52a0\u7a20\u5bc6\u7684\u94fe\u63a5\uff0c\u672c\u5c42\u53d6\u51b3\u4e8e\u524d\u9762\u6240\u6709\u5c42

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#mobilenets","title":"MobileNets","text":"

\u901f\u5ea6\u5feb

NAS: Neural Architecture Search \u81ea\u52a8\u5316\u7f51\u7edc\u7ed3\u6784\u8bbe\u8ba1\uff0clearning to learn

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#why-deep-learning-is-powerful","title":"why deep learning is powerful?","text":"

End-to-end learning\uff0c\u7aef\u5230\u7aef\u5b66\u4e60

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/","title":"Lecture 10 | Recognition","text":"

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

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

\u4e8c\u7ef4\u56fe\u50cf\u8bc6\u522b(Recognition)\u4e0b\u6709\u5f88\u591a\u4efb\u52a1\uff0c\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#semantic-segmentation","title":"Semantic segmentation","text":"

\u6bcf\u4e2a\u50cf\u7d20\u5c5e\u4e8e\u54ea\u4e2a\u7c7b\u522b\u8fd9\u79cd\u4fe1\u606f\u53eb\u8bed\u4e49\u4fe1\u606f\u3002

\u6700\u6734\u7d20\u7684\u505a\u6cd5\u662f sliding window\uff0c\u53d6\u51fa\u4e00\u4e2a window \u653e\u8fdb\u5206\u7c7b\u673a\u5f97\u5230\u7ed3\u679c\uff0c\u4f46\u662f\u663e\u7136\u7531\u4e8e window \u5305\u542b\u7684\u4fe1\u606f\u592a\u5c11\uff0c\u800c\u4e14\u6548\u7387\u592a\u4f4e\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u975e\u5e38 naive\u3002

\u73b0\u5728\u6807\u51c6\u7684\u505a\u6cd5\u662f\u5168\u5377\u79ef\u7f51\u7edc(Fully Convolutional Network)

\u5c40\u9650\u6027\uff1a

\u6539\u8fdb\uff1a

\u4f46\u662f\u7531\u4e8e\u6211\u4eec\u6700\u540e\u5e0c\u671b\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u548c\u539f\u56fe\u4e00\u6837\u5927\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6709\u5411\u4e0b\u91c7\u6837\u5c31\u80af\u5b9a\u4f1a\u6709\u5411\u4e0a\u91c7\u6837\uff08\u56de\u5fc6\uff1a\u63d2\u503c\uff09\u3002

\u56fe\u50cf\u5411\u4e0a\u91c7\u6837\u4ee5\u540e\u53d8\u5927\u4ee5\u540e\u53c8\u5377\u79ef\uff0c\u8fd9\u4e2aTransposed convolution

ppt P13

\u4f46\u662f\u5f88\u663e\u7136\uff0c\u5728\u53d8\u5c0f\u53d8\u5927\u7684\u8fc7\u7a0b\u4e2d\u80af\u5b9a\u6709\u4fe1\u606f\u635f\u5931\u3002\u6240\u4ee5\u73b0\u5728\u4e00\u4e2a\u6bd4\u8f83\u6d41\u884c\u7684\u505a\u6cd5\u662f U-Net\uff0c\u4e5f\u5c31\u662f\u5927\u91cf\u5e94\u7528 skip-connection\u3002

ppt P14 https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

DeepLab P15

\u8003\u8651\u76f8\u90bb\u50cf\u7d20\u4e4b\u95f4\u7684\u5173\u8054\u6027\uff0c\u4f7f\u7528 CRF(Conditional random field) \u4f18\u5316 P16

\u9a6c\u53ef\u592b\u968f\u673a\u573a\uff1f

Unary potential: \u4f53\u73b0\u81ea\u5df1\u7684\u7279\u6027

Pairwise potential: \u4f53\u73b0\u5173\u8054\u6027

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#\u8861\u91cf\u6307\u6807-evaluation-metric-per-pixel-intersection-over-union-iou","title":"\u8861\u91cf\u6307\u6807 Evaluation metric: Per-pixel Intersection-over-union (IoU)","text":"

\\(IoU=\\frac{ \\text{Ground truth \u548c prediction \u7684\u4ea4\u96c6\u9762\u79ef} }{ \\text{Ground truth \u548c prediction \u7684\u5e76\u96c6\u9762\u79ef} }\\) P19

mIoU \u6307\u7684\u662f\u5206\u51fa\u6765\u7684\u4e0d\u540c\u7c7b\u522b\u7684 mean IoU

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#object-detection","title":"Object detection","text":"

Bounding box (bbox)

\u90a3\u4e48\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u5148\u5047\u8bbe\u4e00\u5171\u53ea\u6709 1 \u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6b64\u65f6\u548c\u5206\u7c7b\u4efb\u52a1\u662f\u975e\u5e38\u63a5\u8fd1\u7684\uff0c\u53ea\u9700\u8981\u518d\u989d\u5916\u6c42\u89e3\u4e00\u4e2a\u7a97\u53e3\u4f4d\u7f6e\u5373\u53ef\u3002

\u90a3\u4e48\u591a\u4e2a\u7a97\u53e3\u5462\uff1f

\u89e3\u51b3\u529e\u6cd5\u8fd8\u662f\u6ed1\u52a8\u7a97\u53e3\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e4b\u524d\u7684\uff0c\u6211\u4eec\u73b0\u5728\u91c7\u7528\u7684\u65b9\u6cd5\u57fa\u672c\u4e0a\u4e5f\u662f\u57fa\u4e8e\u6ed1\u52a8\u7a97\u53e3\u5c55\u5f00\u7684\u3002\u800c\u5728\u8fd9\u79cd\u8bed\u5883\u4e0b\uff0c\u8fd9\u6837\u7684\u4e00\u4e2a\u6ed1\u52a8\u7a97\u53e3\u88ab\u79f0\u4e3a\u4e00\u4e2a\u63d0\u8bae(proposal)\u3002

\u4f46\u662f\u663e\u7136\uff0c\u4f7f\u7528\u6700\u6734\u7d20\u7684\u6ed1\u52a8\u7a97\u53e3\u4f1a\u5bfc\u81f4\u201c\u63d0\u8bae\u201d\u8fc7\u591a\uff0c\u5bfc\u81f4\u6548\u7387\u592a\u4f4e\u3002\u6240\u4ee5\u6211\u4eec\u8981\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002

\u4e00\u822c\u8fd9\u4e9b\u4f18\u5316\u7684\u65b9\u6cd5\u90fd\u662f\u542f\u53d1\u5f0f(heuristics)\u7684\u505a\u6cd5\uff0c\u4f8b\u5982 over-segmentation\uff0c

\u800c\u8fd9\u7c7b\u65b9\u6cd5\u5c31\u662f R-CNN (region proposal & CNN) P36

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#evaluation-metric","title":"Evaluation metric","text":"

\u5bf9\u4e8e\u5355\u4e2a\u7269\u4f53\uff0c\u4ecd\u7136\u662f IoU

P39

\u4e3a\u4e86\u8bc4\u4ef7\u9884\u6d4b\u7ed3\u679c\u7684\u6b63\u786e\u6027\uff0c\u6211\u4eec\u9700\u8981\u4e3a\u5b83\u8bbe\u7f6e\u4e00\u4e2a\u9608\u503c\u3002

\u800c\u5bf9\u4e8e\u591a\u4e2a\u7269\u4f53\uff0c\u5219\u4e0d\u90a3\u4e48\u7b80\u5355\uff1aP42

\uff08\u56de\u5fc6\u7edf\u8ba1\u5b66\u5185\u5bb9\uff09

positive: \u80af\u5b9a\u7684\u5047\u8bbe P

negative: \u5426\u5b9a\u7684\u5047\u8bbe N

true: \u5047\u8bbe\u662f\u6210\u7acb\u7684 T

false: \u5047\u8bbe\u662f\u9519\u8bef\u7684 F

\u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u4e24\u4e2a\u6807\u51c6\u6765\u8054\u5408\u5224\u65ad\u6548\u679c\u3002

\u7cbe\u5ea6 Precision = TP/(TP+FP)\uff1a\u63cf\u8ff0\u7ed9\u5b9a\u7684 bbox \u91cc\u6709\u591a\u5c11\u662f\u6b63\u786e\u7684

\u53ec\u56de\u7387 Recall = TP/(TP+FN)\uff1a\u63cf\u8ff0\u6240\u6709\u5bf9\u8c61\u4e2d\uff0c\u88ab\u6211\u4eec\u8bc6\u522b\u51fa\u6765\u7684\u6709\u591a\u5c11

\u4e00\u822c\u6765\u8bf4\uff0c\u8fd9\u4fe9\u4e1c\u897f\u6709\u4e00\u4e2a trade-off\u3002\uff08\u6982\u7edf\u91cc\u5e94\u8be5\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\uff09

https://en.wikipedia.org/wiki/Precision_and_recall

\u800c\u6700\u7ec8\u7684\u8861\u91cf\u65b9\u6cd5\uff0c\u662f Mean Average Precision (mAP)\u3002

  1. Run object detector on all test images
  2. For each category, compute Average Precision
  3. (AP) = area under Precision vs Recall Curves

PPT p52

\u5148\u505a\u6240\u6709\u7c7b\u522b\u7684 AP\uff0c\u7136\u540e\u53d6\u5e73\u5747\u5c31\u662f mAP

mAP@threshold = ...

COCOmAP = average(mAP@threshold_i), for i \\in {0.5, 0.55, 0.6, \u2026, 0.95}

Non-Max Suppression

\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u6211\u6709\u53ef\u80fd\u8bc6\u522b\u51fa\u597d\u51e0\u4e2a\u8bc6\u522b\u540c\u4e00\u4e2a\u7269\u4f53\u7684 bbox\uff0c\u6240\u4ee5\u6211\u53ef\u4ee5\u8003\u8651\u8bbe\u8ba1\u4e00\u79cd\u7b97\u6cd5\u51cf\u5c11\u8fd9\u79cd\u8bc6\u522b\u3002

\u7b80\u5355\u6765\u8bf4\uff0c\u505a\u6cd5\u5c31\u662f\u627e score \u6700\u5927\u7684\uff0c\u7136\u540e\u770b\u5176\u4ed6 bbox \u548c\u8fd9\u4e2a bbox \u7684 IoU\uff0c\u5927\u4e8e\u4e00\u5b9a\u6743\u91cd\u65f6\uff0c\u8ba4\u4e3a\u5b83\u4eec\u662f\u4e00\u81f4\u7684\uff0c\u5c31\u53ef\u4ee5\u628a\u8f83\u5c0f\u7684\u90a3\u4e2a\u5220\u6389\u4e86\u3002

Fast R-CNN

RoI pool \uff08\u6ca1\u542c\u61c2\uff0c\u6574\u7406\u7684\u65f6\u5019\u518d\u4ed4\u7ec6\u5b66\u4e00\u4e0b\uff09

Faster R-CNN

\u7528\u7f51\u7edc\uff08Region Proposal Network, RPN\uff09\u751f\u6210\u63d0\u8bae\u9009\u6846\uff0c

\u951a\u70b9 anchor\uff1a

\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\uff0c\u951a\u70b9\u662f\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\u7684\u9884\u5b9a\u4e49\u6846\u6216\u611f\u5174\u8da3\u533a\u57df\u3002\u951a\u70b9\u80fd\u591f\u5e2e\u52a9\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u8bc6\u522b\u56fe\u50cf\u4e2d\u5b58\u5728\u7684\u7269\u4f53\u53ca\u5176\u4f4d\u7f6e\uff0c\u4ece\u800c\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u7684\u51c6\u786e\u6027\u3002\u951a\u70b9\u901a\u5e38\u7531\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u957f\u5bbd\u6bd4\u548c\u5c3a\u5ea6\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u56e0\u7d20\u51b3\u5b9a\u4e86\u5b83\u4eec\u7684\u5927\u5c0f\u548c\u5f62\u72b6\u3002\u5728\u8bad\u7ec3\u671f\u95f4\uff0cCNN\u5b66\u4e60\u9884\u6d4b\u76f8\u5bf9\u4e8e\u8fd9\u4e9b\u951a\u70b9\u7684\u7269\u4f53\u7684\u4f4d\u7f6e\u548c\u5927\u5c0f\u3002\u4f7f\u7528\u951a\u70b9\u53ef\u4ee5\u68c0\u6d4b\u4e0d\u540c\u5927\u5c0f\u548c\u5bbd\u9ad8\u6bd4\u7684\u7269\u4f53\uff0c\u5e76\u6709\u52a9\u4e8e\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u5728\u590d\u6742\u573a\u666f\u4e0b\u7684\u51c6\u786e\u6027\u3002----chatGPT

RPN \u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u628a\u751f\u6210\u9009\u6846\u95ee\u9898\u8f6c\u5316\u4e3a\u6253\u5206\u95ee\u9898\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u7ed9\u6bcf\u4e2a\u50cf\u7d20\u6253\u5728\u8be5\u4f4d\u7f6e\u6709\u4e00\u4e2a\u7279\u5b9a size \u7684\u6846\u7684\u53ef\u80fd\u6027\u7684\u5206\u3002

\u4e8c\u9636\u6bb5\u5bf9\u8c61\u68c0\u6d4b\u7b26 two-stage object detector

P76 \u5404\u79cd\u65b9\u6cd5\u7684\u6548\u679c\u6392\u5e8f\u3002

\u4e00\u79cd\u5bf9 two-stage object detector \u7684\u6539\u8fdb\u662f single-stage object detector\uff0c\u5927\u6982\u5c31\u662f\u5728\u505a RPN \u7684\u540c\u65f6\u53bb\u9884\u6d4b\u8fd9\u4e2a\u6846\u6807\u8bb0\u7684\u662f\u67d0\u4e2a\u7c7b\u522b\u7684\u6982\u7387\u3002

single-stage \u7684\u4ee3\u8868\u6027\u5de5\u4f5c\uff1aYOLO

two-stage v.s. single-stage

\u4f46\u662f\u6211\u4eec\u4e0a\u9762\u7684\u5de5\u4f5c\u90fd\u6ca1\u8003\u8651\u5c3a\u5ea6\u53d8\u5316\uff0cFeature pyramid network \u5728\u8fd9\u65b9\u9762\u63d0\u51fa\u4e86\u89e3\u51b3\u65b9\u6848\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#instance-segmentation","title":"Instance segmentation","text":"

Faster R-CNN + additional head

Mask R-CNN

Deep snake

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#panoptic-segmentation","title":"Panoptic segmentation","text":"

Microsoft COCO dataset

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#human-pose-estimation","title":"Human pose estimation","text":"

keypoints

represent joint location as the heatmap // hourglass networks

Top-down: - Detect humans and detect keypoints in each bbox - Example: Mask R-CNN - \u6700\u5927\u7684\u95ee\u9898\u8fd8\u662f\u6162

Bottom-up: - Detect keypoints and group keypoints to form humans - Example: OpenPose \u5148\u627e kpts\uff0c\u518d\u5229\u7528 Affinity Fields \u628a\u5c5e\u4e8e\u4e00\u4e2a\u4eba\u7684 kpts \u5408\u5728\u4e00\u8d77\u3002

Top-down is generally more accurate Bottom-up is faster\uff0c\u800c\u4e14\u5728\u906e\u6321\u60c5\u51b5\u4e0b\u4e5f\u6709\u5b83\u7684\u4f18\u52bf

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#optical-flow","title":"Optical flow","text":"

\u5149\u6d41

video classification

\u4e00\u4e2a\u505a\u6cd5\u662f\u628a\u89c6\u9891\u5f53\u4f5c\u4e00\u4e2a 3d \u56fe\u50cf\u53bb\u505a\uff0c\u5373 3D CNN\u3002\u4f46\u662f\u6570\u636e\u7ef4\u5ea6\u975e\u5e38\u5927\u3002

Temporal action localization

Spatial-temporal detection

\u505a\u6cd5\u4e5f\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a 3D \u7684 R-CNN \u53bb\u505a\u3002

Multi-object tracking

\u5bf9\u6bcf\u4e00\u5e27\u505a\u7269\u4f53\u68c0\u6d4b\uff0c\u7136\u540e\u5728\u6bcf\u4e00\u5e27\u4e4b\u95f4\u505a\u5173\u8054\u5339\u914d\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/","title":"Lecture 11 | 3D Deep Learning","text":"

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

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

Deep Learning for 3D reconstruction

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#feature-matching","title":"Feature matching","text":"

recap: SfM // Colmap

use deep learning to improve feature matching

\u4f20\u7edf\u65b9\u6cd5\u7684\u7f3a\u70b9\u5c31\u662f\u56e0\u4e3a\u8fd9\u4e9b\u65b9\u6cd5\u90fd\u662f handcrafted \u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7528 deep learning \u6765\u589e\u5f3a\u6548\u679c\u3002

example: SuperPoint\u3001SuperGlue

\u63cf\u8ff0\u503c\uff1a

  1. contrastive loss
  2. triplet loss

\u5b9e\u9645\u4e0a\u672c\u8d28\u7c7b\u4f3c\uff0c\u6548\u679c\u76f8\u8fd1

\u4e3b\u6d41\u7528 MVS \u6765\u751f\u6210\u8bad\u7ec3\u6570\u636e

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#object-pose-estimation","title":"Object Pose Estimation","text":"

\u672c\u8d28\u4e0a\u662f\u5728\u8ba8\u8bba\u7269\u4f53\u5728\u91cd\u5efa\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u548c\u76f8\u673a\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u7684\u53d8\u6362\u5173\u7cfb\u3002

PnP

\u53ef\u662f\u96be\u5c31\u96be\u5728\uff0c\u5982\u4f55\u5bfb\u627e 3D-2D \u7684\u5173\u7cfb\u5462\uff1f

\u4e00\u4e2a idea \u662f\uff0c\u9996\u5148\u5f97\u5230\u4e00\u4e2a\u8f83\u597d\u7684\u91cd\u5efa\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u91cd\u5efa\u6a21\u578b\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4ece\u522b\u7684\u601d\u8def\u6765\u770b\u8fd9\u4ef6\u4e8b\u3002

pose refinement methods

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#human-pose-estimation","title":"Human Pose Estimation","text":"

(Markerless) MoCap

Monocular 3D Human Pose Estimation (eg. Vnet)

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#depth-estimation","title":"Depth Estimation","text":"

MVSNet

MVS

\u79bb\u6563\u8868\u793a\u3001\u9690\u5f0f\u8868\u793a\uff08\u7528\u4e00\u4e2a\u7f51\u7edc\u6765\u8868\u793a\u4e00\u4e2a\u51fd\u6570 Implicit Neural Representations\uff0c\u4ee3\u8868\uff1aNeRF\uff09

Replacing density field in NeRF by SDF: NeuS

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#single-image-to-3d","title":"Single Image to 3D","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec11/#deep-learning-for-3d-understanding","title":"Deep learning for 3D understanding","text":"

\u8ba1\u7b97\u5f00\u9500\u5f88\u5927

\u8fd1\u51e0\u5e74\u63d0\u51fa\u7684\u89e3\u51b3\u65b9\u6848\uff1aSparse ConvNets

Octree \u516b\u53c9\u6811\uff0c\u7a7a\u95f4\u5212\u5206

\u7a00\u758f\u5377\u79ef\uff0c\u53ea\u6709\u6709\u503c\u7684\u5730\u65b9\u8fdb\u884c\u5377\u79ef

\u7531\u4e8e\u5377\u79ef\u7b49\u64cd\u4f5c\u662f\u5efa\u7acb\u5728\u7f51\u683c\u4e0a\u7684\uff0c\u800c\u70b9\u4e91\u5e76\u4e0d\u5b9a\u4e49\u5728\u7f51\u683c\u4e0a\uff0c\u6240\u4ee5\u5bf9\u70b9\u4e91\u8fdb\u884c\u5377\u79ef\u5219\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u65b9\u6cd5\u3002

\u4e00\u4e2a\u76f8\u5173\u5de5\u4f5c\u662f PointNet\uff0c\u4e13\u95e8\u7528\u5728\u5bf9\u70b9\u4e91\u4e0a\u3002\u8fd8\u6709 PointNet++

3D Semantic Segmentation

3D Object Detection

3D Instance Segmentation

PointRCNN

Frustum PointNets

\u6570\u636e\u96c6\uff1aShapeNet, PartNet,SceneNet , ScanNet

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/","title":"Lecture 12 | Computational Photography 1","text":"

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

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

What's \u8ba1\u7b97\u6444\u5f71\uff1f

...

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#high-dynamic-range-imaging-hdr","title":"High Dynamic Range Imaging (HDR)","text":"

\u6211\u4eec\u5e0c\u671b\u4eae\u7684\u548c\u6697\u7684\u5730\u65b9\u7ec6\u8282\u90fd\u5f88\u4e30\u5bcc

\u66dd\u5149 exposure = Gain\u589e\u76ca * Irradiance\u8f90\u7167\u5ea6 * Time\u66dd\u5149\u65f6\u95f4

\u5206\u522b\u53d6\u51b3\u4e8e\u2026\u2026

Dynamic range

The ratio between the largest and smallest values of a certain quantity

HRD: \u4e0d\u540c\u4eae\u5ea6\u90fd\u62cd\u4e00\u4e9b\uff0c\u7136\u540e\u5408\u6210

12 to 8 -> tone mapping

Gamma compression

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#deblurring","title":"Deblurring","text":"

\u6a21\u7cca\u7684\u4e24\u4e2a\u4e3b\u8981\u539f\u56e0\uff1adefocus and motion blur

blurred image = clear image * blur kernel

deblurring = deconvolution

inverse filter

wiener filter

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#colorization","title":"Colorization","text":"

\u6700\u5173\u952e\u7684\u95ee\u9898\u662f\uff0c\u5982\u4f55\u51b3\u5b9a\u4e0a\u7684\u989c\u8272

\u4e3b\u8981\u6709\u4e24\u7c7b\u65b9\u6cd5\uff1a

  1. sample-based colorization
  2. interactive colorization
"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#sample-based","title":"Sample-based","text":"

...

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#interactive","title":"Interactive","text":"

...

\u5bf9\u4e8e\u89c6\u9891

Colorful Image Colorization

GAN (Generative Adversarial Network)

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#more-image-synthesis-tasks","title":"more Image synthesis tasks","text":"

GAN \u7684\u6539\u8fdb\uff1aCycle-GAN\uff0c\u89e3\u51b3\u4e86\u7f3a\u5c11\u6210\u5bf9\u7684\u8bad\u7ec3\u6570\u636e\u7684\u95ee\u9898

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#super-resolution","title":"Super Resolution","text":"

up sampling

bi-cubic

super resolution using GAN

"},{"location":"cour_note/D2QD_Intro2CV/Lec13/","title":"Lecture 13 | Computational Photography 2","text":"

\u7ea6 90 \u4e2a\u5b57

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec13/#image-based-rendering","title":"Image-based Rendering","text":"

rendering: from 3D models to images.

Image-based Rendering: images -> 3D Models -> novel views.

representations:

surface-based representations

volume-based representations

\u81ea\u7531\u89c6\u70b9\u89c6\u9891

"},{"location":"cour_note/D3QD_OperatingSystem/","title":"\ud83d\udc8e \u64cd\u4f5c\u7cfb\u7edf | Operating System","text":"

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

\u8bfe\u7a0b\u4fe1\u606f

\u5206\u6570\u6784\u6210

\u7b14\u8bb0\u53c2\u8003

\u672c\u8bfe\u7a0b\u7684\u7b14\u8bb0\u4e3b\u8981\u53c2\u8003\u4e86\u5982\u4e0b\u8d44\u6599\uff1a

list

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0-brief/","title":"[\u6559\u5b66\u7248] Unit 0: \u603b\u89c8 | Overview","text":"

\u7ea6 3594 \u4e2a\u5b57 23 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 12 \u5206\u949f

\u4e24\u4e2a\u4efb\u52a1
  1. \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u4e00\u4e2a\u8f83\u4e3a\u62bd\u8c61\u7684\u4ecb\u7ecd\uff0c\u540c\u65f6\u5efa\u7acb\u8d77\u6574\u95e8\u8bfe\u7a0b\u7684\u6846\u67b6\uff0c\u65b9\u4fbf\u8bfb\u8005\u5728\u4e4b\u540e\u7684\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u80fd\u6709\u4e00\u4e2a\u6bd4\u8f83\u603b\u4f53\u7684\u8ba4\u8bc6\uff0c\u80fd\u5e26\u7740\u76ee\u7684\u53bb\u5b66\u4e60\u5177\u4f53\u7684\u77e5\u8bc6\uff1b
  2. \u4ecb\u7ecd\u4e00\u4e9b\u6bd4\u8f83\u57fa\u7840\u7684\u5185\u5bb9\uff0c\u6216\u662f\u4e00\u4e9b\u6bd4\u8f83\u7410\u788e\u3001\u4ec5\u9700\u4e86\u89e3\u7684\u5185\u5bb9\uff1b
\u201c\u5b9a\u4e49\u4e0d\u5b58\u5728\u4e86\u201d \u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0 \u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf \u2460 \u4ece\u804c\u80fd\u4e0a\u770b

\u8d44\u6e90\uff1aCPU\u3001\u5185\u5b58\u3001\u8bbe\u5907\u2026\u2026\u2026

\u2461 \u4ece\u5b58\u5728\u4e0a\u770b

\u5185\u6838(kernel)\u2014\u2014\u81ea\u8ba1\u7b97\u673a\u5f00\u673a\u540e\u5c31\u4e0d\u505c\u5728\u8fd0\u884c\uff08\u6211\u4eec\u5b66\u7684\u57fa\u672c\u90fd\u662f kernel \u7684\u4e1c\u897f\uff09\u3002

\u603b\u7ed3

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)

\u5982\u4f55\u8bc4\u4ef7\u64cd\u4f5c\u7cfb\u7edf

\u6ce8\u610f

\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

\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1 \u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784 \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)

\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

\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

\u2462 \u96c6\u7fa4\u7cfb\u7edf(Cluster System)

\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1

\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\uff0c\u968f\u7740\u9700\u6c42\u4e0d\u65ad\u590d\u6742\uff0c\u4f7f\u7528\u7684\u6280\u672f\u4e5f\u4e0d\u65ad\u53d1\u5c55\u3002

\u2460 \u6279\u5904\u7406\u7cfb\u7edf\u9636\u6bb5 \u80cc\u666f 1

\u4eba\u5de5\u901f\u5ea6\u4e25\u91cd\u9650\u5236\u4e86\u8ba1\u7b97\u673a\u7684\u5de5\u4f5c\u6548\u7387\u3002

\u2776 \u5355\u9053\u6279\u5904\u7406\u9636\u6bb5

\u4e24\u4e2a\u5173\u952e\u8bcd\uff1a\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

\u80cc\u666f 2 \u2777 \u591a\u9053\u6279\u5904\u7406\u9636\u6bb5

\u5173\u952e\u8bcd\uff1a\u201c\u591a\u9053(Multiprogramming)\u201d\uff0c\u5373\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002

\u4e0d\u8ba9 CPU \u95f2\u4e0b\u6765 -> \u8ba9\u5b83\u5148\u53bb\u505a\u4e0b\u4e00\u4ef6\u4e8b\u3002

\u5b8f\u89c2\u5e76\u53d1\uff0c\u5fae\u89c2\u4e32\u884c\u3002\uff08\u533a\u5206\u5e76\u53d1\u548c\u5e76\u884c\uff01\uff09

\u6211\u4eec\u53ef\u4ee5\u7528\u7518\u7279\u56fe\u6765\u53ef\u89c6\u5316\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u7684\u7b56\u7565\uff08\u4e00\u79cd\u5e38\u89c1\u7684\u9898\u578b\uff09\u3002\u4ee5\u4e0b\u9762\u7684\u9898\u76ee\u4e3a\u4f8b\uff0c\u6211\u4eec\u6765\u5b9e\u8df5\u4e00\u4e0b\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e24\u4e2a\u7a0b\u5e8f A \u548c B\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5206\u522b\u72ec\u7acb\u7684\u8bbe\u5907 X \u548c Y\uff0c\u4e14\u6211\u4eec\u53ea\u6709\u4e00\u4e2a CPU\uff1a

\u8bf7\u8ba8\u8bba\uff1a

  1. \u5728\u5355\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\u5148\u6267\u884c A \u518d\u6267\u884c B\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f
  2. \u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f\u8bf7\u7ed9\u51fa\u7518\u7279\u56fe\u3002

\u5728\u5355\u9053\u7a0b\u5e8f\u4e0b\u6267\u884c\uff0c\u5373\u6309\u987a\u5e8f\u6267\u884c A \u548c B\uff0cCPU \u7684\u5229\u7528\u7387\u5373\u5b9e\u9645 CPU \u4f7f\u7528\u65f6\u95f4\u9664\u4ee5\u5b8c\u6210\u4efb\u52a1\u7684\u603b\u65f6\u95f4\uff0c\u56e0\u6b64\uff1a

\\[ U = \\frac{(10+5+10)+(10+5)}{(10+5+5+10+10)+(10+10+5+5+10)} = \\frac{40}{80} = 50\\% \\]

\u800c\u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0c\u6211\u4eec\u5f97\u5230\u5982\u4e0b\u7518\u7279\u56fe\uff1a

gantt\n    title Multiprogramming\n    dateFormat ss\n    axisFormat %S\n\n    section Program A\n    CPU :a,  00,  10\n    X   :b,  10,  15\n    CPU :c,  20,  25\n    Y   :d,  25,  35\n    CPU :e,  35,  45\n\n    section Program B\n    X   :g,  00,  10\n    CPU :h,  10,  20\n    Y   :i,  20,  25\n    CPU :j,  25,  30\n    Y   :k,  35,  45

\u7531\u4e8e Mermaid \u7684\u9650\u5236\uff0c\u6211\u73b0\u5728\u662f\u628a\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u4efb\u52a1\u9519\u5f00\u753b\u7684\uff0c\u5b9e\u9645\u4e0a\u505a\u9898\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u753b\u6210\u4e24\u884c\u3002

\u8981\u70b9\u5c31\u662f\u7eb5\u5411\u4e0d\u80fd\u540c\u65f6\u51fa\u73b0\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u4f8b\u5982 18s \u65f6\u4e0d\u80fd A \u548c B \u90fd\u7528 CPU\uff0c\u6240\u4ee5 A \u9700\u8981\u7b49 B \u7528\u5b8c CPU \u518d\u4f7f\u7528\u3002

\u73b0\u5728\u6211\u4eec\u518d\u6765\u7edf\u8ba1 CPU \u7684\u5229\u7528\u7387\uff1a

\\[ U = \\frac{10+10+5+5+10}{45} = \\frac{40}{45} = 88.89\\% \\]

\u7531\u4e8e\u5f15\u5165\u4e86\u591a\u9053\u6280\u672f\uff0c\u7cfb\u7edf\u590d\u6742\u7a0b\u5ea6\u4e0a\u5347\u3002

\u80cc\u666f 3

\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

\u2461 \u5206\u65f6\u7cfb\u7edf\u9636\u6bb5

\u300a\u5341\u4e07\u4e2a\u51b7\u7b11\u8bdd\u300b\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

\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1

\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

\u5b8f\u5185\u6838

\u5b8f\u5185\u6838(Monolithic-Kernels)\u4e5f\u53eb\u5355\u5185\u6838\u6216\u5927\u5185\u6838\u3002

\u4f18\u52bf\uff1a\u64cd\u4f5c\u7cfb\u7edf\u6548\u7387\u6781\u9ad8\u3002

\u52a3\u52bf\uff1a\u5927\u91cf\u590d\u6742\u7684\u529f\u80fd\u4e92\u76f8\u8026\u5408 -> \u7ef4\u62a4\u56f0\u96be\u3001\u4e00\u635f\u5177\u635f\uff1b

\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

\u7406\u60f3\uff1a\u4f4e\u8026\u5408\uff0c\u9636\u6bb5\u6027\u5f00\u53d1\u3002

\u73b0\u5b9e\uff1a\u6548\u7387\u4f4e\u3001\u96be\u8bbe\u8ba1\u3002

\u5fae\u5185\u6838

\u5fae\u5185\u6838(Micro-Kernels)\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

\u4f18\u52bf\uff1a\u89c4\u6a21\u51cf\u5c0f,\u8026\u5408\u964d\u4f4e -> \u66f4\u65b9\u4fbf\u7ef4\u62a4\uff0c\u53ef\u9760\u6027\u589e\u52a0\u3002

\u52a3\u52bf\uff1a\u6548\u7387\u4f4e\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

\u8fa8\u6790

\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\uff1a\u4f4e\u8026\u5408 -> \u5e76\u884c\u5f00\u53d1\uff0c\u597d\u7ef4\u62a4\u3002

\u73b0\u5b9e\uff1a\u8bbe\u8ba1\u5341\u5206\u56f0\u96be\uff0c\u96be\u4ee5\u9012\u8fdb\u5f0f\u5f00\u53d1\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

\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406 \u4e2d\u65ad

\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

\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e2d\u65ad\u4e00\u65e6\u53d1\u751f\u5c31\u7acb\u523b\u88ab\u89e3\u51b3\uff0c\u4f46\u662f\u4e2d\u65ad\u5904\u7406\u4e5f\u540c\u6837\u9700\u8981\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u65ad\u4e5f\u6709\u53ef\u80fd\u4ea7\u751f\u51b2\u7a81\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u9700\u8981\u4e00\u7cfb\u5217\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

  1. \u5206\u7ea7\u673a\u5236\uff1b
  2. \u5c4f\u853d\u673a\u5236\uff1b

\u4e00\u79cd\u6bd4\u8f83\u666e\u901a\u7684\u8bbe\u8ba1\uff1a\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\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\uff08\u4e0a\u4e0b\u6587\uff09\uff0c\u4ee5\u4fbf\u5b8c\u6210\u4e2d\u65ad\u5904\u7406\u540e\u6062\u590d\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\u3002

\u8ba1\u65f6\u5668

\u8ba1\u65f6\u5668(timer)\uff1a\u56fa\u5b9a\u9891\u7387\u7684\u65f6\u949f + \u8ba1\u6570\u5668\u3002

\u7279\u6743\u6a21\u5f0f \u9694\u79bb

\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\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

\u9694\u79bb\u800c\u975e\u9694\u7edd

\u8fd9\u4e9b\u9700\u6c42\u5f80\u5f80\u662f\u53ef\u4ee5\u88ab\u62bd\u8c61\u7684\u3001\u88ab\u5c01\u88c5\u7684\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.

\u7cfb\u7edf\u8c03\u7528

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 \u7531\u201c\u73af\u5883\u201d\u63d0\u4f9b\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u8fd0\u884c\u65f6\u73af\u5883(run-time environment, RTE)\u3002

\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

\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668

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

  1. \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
  2. \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)\uff1b

\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

\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/","title":"Unit 0: \u603b\u89c8 | Overview","text":"

\u7ea6 8917 \u4e2a\u5b57 23 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 30 \u5206\u949f

\u5bfc\u8bed

\u672c\u5355\u5143\u4e3b\u8981\u6709\u4e24\u4e2a\u4efb\u52a1\uff1a

  1. \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u4e00\u4e2a\u8f83\u4e3a\u62bd\u8c61\u7684\u4ecb\u7ecd\uff0c\u540c\u65f6\u5efa\u7acb\u8d77\u6574\u95e8\u8bfe\u7a0b\u7684\u6846\u67b6\uff0c\u65b9\u4fbf\u8bfb\u8005\u5728\u4e4b\u540e\u7684\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u80fd\u6709\u4e00\u4e2a\u6bd4\u8f83\u603b\u4f53\u7684\u8ba4\u8bc6\uff0c\u80fd\u5e26\u7740\u76ee\u7684\u53bb\u5b66\u4e60\u5177\u4f53\u7684\u77e5\u8bc6\uff1b
  2. \u4ecb\u7ecd\u4e00\u4e9b\u6bd4\u8f83\u57fa\u7840\u7684\u5185\u5bb9\uff0c\u6216\u662f\u4e00\u4e9b\u6bd4\u8f83\u7410\u788e\u3001\u4ec5\u9700\u4e86\u89e3\u7684\u5185\u5bb9\uff1b

\u7531\u4e8e\u8bfe\u672c\u7684 Overview \u5199\u5f97\u975e\u5e38\u4e00\u8a00\u96be\u5c3d\uff0c\u6240\u4ee5\u6211\u5728\u5543\u5b8c\u540e\u8fdb\u884c\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4f60\u53ef\u4ee5\u5728\u8fd9\u91cc\u627e\u5230\u6211\u6574\u7406\u8fc7\u7a0b\u4e2d\u5b8c\u6210\u7684\u601d\u7ef4\u5bfc\u56fe\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u601d\u7ef4\u5bfc\u56fe\u66f4\u591a\u7684\u662f\u63d0\u4f9b\u6846\u67b6\u6027\u7684\u8ba4\u77e5\uff0c\u5177\u4f53\u5230\u6bcf\u4e2a\u53f6\u5b50\u8282\u70b9\u7684\u5185\u5bb9\u5efa\u8bae\u8fd8\u662f\u4ee5\u672c\u6587\u4e3a\u4e3b\u3002\u6b64\u5916\uff0c\u672c\u6587\u5f88\u591a\u89c2\u70b9\u5177\u6709\u6bd4\u8f83\u5f3a\u70c8\u7684\u4e2a\u4eba\u7406\u89e3\u8272\u5f69\uff0c\u5982\u679c\u4f60\u5bf9\u5176\u4e2d\u7684\u8bba\u65ad\u62b1\u6709\u5f02\u8bae\uff0c\u6b22\u8fce\u8ba8\u8bba\uff01

\u5728\u6b63\u5f0f\u5f00\u59cb\u6838\u5fc3\u5185\u5bb9\u7684\u5b66\u4e60\u4e4b\u524d\uff0c\u6211\u60f3\u5148\u505a\u4e00\u70b9\u8bf4\u660e\uff0c\u4e5f\u7b97\u662f\u4e00\u70b9\u5173\u4e8e\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ecf\u9a8c\u4e4b\u8c08\u3002

\u201c\u5b9a\u4e49\u4e0d\u5b58\u5728\u4e86\u201d

\u533a\u522b\u4e8e\u81ea\u7136\u79d1\u5b66\u7684\u7814\u7a76\u5bf9\u8c61\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e00\u4e2a\u5f7b\u5f7b\u5e95\u5e95\u7684\u4eba\u9020\u7269\uff0c\u5176\u5f88\u591a\u6982\u5ff5\u90fd\u5f88\u96be\u754c\u5b9a\u4e00\u4e2a\u660e\u786e\u7684\u754c\u9650\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fc7\u7a0b\u4e2d\u9047\u5230\u7684\u6700\u9996\u8981\u7684\u95ee\u9898\u3002\u6211\u4f1a\u5c3d\u529b\u7ed9\u51fa\u6211\u8ba4\u4e3a\u66f4\u7cbe\u786e\u7684\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4ecd\u7136\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u4eec\u5c3d\u91cf\u53ea\u56f4\u7ed5\u5b9a\u4e49\u7684\u4e2d\u5fc3\u8fdb\u884c\u5b66\u4e60\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","title":"\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","text":"

\u672c\u8282\u4e3b\u8981\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5f53\u4f5c\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u5355\u4f4d\uff0c\u6765\u8ba8\u8bba\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","title":"\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","text":"

\u6574\u95e8\u8bfe\u7a0b\u6211\u4eec\u9700\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u663e\u7136\u662f\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf(Operating System, OS)\u3002\u63a5\u4e0b\u6765\u6211\u5c06\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u8ff0\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u3002

\u2460 \u4ece\u804c\u80fd\u4e0a\u770b

\u4ece\u5176\u804c\u80fd\u4e0a\u770b\uff0c\u6211\u8ba4\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u662f\u4e00\u4e2a\u8d44\u6e90\u7ba1\u7406\u7cfb\u7edf\u3002

\u53f3\u56fe\u63cf\u8ff0\u4e86\u8ba1\u7b97\u673a\u7cfb\u7edf\u7684\u62bd\u8c61\u5c42\u7ea7\uff1a\u81ea\u4e0a\u800c\u4e0b\uff0c\u7528\u6237\u901a\u8fc7\u5e94\u7528\u7a0b\u5e8f\u89e3\u51b3\u95ee\u9898\uff0c\u5e94\u7528\u7a0b\u5e8f\u5411\u64cd\u4f5c\u7cfb\u7edf\u8bf7\u6c42\u8ba1\u7b97\u673a\u8d44\u6e90\uff1b\u81ea\u4e0b\u800c\u4e0a\uff0c\u8ba1\u7b97\u673a\u786c\u4ef6\u4e3a\u8f6f\u4ef6\uff08\u5305\u62ec OS\uff09\u63d0\u4f9b\u4e86\u7269\u8d28\u57fa\u7840\uff0c\u672c\u8d28\u4e0a\uff0c\u786c\u4ef6\u63d0\u4f9b\u4e86\u8ba1\u7b97\u673a\u8d44\u6e90\u3002

\u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e2d\u95f4\u5c42\uff0c\u5411\u4e0a\u4e3a\u7528\u6237\u7a0b\u5e8f\u5206\u914d\u6613\u7528\u7684\u8d44\u6e90\uff0c\u5411\u4e0b\u76f4\u63a5\u64cd\u4f5c\u786c\u4ef6\u8d44\u6e90\u7684\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u8fd8\u9700\u8981\u516c\u5e73\u3001\u9ad8\u6548\u5730\u89e3\u51b3\u8d44\u6e90\u4e4b\u95f4\u7684\u51b2\u7a81\u95ee\u9898\u7b49\u7b49\u3002

\u5b83\u5c31\u597d\u50cf\u836f\u623f\u67dc\u53f0\uff0c\u5404\u79cd\u836f\u54c1\u5c31\u597d\u50cf\u8ba1\u7b97\u673a\u8d44\u6e90\uff0c\u75c5\u4eba\u63d0\u4f9b\u5904\u65b9\uff0c\u67dc\u53f0\u6536\u5230\u8bf7\u6c42\uff08\u7cfb\u7edf\u8c03\u7528\uff09\u540e\u5904\u7406\u8bf7\u6c42\uff0c\u5e76\u5343\u8f9b\u4e07\u82e6\uff08\u5177\u4f53\u4f1a\u9047\u5230\u4ec0\u4e48\u95ee\u9898\u6211\u4eec\u4f1a\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u5b66\u5230\uff09\u66ff\u4f60\u51c6\u5907\u597d\u4f60\u9700\u8981\u7684\u8d44\u6e90\uff0c\u5b8c\u6210\u4f60\u7684\u8bf7\u6c42\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7ba1\u7406\u7684\u8d44\u6e90\u6709\u8fd9\u4e9b\uff1a\u2460 CPU\uff0c\u7531\u4e8e CPU \u7684\u4e00\u4e2a\u6838(core)\u5728\u7279\u5b9a\u65f6\u523b\u53ea\u80fd\u5904\u7406\u4e00\u4ef6\u4e8b\uff0c\u6240\u4ee5\u201cCPU \u80fd\u591f\u4e3a\u6211\u6240\u7528\u201d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u8d44\u6e90\uff1b\u2461 \u5185\u5b58\uff0c\u6267\u884c\u7a0b\u5e8f\u79bb\u4e0d\u5f00\u5185\u5b58\uff0c\u7528\u6237\u7a0b\u5e8f\u81ea\u7136\u4e5f\u9700\u8981\u5360\u7528\u4e00\u5b9a\u7684\u5185\u5b58\u6765\u89e3\u51b3\u95ee\u9898\uff1b\u2462 I/O \u8bbe\u5907\uff0c\u6253\u5370\u673a\u4e0d\u80fd\u540c\u65f6\u6253\u5370\u6bdb\u6982\u5386\u5e74\u5377\u548c\u8f6c\u4e13\u4e1a\u7533\u8bf7\u8868\uff1b\u2463\u2026\u2026

\u7c97\u7565\u7684\u6765\u8bf4\uff0c\u672c\u8bfe\u7a0b\u4e4b\u540e\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u90fd\u662f\u56f4\u7ed5\u8981\u5982\u4f55\u7ef4\u62a4\u548c\u64cd\u4f5c\u5404\u79cd\u8d44\u6e90\u800c\u5c55\u5f00\u7684\u3002

\u2461 \u4ece\u5b58\u5728\u4e0a\u770b

\u4ece\u5176\u5b58\u5728\u6765\u770b\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u8fd8\u662f\u4e00\u4e2a\u8f6f\u4ef6\u7a0b\u5e8f\uff0c\u662f\u4e00\u4e2a\u4e0d\u505c\u8fd0\u884c\u7740\u7684\uff0c\u7528\u6765\u6267\u884c\u7528\u6237\u7a0b\u5e8f\u7684\u8f6f\u4ef6\u3002\u8fd9\u4e2a\u89d2\u5ea6\u7684\u672c\u8d28\u540c\u65f6\u53cd\u5e94\u4e86\u64cd\u4f5c\u7cfb\u7edf\u6700\u521d\u5b58\u5728\u7684\u76ee\u7684\uff0c\u4e3a\u4e86\u63d0\u9ad8\u8ba1\u7b97\u673a\u8d44\u6e90\u7684\u5229\u7528\u6548\u7387\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u7a0b\u5e8f\u6765\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u8fd9\u4ef6\u4e8b\uff0c\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u81ea\u52a8\u5316\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u4e5f\u9700\u8981\u6210\u4e3a\u8ba1\u7b97\u673a\u786c\u4ef6\u7684\u201c\u4ee3\u7406\u4eba\u201d\uff0c\u638c\u63e1\u786c\u4ef6\u7684\u6240\u6709\u8d44\u6e90\uff0c\u5e76\u4e14\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8fd8\u5f97\u60f3\u65b9\u6cd5\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002

\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u57fa\u7840\u6700\u4e2d\u592e\u7684\u90e8\u5206\u662f\u5185\u6838(kernel)\uff0c\u8981\u7ed9\u51fa kernel \u7684\u7cbe\u786e\u5b9a\u4e49\u5f88\u96be\uff0c\u8fd9\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u8ba1\u7684\u7ed3\u6784\u6709\u5173\uff08\u53c2\u8003\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\uff09\uff0c\u5b83\u6700\u660e\u663e\u7684\u4e00\u4e2a\u7279\u70b9\u5c31\u662f\u81ea\u8ba1\u7b97\u673a\u5f00\u673a\u540e\u5c31\u4e0d\u505c\u5728\u8fd0\u884c\u3002OS \u548c kernel \u7684\u5173\u7cfb\u5c31\u597d\u50cf\u7b14\u8bb0\u672c\u7535\u8111\u548c\u5b83\u7684\u4e3b\u677f\uff0c\u5982\u679c\u5c06 OS \u4e2d\u7684\u5176\u4ed6\u90e8\u5206\u9664\u53bb\uff0ckernel \u4ecd\u7136\u81ea\u6d3d\uff0c\u4ecd\u7136\u5177\u5907\u5b83\u5e94\u6709\u7684\u5185\u5728\u7684\u529f\u80fd\uff0c\u6bd4\u5982\u5b83\u4ecd\u7136\u5177\u5907\u5bf9\u8d44\u6e90\u8fdb\u884c\u8c03\u5ea6\u7684\u80fd\u529b\uff0c\u53ea\u4e0d\u8fc7\u5b83\u53ef\u80fd\u62ff\u4e0d\u5230\u80fd\u8ba9\u5b83\u8c03\u5ea6\u7684\u8d44\u6e90\u3002\u6211\u5728\u8fd9\u91cc\u907f\u514d\u8c08\u5230 OS \u548c kernel \u7684\u533a\u522b\uff0c\u56e0\u4e3a\u8fd9\u5b9e\u5728\u96be\u4ee5\u8bf4\u6e05\uff0c\u751a\u81f3\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u90fd\u4f1a\u7528 OS \u6765\u4ee3\u66ff kernel \u7684\u6982\u5ff5\u3002

\u81f3\u6b64\uff0c\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u4e86\u89e3\u4e86\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\uff0c\u73b0\u5728\u7528\u4e00\u53e5\u8bfe\u672c\u4e0a\u7684\u8bdd\u6765\u505a\u603b\u7ed3\u3002

The common functions of controlling and allocating resources are then brought together into one piece of software: the operating system. --Operating System Concepts (10th edition)

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","text":"

\u73b0\u5728\u6211\u4eec\u77e5\u9053\u64cd\u4f5c\u7cfb\u7edf\u662f\u4ec0\u4e48\u4e1c\u897f\u4e86\uff0c\u90a3\u4e48\u5728\u6b64\u57fa\u7840\u4e0a\u6211\u4eec\u6316\u6398\u4e00\u4e0b\uff0c\u600e\u6837\u624d\u7b97\u4e00\u4e2a\u597d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u4e5f\u5c31\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u65b9\u5411\uff0c\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4e5f\u4f1a\u7b80\u5355\u63d0\u53ca\u4e00\u4e9b\u6211\u4eec\u4e4b\u540e\u4f1a\u8bbe\u8ba1\u7684\u5185\u5bb9\uff0c\u4ee5\u4f9b\u53c2\u8003\u3002

\u9996\u5148\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u9700\u8981\u6709\u8f83\u597d\u7684\u53ef\u9760\u6027\u548c\u5b89\u5168\u6027\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8981\u5c3d\u53ef\u80fd\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u826f\u597d\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236\uff08\u901a\u8fc7#\u4e2d\u65ad\u673a\u5236\u5b9e\u73b0\uff09\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u9700\u8981\u6709\u5f3a\u5065\u7684\u4f53\u9b44\uff0c\u4e0d\u80fd\u4e00\u522e\u98ce\u5b83\u5c31\u75c5\u5012\u4e86\uff1b\u53e6\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u6743\u9650\u7ba1\u7406\u7cfb\u7edf\uff08#\u7279\u6743\u6a21\u5f0f\uff09\uff0c\u4ee5\u5c4f\u853d\u6765\u81ea\u7528\u6237\u7a0b\u5e8f\u7684\u5371\u9669\u884c\u4e3a\uff0c\u7528\u6237\u53ef\u4ee5\u5411\u201c\u67dc\u53f0\u201d\u7d22\u53d6\u6297\u751f\u7d20\uff0c\u4f46\u662f\u7528\u6237\u7d22\u53d6\u5e93\u623f\u94a5\u5319\u65f6\uff0c\u5408\u683c\u7684\u201c\u67dc\u53f0\u201d\u663e\u7136\u4e0d\u80fd\u7b54\u5e94\u8fd9\u4e2a\u8bf7\u6c42\u3002

\u5176\u6b21\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u6709\u8f83\u597d\u7684\u6613\u7528\u6027\uff0c\u5b83\u9700\u8981\u5411\u7528\u6237\u63d0\u4f9b\u7b80\u4fbf\u7684\u670d\u52a1\u4ee5\u8bf7\u6c42\u7cfb\u7edf\u8d44\u6e90\uff0c\u6bd5\u7adf\u64cd\u4f5c\u7cfb\u7edf\u7684\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u65b9\u4fbf\u7528\u6237\u4f7f\u7528\u7cfb\u7edf\u8d44\u6e90\u2014\u2014\u8fd9\u610f\u5473\u7740\u6211\u4eec\u7684\u201c\u4ee3\u7406\u4eba\u201d\u5f97\u662f\u4e2a\u597d\u4ea4\u6d41\u7684\u4eba\uff0c\u800c\u7528\u6237\u7a0b\u5e8f\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u8d44\u6e90\u7684\u9014\u5f84\u662f\u7cfb\u7edf\u8c03\u7528\u3002

\u5bbd\u6cdb\u4e00\u70b9\u6765\u8bb2\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u547d\u4ee4\u63a5\u53e3\u548c\u7a0b\u5e8f\u63a5\u53e3\uff0c\u6709\u4e9b\u5730\u65b9\u4e5f\u4f1a\u63d0\u5230\u56fe\u5f62\u7528\u6237\u63a5\u53e3(Graphical User Interface, GUI)\uff0c\u4ee5\u53ca\u547d\u4ee4\u884c\u63a5\u53e3(Command Line Interface, CLI)\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u4e0d\u662f\u5f88\u559c\u6b22\u8fd9\u4e2a\u5206\u7c7b\u3002

\u5f53\u7136\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u662f\u9ad8\u6548\u7684\uff0c\u4ece\u6700\u65e9\u7684\u6279\u5904\u7406\u7cfb\u7edf\u5230\u73b0\u5728\u7684\u5206\u65f6\u7cfb\u7edf\uff08#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1\uff09\uff0cCPU \u7684\u5229\u7528\u7387\u5728\u4e0d\u65ad\u63d0\u5347\uff0c\u5468\u8f6c\u65f6\u95f4\u4e5f\u5728\u4e0d\u65ad\u7f29\u77ed\uff0c\u5982\u4eca\u7684\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u5206\u65f6\u6280\u672f\u4e5f\u5b9e\u73b0\u4e86\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u63d0\u9ad8\u6548\u7387\u7684\u540c\u65f6\u4e5f\u63d0\u9ad8\u4e86\u7528\u6237\u4f53\u9a8c\u3002

\u8fd8\u6709\u4e00\u70b9\u4e0d\u5bb9\u5ffd\u89c6\u7684\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\uff08\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7684\uff09\u516c\u5e73\u6027\uff0c\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406\u4e2d\u6211\u4eec\u4f1a\u4e86\u89e3\u5230\uff0c\u591a\u8fdb\u7a0b\u8bed\u5883\u4e0b\u6709\u5927\u91cf\u7684\u51b2\u7a81\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff0c\u800c\u6211\u4eec\u5728\u5904\u7406\u8fd9\u4e9b\u51b2\u7a81\u95ee\u9898\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u9965\u997f(Starvation)\uff08\u5177\u4f53\u662f\u4ec0\u4e48\u8bf7\u53c2\u8003\u4e0b\u4e00\u5355\u5143\uff09\uff0c\u800c\u64cd\u4f5c\u7cfb\u7edf\u8981\u505a\u7684\u5c31\u662f\u907f\u514d\u9965\u997f\u7684\u51fa\u73b0\uff0c\u5c31\u597d\u50cf\u7e41\u5fd9\u65f6\u6bb5\u7684\u7535\u68af\uff0c\u6211\u4eec\u4e0d\u80fd\u56e0\u4e3a\u4e8c\u697c\u6d41\u91cf\u5f88\u5927\u5c31\u4e0d\u7ba1\u4e09\u697c\u4ee5\u4e0a\u7684\u4eba\u3002

\u4e0a\u8ff0\u76ee\u6807\u5927\u591a\u662f\u9488\u5bf9\u4f7f\u7528\u8005\u800c\u8a00\u7684\uff0c\u90a3\u4e48\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u53ef\u6269\u5c55\u6027\u3001\u6613\u7ef4\u62a4\u6027\u7b49\u4e5f\u662f\u975e\u5e38\u91cd\u8981\u7684\u3002\u4e0d\u540c\u7684\u8bbe\u8ba1\u601d\u8def\u9020\u5c31\u4e86\u4e0d\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u7ed3\u6784\uff0c\u5404\u79cd\u8bbe\u8ba1\u4e5f\u5404\u81ea\u6709\u5404\u81ea\u7684\u4e3b\u6218\u573a\uff0c\u5173\u4e8e\u8fd9\u4e9b\u5185\u5bb9\uff0c\u6211\u4eec\u4f1a\u5728#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1\u8fd9\u4e00\u90e8\u5206\u66f4\u8be6\u7ec6\u5730\u4ecb\u7ecd\u3002

\u8fd8\u6709\u8bb8\u591a\uff0c\u4f8b\u5982\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u8981\u5c3d\u53ef\u80fd\u5229\u7528\u786c\u4ef6\u8d44\u6e90\u7b49\uff0c\u4f46\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u8282\u60f3\u8981\u8ba8\u8bba\u7684\u91cd\u70b9\uff0c\u6240\u6709\u5c31\u63a0\u8fc7\u4e86\u3002\u4e0a\u8ff0\u89c2\u70b9\u5e76\u4e0d\u5168\u9762\u4e5f\u4e0d\u4e00\u5b9a\u5b8c\u5168\u6b63\u786e\uff0c\u6709\u4e00\u5927\u90e8\u5206\u90fd\u662f\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0c\u8bf7\u8bfb\u8005\u8fa8\u8bc1\u5730\u770b\u5f85\uff0c\u5982\u679c\u6709\u9519\u8bef\u8bf7\u52a1\u5fc5\u544a\u8bc9\u6211\uff01

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","text":"

\u672c\u8282\u4e3b\u8981\u5c31\u4e00\u4e9b\u5173\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6574\u4f53\u8bbe\u8ba1\u7684\u95ee\u9898\u505a\u4e00\u4e9b\u8ba8\u8bba\uff0c\u4ece\u4e00\u4e2a\u76f8\u5bf9\u6bd4\u8f83\u9ad8\u7684\u89d2\u5ea6\u8c08\u4e00\u8c08\u4e00\u4e9b\u9876\u5c42\u8bbe\u8ba1\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","text":"

\u867d\u7136\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u662f\u8f6f\u4ef6\uff0c\u4f46\u662f\u5b83\u6bd5\u7adf\u662f\u4e0e\u786c\u4ef6\u7d27\u5bc6\u5173\u8054\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4f1a\u6d89\u53ca\u5230\u4e00\u4e9b\u5173\u4e8e\u786c\u4ef6\u7684\u5185\u5bb9\uff0c\u8fd9\u91cc\u7b80\u5355\u6d89\u53ca\u4e00\u4e9b\u5173\u4e8e\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\u7684\u5185\u5bb9\u3002

\u6982\u5ff5\u8fa8\u6790

\u540d\u8bcd \u5b9a\u4f4d CPU \u6267\u884c\u6307\u4ee4\u7684\u786c\u4ef6 Core CPU \u7684\u57fa\u7840\u8ba1\u7b97\u5355\u5143 Multi-core \u4e00\u4e2a CPU \u4e0a\u6709\u591a\u4e2a core Processor \u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a CPU \u7684\u82af\u7247 Multi-processor \u591a\u4e2a processor

\u6839\u636e\u5904\u7406\u5668\u7684\u6570\u91cf\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u4e09\u79cd\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\uff1a\u5355\u5904\u7406\u5668\u7cfb\u7edf\u3001\u591a\u5904\u7406\u5668\u7cfb\u7edf\u3001\u96c6\u7fa4\u7cfb\u7edf\u3002

\u2460 \u5355\u5904\u7406\u5668\u7cfb\u7edf(Single-Processor System)

\u4e66\u4e2d\u7ed9\u51fa\u7684\u5173\u4e8e\u5355\u5904\u7406\u5668\u7cfb\u7edf\u7684\u5b9a\u4e49\u662f\uff0c\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u901a\u7528\u5904\u7406\u5668(general-purpose processor)\uff0c\u5e76\u4e14\u8fd9\u4e2a processor \u53ea\u6709\u4e00\u4e2a\u6838(core)\u3002\u4f46\u5b83\u53ef\u4ee5\u6709\u82e5\u5e72\u4e13\u7528\u5904\u7406\u5668(special-purpose processor)\uff0c\u7528\u6765\u6267\u884c\u4e00\u4e9b\u7279\u5b9a\u7684\u6307\u4ee4\uff0c\u800c\u8fd9\u4e9b\u4e13\u7528\u5904\u7406\u5668\u5e76\u4e0d\u8fd0\u884c\u7ebf\u7a0b\u3002

\u2461 \u591a\u5904\u7406\u5668\u7cfb\u7edf(Multiprocessor System)

\u591a\u5904\u7406\u5668\u7cfb\u7edf\u662f\u6307\u6709\u591a\u4e2a\u5355\u6838\u901a\u7528\u5904\u7406\u5668\u7684\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5904\u7406\u5668\u5171\u4eab\u4e00\u5757\u4e3b\u5185\u5b58\uff0c\u5b83\u4eec\u901a\u8fc7\u603b\u7ebf\u6216\u4ea4\u6362\u7f51\u7edc\u8fde\u63a5\u5728\u4e00\u8d77\u3002

\u663e\u800c\u6613\u89c1\u7684\u662f\uff0c\u589e\u52a0\u4e86\u5904\u7406\u5668\u7684\u6570\u91cf\u80fd\u591f\u589e\u52a0\u541e\u5410\u91cf(throughput)\uff0c\u5373\u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u7684\u4efb\u52a1\u6570\u91cf\uff0c\u4f46\u662f\u8fd9\u4e2a\u589e\u52a0\u5e76\u4e0d\u662f\u7ebf\u6027\u7684\uff0c\u56e0\u4e3a\u5904\u7406\u5668\u4e4b\u95f4\u7684\u901a\u4fe1\u4e5f\u9700\u8981\u65f6\u95f4\uff0c\u800c\u4e14\u8fd8\u4f1a\u6709\u4e00\u4e9b\u989d\u5916\u7684\u5f00\u9500\u3002

\u76f8\u5173\u9605\u8bfb

\u4f46\u662f multi-core \u7684\u8bbe\u8ba1\u5728\u901f\u5ea6\u548c\u6548\u80fd\u4e0a\u90fd\u66f4\u80dc\u4e00\u7b79\uff0c\u56e0\u4e3a on-chip \u7684\u901a\u4fe1\u6bd4 between-chip \u7684\u901a\u4fe1\u66f4\u5feb\uff0c\u800c\u4e14\u66f4\u7701\u7535\u3002

\u2462 \u96c6\u7fa4\u7cfb\u7edf(Cluster System)

\u96c6\u7fa4\u7cfb\u7edf\u901a\u8fc7\u5197\u4f59\u5b9e\u73b0\u9ad8\u53ef\u7528\u670d\u52a1\uff0c\u901a\u8fc7\u5e76\u884c\u5b9e\u73b0\u9ad8\u6027\u80fd\u8ba1\u7b97\uff0c\u5b83\u662f\u7531\u591a\u4e2a\u5404\u81ea\u72ec\u7acb\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4f5c\u4e3a\u8282\u70b9(node)\uff0c\u901a\u8fc7\u9ad8\u901f\u901a\u4fe1\u7f51\u7edc\u4e92\u76f8\u8fde\u63a5\u5f62\u6210\u7684\u3002

\u96c6\u7fa4\u4e5f\u5206\u5bf9\u79f0\u548c\u4e0d\u5bf9\u79f0\u4e24\u79cd\uff0c\u5bf9\u79f0\u96c6\u7fa4\u7684\u5404\u4e2a\u8282\u70b9\u4e92\u76f8\u76d1\u7763\uff0c\u800c\u4e0d\u5bf9\u79f0\u7684\u96c6\u7fa4\u5219\u5b58\u5728\u4e00\u79cd\u7c7b\u4f3c\u201c\u66ff\u8865\u201d\u7684\u4e1c\u897f\uff0c\u7531\u201c\u66ff\u8865\u201d\u53bb\u76d1\u7763\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\uff0c\u5f53\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u5c31\u7531\u201c\u66ff\u8865\u201d\u6765\u63a5\u66ff\u5b83\u7684\u5de5\u4f5c\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","text":"

\u524d\u9762\u6211\u4eec\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u88ab\u7528\u6765\u300c\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u300d\u7684\u3002\u4e00\u5f00\u59cb\u8fd9\u4ef6\u4e8b\u6bd4\u8f83\u7b80\u5355\uff0c\u53ea\u9700\u8981\u50cf\u961f\u5217\u4e00\u6837\uff0c\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\u5c31\u884c\uff0c\u4f46\u662f\u6162\u6162\u7684\u968f\u7740\u8ba1\u7b97\u673a\u5e94\u7528\u8303\u56f4\u7684\u6269\u5927\u4ee5\u53ca\u5404\u79cd\u9700\u6c42\u7684\u51fa\u73b0\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4e0d\u592a\u5408\u7406\u4e86\u3002\u6309\u7167\u53d1\u5c55\u9636\u6bb5\u6f14\u8fdb\uff0c\u6211\u4eec\u5212\u5206\u51fa\u4e24\u4e2a\u9636\u6bb5\u4e09\u4e2a\u8bbe\u8ba1\uff1a\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing System)\u3001\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u548c\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

\u2460 \u6279\u5904\u7406\u7cfb\u7edf\u9636\u6bb5

\u6700\u65e9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u4efb\u52a1\u90fd\u9700\u8981\u4eba\u5de5\u624b\u52a8\u5e72\u9884\uff0c\u4f46\u662f\u8ba1\u7b97\u673a\u6267\u884c\u4efb\u52a1\u7684\u901f\u5ea6\u4e0e\u4eba\u5de5\u5e72\u9884\u7684\u901f\u5ea6\u76f8\u5dee\u592a\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4eba\u5de5\u901f\u5ea6\u4e25\u91cd\u9650\u5236\u4e86\u8ba1\u7b97\u673a\u7684\u5de5\u4f5c\u6548\u7387\uff0c\u4e8e\u662f\u64cd\u4f5c\u7cfb\u7edf\u5f00\u59cb\u51fa\u73b0\uff0c\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u539f\u59cb\u7684\u5b9e\u73b0\u5c31\u662f\u6279\u5904\u7406\u7cfb\u7edf\u3002\uff08\u4f46\u4e0d\u662f\u6700\u65e9\uff0c\u4e4b\u524d\u8fd8\u6709\u8131\u673a\u5904\u7406\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\uff09

\u2776 \u5355\u9053\u6279\u5904\u7406\u9636\u6bb5

\u6309\u7167\u64cd\u4f5c\u7cfb\u7edf\u53d1\u5c55\u8fdb\u7a0b\uff0c\u6211\u4eec\u9996\u5148\u4ecb\u7ecd\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing)\u3002

\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u6709\u4e24\u4e2a\u5173\u952e\u8bcd\uff0c\u201c\u6279\u5904\u7406\u201d\u548c\u201c\u5355\u9053\u201d\u3002

\u201c\u6279\u5904\u7406\u201d\u6307\u7684\u662f\uff0c\u7cfb\u7edf\u6267\u884c\u7684\u4efb\u52a1\u662f\u6210\u6279\u7684\uff0c\u82e5\u5e72\u4efb\u52a1\u88ab\u4f5c\u4e3a\u4e00\u6574\u6279\u4ea4\u4ed8\u7ed9\u64cd\u4f5c\u7cfb\u7edf\u3002\u5728\u5177\u4f53\u6267\u884c\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u81ea\u52a8\u6309\u987a\u5e8f\u4e32\u884c(serial)\u6267\u884c\u8fd9\u4e9b\u4efb\u52a1\u3002

\u800c\u201c\u5355\u9053\u201d\u6307\u7684\u662f\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u53ea\u6709\u4e00\u9053\u7a0b\u5e8f\u5728\u8fd0\u884c\uff0c\u7cfb\u7edf\u53ea\u5904\u7406\u4e00\u9879\u4efb\u52a1\uff0c\u5728\u8fd9\u4e2a\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\uff0c\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u4ed6\u4efb\u52a1\u3002

\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u521d\u6b65\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u81ea\u52a8\u5316\u201d\uff0c\u6781\u5927\u51cf\u5c11\u4e86\u4eba\u5de5\u64cd\u4f5c\u901f\u5ea6\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u7684\u5f71\u54cd\u3002\u4f46\u5b83\u5b58\u5728\u4e00\u4e2a\u975e\u5e38\u660e\u663e\u7684\u95ee\u9898\uff1a\u7531\u4e8e\u5f53\u524d\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u5b83\u4efb\u52a1\uff0c\u6240\u4ee5\u5f53\u5f53\u524d\u4efb\u52a1\u51fa\u73b0 I/O \u8bf7\u6c42\u65f6\uff0cCPU \u5c31\u9700\u8981\u7b49\u5f85 I/O \u5b8c\u6210\u3002\u6211\u4eec\u77e5\u9053 I/O \u64cd\u4f5c\u662f\u975e\u5e38\u8017\u65f6\u7684\uff0c\u66f4\u4e25\u91cd\u7684\u662f\u4f8b\u5982\u7b49\u5f85\u952e\u76d8\u8f93\u5165\u8fd9\u79cd\u9700\u8981\u4eba\u5de5\u53c2\u4e0e\u7684 I/O\uff0c\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u6ca1\u6cd5\u907f\u514d\u8fd9\u79cd\u4eba\u5de5\u64cd\u4f5c\u5bf9\u8ba1\u7b97\u673a\u6267\u884c\u6548\u7387\u7684\u5f71\u54cd\uff0c\u8fd9\u5c31\u5bfc\u81f4 CPU \u4f1a\u957f\u65f6\u95f4\u5904\u4e8e\u7a7a\u95f2\u72b6\u6001\uff0c\u800c\u8ba9 CPU \u957f\u65f6\u95f4\u7a7a\u95f2\u8fd9\u4ef6\u4e8b\uff0c\u662f\u4e0d\u88ab\u63a5\u53d7\u7684\u3002

\u2777 \u591a\u9053\u6279\u5904\u7406\u9636\u6bb5

\u56e0\u6b64\uff0c\u4e3a\u4e86\u4e0d\u8ba9 CPU \u95f2\u4e0b\u6765\uff0c\u4e00\u4e2a\u7b26\u5408\u76f4\u89c9\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9\u5b83\u5148\u53bb\u505a\u4e0b\u4e00\u4ef6\u4e8b\uff0c\u5c31\u597d\u50cf\u4ed3\u5e93\u6b63\u5728\u6536\u96c6\u4e0a\u4e00\u4e2a\u75c5\u4eba\u6240\u9700\u8981\u7684\u836f\u54c1\u7684\u65f6\u5019\uff0c\u67dc\u53f0\u53ef\u4ee5\u5148\u53bb\u5904\u7406\u4e0b\u4e00\u4e2a\u75c5\u4eba\u7684\u8bf7\u6c42\u3002\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u5e94\u8fd0\u800c\u751f\u3002

\u4ece\u540d\u5b57\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5389\u5bb3\u5728\u8fd9\u4e2a\u201c\u591a\u9053(Multiprogramming)\u201d\uff0c\u5373\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5728\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4e2d\uff0c\u5f53\u524d\u4efb\u52a1\u53d1\u751f IO \u8bf7\u6c42\u65f6\uff0cCPU \u8f6c\u800c\u53bb\u6267\u884c\u5176\u5b83\u4efb\u52a1\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u5c3d\u91cf\u8ba9 CPU \u59cb\u7ec8\u5728\u5de5\u4f5c\u72b6\u6001\u3002\u56e0\u6b64\uff0c\u5b8f\u89c2\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u540c\u65f6\u6267\u884c\u82e5\u5e72\u4efb\u52a1\uff08\u5728\u4efb\u52a1 A \u5b8c\u6210\u4e4b\u524d\u4efb\u52a1 B \u4e5f\u53ef\u80fd\u5f00\u59cb\u4e86\uff09\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u5e76\u53d1(concurrency)\uff08\u6ce8\u610f\uff0c\u5e76\u53d1\u4e0e\u5e76\u884c\u7684\u6982\u5ff5\u5e76\u4e0d\u4e00\u81f41\uff09\uff1b\u4f46\u5728\u5fae\u89c2\u4e0a\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u662f\u987a\u5e8f\u4e32\u884c\u7684\uff0c\u53ea\u4e0d\u8fc7\u533a\u522b\u4e8e\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ee5\u5b8c\u6574\u7684\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u662f\u5c06\u5b8c\u6574\u4efb\u52a1\u6309\u7167 I/O \u7684\u53d1\u751f\u505a\u5212\u5206\uff0c\u4ee5\u8fd9\u4e9b\u5212\u5206\u540e\u7684\u90e8\u5206\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\u8fdb\u884c\u987a\u5e8f\u4e32\u884c(serial)\u3002

\u6211\u4eec\u53ef\u4ee5\u7528\u7518\u7279\u56fe\u6765\u53ef\u89c6\u5316\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u7684\u7b56\u7565\uff08\u4e00\u79cd\u5e38\u89c1\u7684\u9898\u578b\uff09\u3002\u4ee5\u4e0b\u9762\u7684\u9898\u76ee\u4e3a\u4f8b\uff0c\u6211\u4eec\u6765\u5b9e\u8df5\u4e00\u4e0b\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e24\u4e2a\u7a0b\u5e8f A \u548c B\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5206\u522b\u72ec\u7acb\u7684\u8bbe\u5907 X \u548c Y\uff0c\u4e14\u6211\u4eec\u53ea\u6709\u4e00\u4e2a CPU\uff1a

\u8bf7\u8ba8\u8bba\uff1a

  1. \u5728\u5355\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\u5148\u6267\u884c A \u518d\u6267\u884c B\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f
  2. \u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f\u8bf7\u7ed9\u51fa\u7518\u7279\u56fe\u3002

\u5728\u5355\u9053\u7a0b\u5e8f\u4e0b\u6267\u884c\uff0c\u5373\u6309\u987a\u5e8f\u6267\u884c A \u548c B\uff0cCPU \u7684\u5229\u7528\u7387\u5373\u5b9e\u9645 CPU \u4f7f\u7528\u65f6\u95f4\u9664\u4ee5\u5b8c\u6210\u4efb\u52a1\u7684\u603b\u65f6\u95f4\uff0c\u56e0\u6b64\uff1a

\\[ U = \\frac{(10+5+10)+(10+5)}{(10+5+5+10+10)+(10+10+5+5+10)} = \\frac{40}{80} = 50\\% \\]

\u800c\u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0c\u6211\u4eec\u5f97\u5230\u5982\u4e0b\u7518\u7279\u56fe\uff1a

gantt\n    title Multiprogramming\n    dateFormat ss\n    axisFormat %S\n\n    section Program A\n    CPU :a,  00,  10\n    X   :b,  10,  15\n    CPU :c,  20,  25\n    Y   :d,  25,  35\n    CPU :e,  35,  45\n\n    section Program B\n    X   :g,  00,  10\n    CPU :h,  10,  20\n    Y   :i,  20,  25\n    CPU :j,  25,  30\n    Y   :k,  35,  45

\u7531\u4e8e Mermaid \u7684\u9650\u5236\uff0c\u6211\u73b0\u5728\u662f\u628a\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u4efb\u52a1\u9519\u5f00\u753b\u7684\uff0c\u5b9e\u9645\u4e0a\u505a\u9898\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u753b\u6210\u4e24\u884c\u3002

\u8981\u70b9\u5c31\u662f\u7eb5\u5411\u4e0d\u80fd\u540c\u65f6\u51fa\u73b0\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u4f8b\u5982 18s \u65f6\u4e0d\u80fd A \u548c B \u90fd\u7528 CPU\uff0c\u6240\u4ee5 A \u9700\u8981\u7b49 B \u7528\u5b8c CPU \u518d\u4f7f\u7528\u3002

\u73b0\u5728\u6211\u4eec\u518d\u6765\u7edf\u8ba1 CPU \u7684\u5229\u7528\u7387\uff1a

\\[ U = \\frac{10+10+5+5+10}{45} = \\frac{40}{45} = 88.89\\% \\]

\u901a\u8fc7\u8fd9\u9053\u9898\u6211\u4eec\u4e5f\u53ef\u4ee5\u53d1\u73b0\uff0c\u591a\u9053\u7a0b\u5e8f\u8bbe\u8ba1\u6280\u672f\u5bf9 CPU \u5229\u7528\u7387\u7684\u63d0\u5347\u6709\u591a\u9ad8\uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u4ece\u8ba1\u7b97\u8fc7\u7a0b\u4e2d\u7684\u5206\u6bcd\u770b\u51fa\u5176\u5bf9\u7a0b\u5e8f\u541e\u5410\u91cf\u7684\u63d0\u5347\u6709\u591a\u9ad8\u3002

\u591a\u9053\u6279\u5904\u7406\u89e3\u51b3\u4e86\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u53ef\u80fd\u8ba9 CPU \u95f2\u7f6e\u4e0b\u6765\u7684\u95ee\u9898\uff08\u5f53\u7136\u524d\u63d0\u662f\u6709\u4efb\u52a1\u8ba9\u5b83\u505a\uff09\uff0c\u63d0\u9ad8\u4e86 CPU \u7b49\u8d44\u6e90\u7684\u5229\u7528\u7387\uff0c\u589e\u52a0\u4e86\u541e\u5410\u91cf\uff0c\u4f46\u662f\u7531\u4e8e\u6d89\u53ca\u5230\u4e86\u8fdb\u7a0b\u7684\u5207\u6362\u95ee\u9898\uff0c\u6240\u4ee5\u5b9e\u9645\u5b9e\u73b0\u4f1a\u590d\u6742\u5f88\u591a\u3002\u5177\u4f53\u7684\u5185\u5bb9\u6211\u4eec\u4f1a\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406 \u4e2d\u8be6\u7ec6\u4ecb\u7ecd\u3002

\u4f46\u662f\u65e0\u8bba\u5355\u9053\u8fd8\u662f\u591a\u9053\uff0c\u6279\u5904\u7406\u7cfb\u7edf\u5e76\u4e0d\u9002\u5408\u4f5c\u4e3a\u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\uff0c\u5176\u4e2d\u4e00\u4e2a\u6700\u5927\u7684\u95ee\u9898\u5c31\u662f\u5b83\u7684\u4ea4\u4e92\u6027\u975e\u5e38\u5dee\u3002\u7528\u6237\u7ed9\u5b9a\u4e00\u5b9a\u6279\u6b21\u7684\u4efb\u52a1\uff0c\u7136\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u8c03\u6574\u8fd9\u4e00\u6279\u4efb\u52a1\u7684\u6267\u884c\u987a\u5e8f\uff0c\u6700\u7ec8\u5b8c\u6210\u8fd9\u6279\u4efb\u52a1\uff0c\u7136\u800c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7528\u6237\u5c31\u6ca1\u6cd5\u518d\u7528\u8ba1\u7b97\u673a\u505a\u5176\u5b83\u4e8b\u60c5\u4e86\uff0c\u540c\u65f6\u4f60\u4e5f\u6ca1\u6cd5\u63a7\u5236\u6b63\u5728\u6267\u884c\u7684\u4efb\u52a1\uff0c\u8fd9\u5bf9\u73b0\u4ee3\u8ba1\u7b97\u673a\u6765\u8bf4\u662f\u4e0d\u53ef\u60f3\u8c61\u7684\u3002

\uff08\u5047\u8bbe\u6211\u4eec\u5ffd\u7565\u5173\u4e8e\u5c4f\u5e55\u663e\u793a\u7684 I/O\uff09\u8bd5\u60f3\uff0c\u4f60\u5e0c\u671b\u5728\u8dd1\u7a0b\u5e8f\u7684\u65f6\u5019\u653e\u4e00\u4e2a\u89c6\u9891\uff0c\u4f46\u662f\u7531\u4e8e\u4f60\u7684\u7a0b\u5e8f\u8fd8\u6ca1\u8dd1\u5b8c\uff0c\u4f60\u7684\u89c6\u9891\u5c31\u6ca1\u6cd5\u64ad\u653e\uff0c\u7a81\u7136\u4f60\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u4e00\u6b21 I/O\uff0cCPU \u8f6c\u800c\u64ad\u653e\u5df2\u7ecf\u5b8c\u6210 I/O \u540e\u7684\u90a3\u90e8\u5206\u89c6\u9891\uff0c\u4f46\u662f\u8fd9\u4e2a\u65f6\u5019\u4f60\u7684\u7a0b\u5e8f I/O \u5f88\u5feb\u4e5f\u5b8c\u6210\u4e86\uff0c\u5374\u9700\u8981\u7b49\u5f85\u7f13\u5b58\u4e2d\u7684\u89c6\u9891\u653e\u5b8c\u624d\u80fd\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u79cd\u7528\u6237\u4f53\u9a8c\u51e0\u4e4e\u65e0\u6cd5\u63a5\u53d7\u3002

\u5bf9\u4e8e\u7528\u6237\u6765\u8bf4\uff0c\u6700\u597d\u80fd\u540c\u65f6\u5b9e\u73b0\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u4e5f\u5c31\u662f\u51e0\u4ef6\u4e8b\u60c5\u81f3\u5c11\u770b\u8d77\u6765\u8981\u50cf\u662f\u540c\u65f6\u53d1\u751f\u7684\uff0c\u4e8e\u662f\u51fa\u73b0\u4e86\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

\u2461 \u5206\u65f6\u7cfb\u7edf\u9636\u6bb5

\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u662f\u591a\u4efb\u52a1(Multitasking)\u7684\u4e00\u4e2a\u5177\u4f53\u5b9e\u73b0\uff0c\u800c Multitasking \u662f Multiprogramming \u7684\u4e00\u4e2a\u903b\u8f91\u6269\u5c55\uff0c\u5373 Multitasking \u4e5f\u662f Multiprogramming \u7684\u4e00\u79cd\uff0c\u5b83\u7b26\u5408\u5185\u5b58\u4e2d\u6709\u591a\u4e2a\u8fdb\u7a0b\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u6709\u591a\u4e2a\u4efb\u52a1\u4e00\u8d77\u6267\u884c\u7684\u7279\u70b9\u3002

\u5206\u65f6\u7cfb\u7edf\u901a\u8fc7\u9891\u7e41\u5730\u5728\u591a\u4e2a\u8fdb\u7a0b\u95f4\u5207\u6362\u6765\u8fd1\u4f3c\u5b9e\u73b0\u5e76\u884c\uff08\u5e76\u4e0d\u662f\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\uff0c\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\u9700\u8981\u901a\u8fc7\u591a\u6838/\u591a\u5904\u7406\u5668\u5b9e\u73b0\uff09\u3002\u5177\u4f53\u6765\u8bf4\u662f\u6309\u7167\u65f6\u95f4\u7247(time slice)\uff0c\u8f6e\u6d41\u5c06 CPU \u5206\u914d\u7ed9\u5404\u4e2a\u8fdb\u7a0b\uff0c\u8fd9\u6837\u53ea\u8981\u65f6\u95f4\u7247\u8db3\u591f\u77ed\uff0c\u7528\u6237\u4f53\u611f\u4e0a\u5c31\u50cf\u662f\u591a\u4e2a\u4efb\u52a1\u5e76\u884c\u6267\u884c\u3002

\u611f\u89c9\u6bd4\u8f83\u50cf\u300a\u5341\u4e07\u4e2a\u51b7\u7b11\u8bdd\u300b\u8d85\u4eba\u8fd9\u4e00\u96c6\u7684 4:09 - 4:48\u3002

\u5206\u65f6\u7528\u6237\u5141\u8bb8\u591a\u4e2a\u7528\u6237\u540c\u65f6\u4f7f\u7528\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6240\u6709\u4efb\u52a1\u4e4b\u95f4\u4e92\u76f8\u72ec\u7acb\uff0c\u4e92\u4e0d\u5e72\u6270\u3001\u4e92\u4e0d\u963b\u585e\uff0c\u56e0\u6b64\u4efb\u52a1\u7684\u6700\u957f\u5468\u8f6c\u65f6\u95f4\u51cf\u5c11\uff0c\u7528\u6237\u7684\u64cd\u4f5c\u4e5f\u4f1a\u88ab\u53ca\u65f6\u54cd\u5e94\uff0c\u5b9e\u73b0\u4e86\u66f4\u65b9\u4fbf\u8fdb\u884c\u4eba\u673a\u5bf9\u8bdd\u3002

\u76f8\u5173\u9605\u8bfb

\u5173\u4e8e\u8fd9\u4e09\u4e2a\u6280\u672f\u7684\u8bf4\u660e\u4e5f\u53ef\u4ee5\u770b\u770b xyx \u662f\u600e\u4e48\u5199\u7684\uff1a\ud83d\udd17

\u9664\u4e86\u8fd9\u51e0\u79cd\u7cfb\u7edf\u5916\uff0c\u738b\u9053\u91cc\u4e5f\u63d0\u5230\u4e86\u8fd9\u4e9b\u7cfb\u7edf\uff1a

\u591a\u9053\u6280\u672f\u51fa\u73b0\u4e4b\u540e\uff0c\u867d\u7136\u8ba1\u7b97\u673a\u7684\u8868\u73b0\u4e0d\u65ad\u63d0\u5347\uff0c\u4f46\u662f\u591a\u9053\u6280\u672f\u672c\u8eab\u7684\u6280\u672f\u7279\u70b9\uff0c\u5404\u4e2a\u8fdb\u7a0b\u5728\u672a\u5b8c\u6210\u7684\u60c5\u51b5\u4e0b\u9700\u8981\u4e92\u76f8\u5207\u6362\uff0c\u4e00\u7cfb\u5217\u95ee\u9898\u63a5\u8e35\u800c\u6765\uff0c\u8fd9\u4e9b\u90fd\u662f\u6211\u4eec\u5728\u4e4b\u540e\u7684\u5355\u5143\u91cc\u8be6\u7ec6\u8ba8\u8bba\u7684\u5185\u5bb9\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","text":"

\u968f\u7740\u64cd\u4f5c\u7cfb\u7edf\u7684\u529f\u80fd\u4e0d\u65ad\u6269\u5c55\u3001\u4f53\u91cf\u9010\u6e10\u53d8\u5927\uff0c\u6574\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u7684\u7ed3\u6784\u8bbe\u8ba1\u5c31\u8d8a\u53d1\u91cd\u8981\u4e86\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u8bbe\u8ba1\u601d\u8def\u3002

\u5b8f\u5185\u6838

\u5b8f\u5185\u6838(Monolithic-Kernels)\u4e5f\u53eb\u5355\u5185\u6838\u6216\u5927\u5185\u6838\uff0c\u5b83\u7684\u6838\u5fc3\u601d\u60f3\u5341\u5206\u7b80\u5355\u7c97\u66b4\uff0c\u5c06\u6240\u6709\u4e3b\u8981\u529f\u80fd\u90fd\u7d27\u5bc6\u8026\u5408\u5728\u4e00\u8d77\u4f5c\u4e3a\u4e00\u4e2a\u5b8c\u6574\u7684\u6574\u4f53\u3002

\u5b8f\u5185\u6838\u5e26\u6765\u7684\u597d\u5904\u662f\u64cd\u4f5c\u7cfb\u7edf\u6548\u7387\u6781\u9ad8\uff0c\u4ece\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u5386\u7a0b\u6765\u770b\uff0c\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u90fd\u662f\u4ece\u5b8f\u5185\u6838\u53d1\u5c55\u8fc7\u6765\u7684\uff08\u4e0d\u8fc7\u5982\u4eca\u7684\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u66f4\u504f\u5411\u6df7\u5408\u7cfb\u7edf\uff09\u3002

\u4f46\u662f\u5b8f\u5185\u6838\u7684\u7f3a\u70b9\u4e5f\u662f\u5341\u5206\u660e\u663e\u7684\uff0c\u5927\u91cf\u590d\u6742\u7684\u529f\u80fd\u4e92\u76f8\u8026\u5408\uff0c\u5bfc\u81f4\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ef4\u62a4\u5341\u5206\u56f0\u96be\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u4e00\u65e6\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u4e25\u91cd\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u90fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff0c\u5728\u8fd9\u65b9\u9762\uff0c\u5b8f\u5185\u6838\u7684\u8868\u73b0\u90fd\u4e0d\u5982\u5fae\u5185\u6838\u3002

\u5206\u5c42\u8bbe\u8ba1

\u5206\u5c42\u8bbe\u8ba1(layer approach)\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u7cfb\u7edf\u5206\u4e3a\u82e5\u5e72\u5c42\uff0c\u5e95\u5c42\u4e3a\u786c\u4ef6\uff0c\u9876\u5c42\u4e3a\u7528\u6237\u63a5\u53e3\uff0c\u7b2c \\(i\\) \u5c42\u53ea\u8c03\u7528 \\(i-1\\) \u5c42\u63d0\u4f9b\u7684\u63a5\u53e3\u3002\u6bcf\u4e00\u5c42\u90fd\u5b9e\u73b0\u826f\u597d\u7684\u5c01\u88c5\uff0c\u4e8e\u662f\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u53ea\u9700\u8981\u9010\u6b65\u5b9e\u73b0\u5e76\u8c03\u8bd5\u9a8c\u8bc1\u6bcf\u4e00\u5c42\uff0c\u518d\u9010\u7ea7\u5411\u4e0a\u5f00\u53d1\u5373\u53ef\uff1b\u5728\u7ef4\u62a4\u6216\u6269\u5c55\u8fc7\u7a0b\u4e2d\uff0c\u53ea\u8981\u4fee\u6539\u6bcf\u4e00\u5c42\u7684\u5185\u90e8\u5b9e\u73b0\uff0c\u800c\u4e0d\u9700\u8981\u4fee\u6539\u5176\u5b83\u5c42\u7684\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u5927\u5927\u964d\u4f4e\u4e86\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u96be\u5ea6\u3002

\u7136\u800c\uff0c\u7531\u4e8e\u6bcf\u6b21\u6267\u884c\u4e00\u4e2a\u529f\u80fd\u90fd\u9700\u8981\u4e0a\u4e0b\u8de8\u8d8a\u591a\u5c42\uff0c\u53d1\u751f\u591a\u6b21\u63a5\u53e3\u8c03\u7528\uff0c\u5206\u5c42\u8bbe\u8ba1\u4e0b\u7684\u7cfb\u7edf\u6548\u7387\u5f80\u5f80\u90fd\u53d7\u5230\u9650\u5236\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8981\u60f3\u771f\u6b63\u610f\u4e49\u4e0a\u5b9e\u73b0\u826f\u597d\u7684\u5206\u5c42\u8bbe\u8ba1\uff0c\u5c31\u9700\u8981\u5bf9\u5404\u5c42\u6709\u826f\u597d\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u96be\u5ea6\u662f\u4e0d\u5c0f\u7684\u3002

\u5fae\u5185\u6838

\u5fae\u5185\u6838(Micro-Kernels)\u7684\u8bbe\u8ba1\u601d\u8def\u4e0e\u5b8f\u5185\u6838\u76f8\u53cd\uff0c\u4e3b\u5f20\u5c06\u4e0d\u662f\u5fc5\u8981\u7684\u4e1c\u897f\u90fd\u4ece\u5185\u6838\u91cc\u62ff\u51fa\u53bb\uff0c\u653e\u5230\u7528\u6237\u7a7a\u95f4\uff0c\u4ee5\u7528\u6237\u6001\u6267\u884c\u3002\u6574\u4f53\u5f62\u6210\u4e00\u79cd\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\uff0c\u6b64\u65f6\u5185\u6838\u53ea\u63d0\u4f9b\u901a\u8baf\u3001\u5185\u5b58\u7ba1\u7406\u3001\u8fdb\u7a0b\u7ba1\u7406\u7b49\u57fa\u672c\u529f\u80fd\uff0c\u4e5f\u53ea\u6709\u8fd9\u4e9b\u90e8\u5206\u76f4\u63a5\u8fd0\u884c\u5728\u5185\u6838\u6001\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\u7684\u5176\u5b83\u529f\u80fd\u90e8\u4ef6\u5219\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u673a\u5236\u4e0e\u5185\u6838\u4e92\u52a8\u3002

\u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u4f53\u79ef\u4f1a\u5927\u5927\u51cf\u5c0f\uff0c\u5185\u6838\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u4e5f\u4f1a\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\uff0c\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\u4e5f\u4f7f\u529f\u80fd\u6269\u5c55\u66f4\u52a0\u5bb9\u6613\uff1b\u53e6\u5916\uff0c\u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u6548\u7387\u4e5f\u4f1a\u5927\u5927\u63d0\u5347\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u5404\u4e2a\u529f\u80fd\u4e4b\u95f4\u7684\u8026\u5408\u964d\u4f4e\uff0c\u4e14\u90fd\u8fd0\u884c\u5728\u7528\u6237\u6001\uff0c\u529f\u80fd\u4e4b\u95f4\u4ec5\u4f7f\u7528\u901a\u4fe1\u5efa\u7acb\u94fe\u63a5\uff0c\u5373\u4f7f\u67d0\u4e2a\u529f\u80fd\u90e8\u4ef6\u51fa\u73b0\u95ee\u9898\uff0c\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5d29\u6e83\uff0c\u76f8\u6bd4\u4e8e\u5b8f\u5185\u6838\uff0c\u7cfb\u7edf\u53ef\u9760\u6027\u5927\u5927\u63d0\u5347\u3002

\u6a21\u5757\u5316\u8bbe\u8ba1

\u6a21\u5757\u5316\u8bbe\u8ba1(Modules Approach)\u6307\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5212\u5206\u4e3a\u82e5\u5e72\u5206\u7acb\u6a21\u5757\uff0c\u5e76\u89c4\u5b9a\u6a21\u5757\u4e4b\u95f4\u7684\u63a5\u53e3\uff0c\u751a\u81f3\u5355\u4e2a\u6a21\u5757\u4e0b\u4e5f\u53ef\u80fd\u662f\u7531\u591a\u4e2a\u6a21\u5757\u901a\u8fc7\u540c\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\u800c\u6210\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u65b9\u6cd5\u4e5f\u88ab\u79f0\u4e3a\u6a21\u5757-\u63a5\u53e3\u6cd5\u3002

\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u4e0e\u5fae\u5185\u6838\u662f\u4e0d\u540c\u7684\uff0c\u9700\u8981\u6ce8\u610f\u533a\u5206\u3002\u5fae\u5185\u6838\u8bbe\u8ba1\u4ecd\u7136\u662f\u6709\u4e2d\u5fc3\uff08\u5fae\u5185\u6838\uff09\u7684\uff0c\u4f46\u662f\u6a21\u5757\u5316\u8bbe\u8ba1\u6574\u4f53\u662f\u5206\u5c42\u7f51\u72b6\u7684\u3002

\u7406\u60f3\u7684\u6a21\u5757\u5316\u8bbe\u8ba1\u4f1a\u8ba9\u7cfb\u7edf\u8bbe\u8ba1\u53ef\u4ee5\u591a\u7ebf\u5e76\u884c\uff0c\u53ea\u9700\u8981\u4e8b\u5148\u5546\u91cf\u597d\u63a5\u53e3\uff0c\u5404\u4e2a\u5de5\u7a0b\u5e08\u5c31\u53ef\u4ee5\u72ec\u7acb\u5730\u5b9e\u73b0\u3001\u586b\u5145\u6a21\u5757\u5185\u5bb9\uff1b\u9ad8\u5185\u805a\u4f4e\u8026\u5408\u7684\u8bbe\u8ba1\u4e5f\u80fd\u8ba9\u7cfb\u7edf\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\u3002

\u7136\u800c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5341\u5206\u56f0\u96be\uff0c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5e76\u6ca1\u6709\u4e00\u4e2a\u6e05\u6670\u7684\u5355\u5411\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u65e0\u6cd5\u9012\u8fdb\u5f0f\u7684\u63a8\u8fdb\u4efb\u52a1\uff0c\u6574\u4e2a\u5f00\u53d1\u8fc7\u7a0b\u5c31\u597d\u50cf\u59cb\u7ec8\u60ac\u5728\u534a\u7a7a\uff1b\u9664\u6b64\u4e4b\u5916\uff0c\u5982\u4f55\u8bbe\u8ba1\u63a5\u53e3\u4f7f\u5f97\u6240\u6709\u9700\u6c42\u90fd\u80fd\u88ab\u5f88\u597d\u6ee1\u8db3\u4e5f\u662f\u4e2a\u96be\u4ee5\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u6df7\u5408\u7cfb\u7edf

\u6df7\u5408\u7cfb\u7edf(Hybrid Systems)\u662f\u6307\u5c06\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\u7684\u8bbe\u8ba1\u601d\u8def\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u66f4\u73b0\u4ee3\uff0c\u4e5f\u662f\u76ee\u524d\u4e3b\u6d41\u7684\u64cd\u4f5c\u7cfb\u7edf\u7684\u6a21\u5f0f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","text":"

\u672c\u8282\u6211\u4eec\u6df1\u5165\u5230\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e9b\u5177\u4f53\u8fd0\u884c\u8fc7\u7a0b\uff0c\u63a2\u7a76\u4e00\u4e9b\u6b65\u9aa4\u7684\u5177\u4f53\u5b9e\u73b0\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4e2d\u65ad","title":"\u4e2d\u65ad","text":"

\u4e2d\u65ad\uff08\u5e7f\u4e49\uff09\u662f\u8d2f\u7a7f\u73b0\u4ee3\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e2a\u91cd\u8981\u6280\u672f\uff0c\u5b83\u4f7f\u5f97\u201c\u8ba1\u5212\u4e4b\u5916\u201d\u7684\u4e8b\u60c5\u53ef\u4ee5\u53ca\u65f6\u7684\u88ab\u544a\u77e5\u5e76\u5904\u7406\u3002\u4f8b\u5982\uff0c\u7a0b\u5e8f\u7a81\u7136\u51fa\u73b0\u4e86\u81f4\u547d\u9519\u8bef\uff0c\u8fd9\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5e94\u8be5\u53ca\u65f6\u5bdf\u89c9\u5e76\u5904\u7406\uff1b\u53c8\u6bd4\u5982\uff0c\u7528\u6237\u5728\u547d\u4ee4\u884c\u8f93\u5165\u4e86\u6307\u4ee4\uff0c\u6309\u4e0b\u4e86\u56de\u8f66\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5e94\u5f53\u5bdf\u89c9\u5230 I/O \u5df2\u7ecf\u51c6\u5907\u597d\u4e86\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e0d\u538c\u5176\u70e6\u5730\u8be2\u95ee\u4f60\u6709\u6ca1\u6709\u53d1\u751f\u9519\u8bef\uff0c\u53c8\u6216\u8005\u8fd9\u4e2a I/O \u662f\u5426\u5c31\u7eea\uff0c\u8fd9\u5f88\u4e0d\u5408\u7406\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e8b\u65e0\u5de8\u7ec6\u5730\u53bb\u8d1f\u8d23\u68c0\u67e5\u610f\u5916\u662f\u5426\u53d1\u751f\uff0c\u800c\u662f\u5e94\u5f53\u63d0\u4f9b\u4e00\u4e2a\u4e0a\u62a5\u610f\u5916\u7684\u63a5\u53e3\uff0c\u8ba9\u4ea7\u751f\u610f\u5916\u7684\u4eba\u81ea\u884c\u4e0a\u62a5\u8fd9\u4e9b\u610f\u5916\u3002\u5728\u5177\u4f53\u786c\u4ef6\u7684\u5b9e\u73b0\u4e0a\uff0c\u4f1a\u6709\u4e24\u6761\u4e13\u95e8\u8868\u793a\u4e2d\u65ad\u4fe1\u53f7\u7684\u7ebf\uff08\u7a0d\u5019\u4f1a\u5728\u4e2d\u65ad\u5c4f\u853d\u4e2d\u8bb2\u5230\uff09\uff0cCPU \u4f1a\u5728\u6bcf\u4e00\u6761\u6307\u4ee4\u7ed3\u675f\u540e\u68c0\u6d4b\u662f\u5426\u6709\u4e2d\u65ad\u53d1\u751f\uff0c\u800c\u5728\u8f6f\u4ef6\u4e0a\u5c31\u4f53\u73b0\u4e3a\u6bcf\u5f53\u6709\u4e2d\u65ad\u53d1\u751f\u65f6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5c31\u9700\u8981\u53bb\u5904\u7406\u3002\u7531\u4e8e\u4e2d\u65ad\u7684\u5f3a\u5927\u7279\u6027\uff0c\u4ece\u6700\u65e9\u4ec5\u7684\u5904\u7406\u786c\u4ef6\u72b6\u6001\uff0c\u5230\u5904\u7406\u8f6f\u4ef6\u9519\u8bef\u548c\u4f5c\u4e3a\u4e00\u79cd\u7c7b\u4f3c\u51fd\u6570\u7684\u624b\u6bb5\uff0c\u4e2d\u65ad\u7684\u5e94\u7528\u8303\u56f4\u8d8a\u6765\u8d8a\u5e7f\uff0c\u5b83\u7684\u6982\u5ff5\u968f\u7740\u5e94\u7528\u8303\u56f4\u4e5f\u4e0d\u65ad\u6269\u5927\u3002

\u4e2d\u65ad\u5411\u91cf\u8868

\u7531\u4e8e\u4e2d\u65ad\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u9891\u7e41\u7684\u5904\u7406\u5404\u79cd\u4e2d\u65ad\uff0c\u5904\u7406\u6bcf\u4e00\u79cd\u4e2d\u65ad\u90fd\u9700\u8981\u4e00\u4e2a\u7279\u5b9a\u7684\u65b9\u6cd5\uff0c\u56e0\u6b64\uff0c\u4e00\u79cd\u5feb\u901f\u5b9a\u4f4d\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\u7684\u624b\u6bb5\u5c31\u663e\u5f97\u5c24\u4e3a\u91cd\u8981\u3002

\u4e2d\u65ad\u5411\u91cf\u8868(Interrupt Vector Table)\u901a\u8fc7\u4e2d\u65ad\u53f7\u6765\u7d22\u5f15\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\uff0c\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u968f\u673a\u8bbf\u95ee\u201d\uff0c\u5927\u5927\u52a0\u901f\u4e86\u4e2d\u65ad\u5904\u7406\u7684\u901f\u5ea6\u3002

\u6839\u636e\u4e2d\u65ad\u662f\u5426\u7531\u7a0b\u5e8f\u4ea7\u751f\uff0c\u4e2d\u65ad\u53ef\u4ee5\u5206\u4e3a\u5916\u4e2d\u65ad\uff08\u72ed\u4e49\u7684\u4e2d\u65ad\uff0c\u7531\u786c\u4ef6\u4ea7\u751f\uff09\u548c\u5185\u4e2d\u65ad\uff08\u5f02\u5e38...\uff0c\u4e3b\u8981\u7531\u7a0b\u5e8f\u4ea7\u751f\uff09\u3002\u8fd9\u91cc\u6709\u5f88\u591a\u6982\u5ff5\uff1ainstruction, exception, trap, abort, ...\uff0c\u8fd9\u90e8\u5206\u533a\u5206\u8bf7\u5927\u5bb6\u81ea\u884c\u5bfb\u627e\u8d44\u6599\u53c2\u8003\uff0c\u6211\u5728\u8fd9\u91cc\u653e\u51e0\u4e2a\u53c2\u8003\u94fe\u63a5\u3002

\u76f8\u5173\u9605\u8bfb

\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e2d\u65ad\u4e00\u65e6\u53d1\u751f\u5c31\u7acb\u523b\u88ab\u89e3\u51b3\uff0c\u4f46\u662f\u4e2d\u65ad\u5904\u7406\u4e5f\u540c\u6837\u9700\u8981\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u65ad\u4e5f\u6709\u53ef\u80fd\u4ea7\u751f\u51b2\u7a81\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u9700\u8981\u4e00\u7cfb\u5217\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

  1. \u663e\u7136\uff0c\u4e2d\u65ad\u4e4b\u95f4\u4ea6\u6709\u533a\u522b\uff0c\u6709\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u201c\u81f4\u547d\u9519\u8bef\u201d\u8fd9\u4ef6\u4e8b\uff0c\u663e\u7136\u6bd4\u6253\u5370\u673a\u5c31\u7eea\u66f4\u91cd\u8981\uff0c\u56e0\u6b64\uff0c\u4e2d\u65ad\u9700\u8981\u5206\u7ea7\u673a\u5236\uff0c\u4ee5\u533a\u5206\u4e2d\u65ad\u7684\u4f18\u5148\u7ea7\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728\u5904\u7406\u4e2d\u65ad\u65f6\uff0c\u4f18\u5148\u5904\u7406\u4f18\u5148\u7ea7\u9ad8\u7684\u4e2d\u65ad\uff1b
  2. \u4e2d\u65ad\u5e76\u4e0d\u662f\u968f\u65f6\u968f\u5730\u90fd\u80fd\u53d1\u751f\u7684\uff0c\u201c\u4ee3\u7406\u4eba\u201d\u5728\u8d70\u72ec\u6728\u6865\u65f6\u4e0d\u5e94\u5f53\u6682\u505c\u53bb\u5904\u7406\u836f\u54c1\u7f3a\u8d27\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6765\u8bf4\uff0c\u6709\u8bb8\u591a\u539f\u5b50\u6027\u7684\u884c\u4e3a\u662f\u4e0d\u53ef\u88ab\u4e2d\u65ad\u7684\uff0c\u4e5f\u6709\u4e00\u4e9b\u91cd\u8981\u7684\u4efb\u52a1\u662f\u4e0d\u5e94\u5f53\u88ab\u666e\u901a\u7684\u4e2d\u65ad\u6253\u6270\u7684\uff0c\u8fd9\u5c31\u6d89\u53ca\u5230\u4e2d\u65ad\u5c4f\u853d\u95ee\u9898\uff1b

\u5b58\u7591

\u8fd9\u5c31\u9700\u8981\u6211\u4eec\u8c08\u5230\u4e2d\u65ad\u7684\u786c\u4ef6\u8bbe\u8ba1\uff0c\u4e00\u79cd\u6bd4\u8f83\u666e\u901a\u7684\u8bbe\u8ba1\u662f\uff0c\u51c6\u5907 maskable interrupt-request line \u548c non-maskable interrupt-request line \u4e24\u6761\u4e2d\u65ad\u8bf7\u6c42\u7ebf\uff0c\u524d\u8005\u7528\u4e8e\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u540e\u8005\u7528\u4e8e\u4e0d\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5728\u6bcf\u4e2a\u6307\u4ee4\u540e\u68c0\u67e5\u8fd9\u4e2d\u65ad\u7ebf\u4e0a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\uff0c\u800c\u5982\u679c\u6b64\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5c4f\u853d\u4e86\u4e2d\u65ad\uff0c\u90a3\u4e48\u5c31\u4e0d\u4f1a\u68c0\u67e5 maskable interrupt-request line \u4e0a\u7684\u4e2d\u65ad\u8bf7\u6c42\u3002

\u9700\u8981\u6ce8\u610f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u53d1\u73b0\u4e2d\u65ad\u540e\u5e76\u4e0d\u662f\u4e8c\u8bdd\u4e0d\u8bf4\u9a6c\u4e0a\u53bb\u5904\u7406\u4e2d\u65ad\u7684\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u4e2d\u65ad\u5904\u7406\u5b8c\u6210\u540e\u4ecd\u80fd\u7ee7\u7eed\u5f53\u524d\u4efb\u52a1\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u4fdd\u5b58\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\uff0c\u4ee5\u4fbf\u5b8c\u6210\u4e2d\u65ad\u5904\u7406\u540e\u6062\u590d\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u65f6\u5668","title":"\u8ba1\u65f6\u5668","text":"

\u867d\u7136\u770b\u8d77\u6765\u5f88\u4e0d\u8d77\u773c\uff0c\u4f46\u8ba1\u65f6\u5668(timer)\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u4e1c\u897f\u3002\u8ba1\u65f6\u5668\u9700\u8981\u4e00\u4e2a\u56fa\u5b9a\u9891\u7387\u7684\u65f6\u949f\u4ee5\u53ca\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u5728\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u4ee4\u8ba1\u6570\u5668\u51cf 1\uff0c\u5f53\u8ba1\u6570\u5668\u5f52\u96f6\u65f6\u4ea7\u751f\u4e2d\u65ad\uff0c\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u5b9a\u7684\u65f6\u5df2\u7ecf\u5230\u4e86\u3002

\u5b83\u7684\u529f\u80fd\u867d\u7136\u57fa\u7840\u4f46\u662f\u5341\u5206\u91cd\u8981\uff0c\u4f8b\u5982\u5206\u65f6\u7cfb\u7edf\u4e2d\u5c31\u9700\u8981\u8ba1\u6570\u5668\u6765\u63a7\u5236\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u53c8\u6bd4\u5982\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u5b9a\u671f\u68c0\u67e5\u5185\u5b58\u4e2d\u7684\u8fdb\u7a0b\uff0c\u4ee5\u9632\u6b62\u8fdb\u7a0b\u4e00\u76f4\u5360\u7528\u7cfb\u7edf\u8d44\u6e90\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u8ba1\u65f6\u5668\u7684\u5e2e\u52a9\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7279\u6743\u6a21\u5f0f","title":"\u7279\u6743\u6a21\u5f0f","text":"

\u6211\u4eec\u524d\u9762\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u67d0\u4e9b\u64cd\u4f5c\u662f\u5371\u9669\u7684\uff0c\u6709\u53ef\u80fd\u5a01\u80c1\u5230\u81ea\u8eab\u6b63\u5e38\u8fd0\u4f5c\u7684\uff08\u5982\u4e0e\u786c\u4ef6\u76f4\u63a5\u76f8\u5173\u7684\u884c\u4e3a\u3001\u63a7\u5236 CPU \u8fd0\u884c\u89c4\u5219\u7684\u884c\u4e3a\u7b49\uff09\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u4e0d\u5e94\u5f53\u88ab\u7528\u6237\u7a0b\u5e8f\u76f4\u63a5\u6267\u884c\u3002\u4e00\u79cd\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u5212\u5206\u5e38\u89c4\u64cd\u4f5c\u548c\u5371\u9669\u64cd\u4f5c\uff0c\u5141\u8bb8\u7528\u6237\u7a0b\u5e8f\u6267\u884c\u5e38\u89c4\u64cd\u4f5c\uff0c\u800c\u5371\u9669\u64cd\u4f5c\u5219\u9700\u8981\u59d4\u6258\u4e13\u4e1a\u4eba\u58eb\u4ee3\u4e3a\u6267\u884c\u3002\u800c\u8fd9\u5c31\u662f\u7279\u6743\u6a21\u5f0f(Privileged Mode)\u7684\u57fa\u672c\u601d\u8def\u3002

\u5de5\u4e1a\u4e0a\u7684\u7279\u6743\u6a21\u5f0f\u53ef\u80fd\u4f1a\u6709\u591a\u79cd\u590d\u6742\u7684\u5b9e\u73b0\u5f62\u5f0f\uff0c\u4f46\u662f\u6211\u4eec\u8fd9\u91cc\u53ea\u8bb2\u6700\u7b80\u5355\u7684\u4e00\u79cd\uff0c\u5373\u53cc\u6a21\u5f0f(Dual-Mode)\u3002\u53cc\u6a21\u5f0f\u4e0b\uff0cCPU \u6709\u4e24\u79cd\u8fd0\u884c\u6a21\u5f0f\uff0c\u4e00\u79cd\u662f\u7528\u6237\u6001(User Mode)\uff08\u76ee\u6001\uff09\uff0c\u4e00\u79cd\u662f\u5185\u6838\u6001(Kernel Mode)\uff08\u7ba1\u6001\uff0c\u6838\u5fc3\u6001\uff09\u3002Mode Bit \u4e3a 0\uff0c\u8868\u793a CPU \u5de5\u4f5c\u5728\u5185\u6838\u6001\uff0cMode Bit \u4e3a 1 \u65f6\uff0cCPU \u5de5\u4f5c\u5728\u7528\u6237\u6001\u3002

\u540c\u65f6\uff0c\u6211\u4eec\u5c06\u90a3\u4e9b\u201c\u5371\u9669\u201d\u7684\u6307\u4ee4\u79f0\u4e3a\u7279\u6743\u6307\u4ee4(privileged instruction)\uff0c\u4f8b\u5982 I/O \u63a7\u5236\uff0c\u8ba1\u65f6\u5668\u7ba1\u7406\uff0c\u4e2d\u65ad\u7ba1\u7406\u7b49\u3002\u8fd9\u4e9b\u6307\u4ee4\u53ea\u80fd\u5728\u5185\u6838\u6001\u4e0b\u6267\u884c\uff0c\u800c\u7528\u6237\u6001\u4e0b\u6267\u884c\u8fd9\u4e9b\u6307\u4ee4\u65f6\u4f1a\u8ba4\u4e3a\u8fd9\u6761\u6307\u4ee4\u4e0d\u5b58\u5728\u3002

\u95ee\u9898\u5c1a\u672a\u89e3\u51b3

\u73b0\u5728\u6211\u4eec\u5c06\u5371\u9669\u64cd\u4f5c\u548c\u76f8\u5bf9\u5b89\u5168\u7684\u64cd\u4f5c\u9694\u79bb\u5f00\u6765\u4e86\uff0c\u4f46\u662f\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u7528\u6237\u7a0b\u5e8f\u5c31\u4e0d\u9700\u8981\u4f7f\u7528\u90a3\u4e9b\u5371\u9669\u64cd\u4f5c\u4e86\uff0c\u5355\u7eaf\u7684\u9694\u79bb\u5e76\u4e0d\u80fd\u89e3\u51b3\u95ee\u9898\uff0c\u7528\u6237\u7a0b\u5e8f\u4ecd\u7136\u5b58\u5728\u9700\u8981\u4f7f\u7528\u7279\u6743\u6307\u4ee4\u7684\u9700\u6c42\u3002

\u8fd9\u4e9b\u9700\u6c42\u5f80\u5f80\u662f\u53ef\u4ee5\u88ab\u62bd\u8c61\u7684\u3001\u88ab\u5c01\u88c5\u7684\u3002\u5c31\u597d\u50cf\u300c\u201c\u7528\u6237\u201d\u5411\u201c\u67dc\u53f0\u201d\u7d22\u8981\u5e93\u623f\u94a5\u5319\uff0c\u4ee5\u4fbf ta \u80fd\u53bb\u5e93\u623f\u62ff\u7f3a\u8d27\u7684\u8d27\u7269\u300d\u8fd9\u4ef6\u4e8b\u662f\u4e0d\u5408\u7406\u7684\uff0c\u6211\u4eec\u65e0\u6cd5\u63a7\u5236\u201c\u7528\u6237\u201d\u5b9e\u9645\u62ff\u201c\u94a5\u5319\u201d\u505a\u4e86\u4ec0\u4e48\uff0c\u800c\u201c\u94a5\u5319\u201d\u7684\u6ee5\u7528\u53c8\u4f1a\u5bfc\u81f4\u201c\u67dc\u53f0\u201d\u9677\u5165\u5371\u9669\u4e2d\uff1b\u4f46\u662f\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u662f\u5408\u7406\u7684\u3002

\u53cd\u8fc7\u6765\u8bb2\uff0c\u867d\u7136\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u8fd9\u4e2a\u4efb\u52a1\u5fc5\u987b\u4f7f\u7528\u5e93\u623f\u201c\u94a5\u5319\u201d\u624d\u80fd\u8fdb\u884c\uff0c\u4f46\u662f\u65e0\u8bba\u5982\u4f55\u8fd9\u4e2a\u201c\u94a5\u5319\u201d\u4e5f\u53ea\u4f1a\u88ab\u201c\u67dc\u53f0\u201d\u7528\u6765\u83b7\u53d6\u5e93\u623f\u91cc\u7684\u7279\u5b9a\u8d27\u7269\uff0c\u800c\u4e0d\u4f1a\u53d1\u751f\u8bf8\u5982\u201c\u7528\u6237\u201d\u5e26\u7740\u5341\u516b\u8f66\u9762\u5305\u4eba\u628a\u5e93\u623f\u6d17\u52ab\u4e00\u7a7a\u7684\u60c5\u51b5\u3002

\u64cd\u4f5c\u7cfb\u7edf\u53ea\u9700\u8981\u5c01\u88c5\u597d\u4e00\u7cfb\u5217\u7c7b\u4f3c\u8fd9\u79cd\u7684\u9700\u6c42-\u7ed3\u679c\u7684\u5904\u7406\u65b9\u6848\uff0c\u8ba9\u7528\u6237\u5728\u6709\u9700\u8981\u7684\u65f6\u5019\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u8fd9\u4e9b\u65b9\u6848\uff0c\u5728\u6267\u884c\u5f53\u524d\u4efb\u52a1\u7684\u65f6\u5019\u5c06\u63a7\u5236\u6743\u8ba9\u6e21\u7ed9\u64cd\u4f5c\u7cfb\u7edf\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5b8c\u6210\u540e\u518d\u8fd8\u56de\u63a7\u5236\u6743\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5c06\u7279\u6743\u6307\u4ee4\u9694\u79bb\u5728\u5185\u6838\u6001\uff0c\u540c\u65f6\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u5b8c\u6210\u9700\u6c42\u3002

\u800c\u90a3\u4e48\u5728\u5177\u4f53\u5b9e\u73b0\u4e0a\uff0c\u8fd9\u4e00\u6b65\u662f\u901a\u8fc7 trap \u5b9e\u73b0\u7684\u3002

Transition from user to kernel mode.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7cfb\u7edf\u8c03\u7528","title":"\u7cfb\u7edf\u8c03\u7528","text":"

Examples of W&U system calls.

\u7cfb\u7edf\u8c03\u7528(System Call)\u662f\u7cfb\u7edf\u5411\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u670d\u52a1\u7684\u4e00\u4e2a\u63a5\u53e3\uff0c\u5b83\u4eec\u7ecf\u5e38\u4ee5 C/C++ \u51fd\u6570\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u5bf9\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u63a5\u8fd1\u5e95\u5c42\u7684\u4efb\u52a1\uff0c\u4e5f\u53ef\u80fd\u662f\u901a\u8fc7\u6c47\u7f16\u7f16\u5199\u7684\u3002

\u4f46\u8bf4\u5230\u5e95\uff0c\u7cfb\u7edf\u8c03\u7528\u8fd8\u662f\u76f8\u5bf9\u5e95\u5c42\u7684\u8bbe\u8ba1\uff0c\u901a\u5e38\u7684\u5f00\u53d1\u5e76\u4e0d\u57fa\u4e8e\u5982\u6b64\u5e95\u5c42\u7684\u8bbe\u8ba1\u5c55\u5f00\u3002\u66f4\u5e38\u89c1\u7684\u662f\u5229\u7528\u5404\u79cd\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\u7684 Application Programming Interface, API \u8fdb\u884c\u5f00\u53d1\u3002

API \u662f\u4e00\u4e2a\u975e\u5e38\u5e38\u89c1\u7684\u6982\u5ff5\uff0c\u5728\u6211\u770b\u6765\u7cfb\u7edf\u8c03\u7528\u672c\u8eab\u4e5f\u662f\u4e00\u79cd API\u3002API \u7684\u6838\u5fc3\u601d\u60f3\u662f\u8ba9\u8c03\u7528\u8005\u53ea\u9700\u8981\u77e5\u9053\u5982\u4f55\u4e0e\u88ab\u8c03\u7528\u8005\u4ea4\u6d41\u4ee5\u5b9e\u73b0\u76ee\u7684\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u5177\u4f53\u5b9e\u73b0\u3002\u8fd9\u540c\u65f6\u4e5f\u6697\u793a\u7740\uff0c\u53ea\u8981 API \u4e00\u81f4\uff0c\u540c\u6837\u7684\u7a0b\u5e8f\u5728\u4e0d\u540c\u7684\u5e73\u53f0\u4e0a\u4e5f\u80fd\u76f4\u63a5\u7f16\u8bd1\u540e\u8fd0\u884c\u3002

\u663e\u7136\uff0cAPI \u4e0e\u7f16\u7a0b\u8bed\u8a00\u5f80\u5f80\u662f\u5f3a\u76f8\u5173\u7684\uff0c\u7279\u5b9a\u7f16\u7a0b\u8bed\u8a00\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u8fd0\u884c\u4e5f\u662f\u9700\u8981\u4e00\u5b9a\u7684\u201c\u73af\u5883\u201d\u7684\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u8fd0\u884c\u65f6\u73af\u5883(run-time environment, RTE)\u3002RTE \u901a\u5e38\u5305\u62ec\u4e86\u7f16\u8bd1\u5668(compilers)\u3001\u89e3\u91ca\u5668(interpreters)\u3001\u5e93(libraries)\u548c\u88c5\u8f7d\u5668(loaders)\u7b49\uff0c\u5b83\u4eec\u5171\u540c\u7ec4\u6210\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684\u8fd0\u884c\u65f6\u73af\u5883\u3002

\u76f8\u5173\u9605\u8bfb \u601d\u8003\u9898 \u9898\u9762\u89e3\u6790

\u8fa8\u6790\u5e93\u51fd\u6570\u4e0e\u7cfb\u7edf\u8c03\u7528\uff1f

\u5e93\u51fd\u6570\u8fd0\u884c\u5728\u7528\u6237\u7a7a\u95f4\u800c\u7cfb\u7edf\u8c03\u7528\u8fd0\u884c\u5728\u5185\u6838\u7a7a\u95f4\u3002\u5927\u90e8\u5206\u5e93\u51fd\u6570\u53ef\u80fd\u4f7f\u7528\u7cfb\u7edf\u8c03\u7528\u6765\u5b9e\u73b0\u76ee\u7684\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","title":"\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","text":"

The role of the linker and loader.

\u8bf4\u4e86\u8fd9\u4e48\u591a\uff0c\u90a3\u4e48\u64cd\u4f5c\u7cfb\u7edf\u5230\u5e95\u662f\u5982\u4f55\u6267\u884c\u4e00\u4e2a\u7a0b\u5e8f\u7684\u5462\uff1f\u4ee5 C \u4e3a\u4f8b\uff0c\u4e00\u4e2a\u5199\u5b8c\u7684\u4ee3\u7801\u9700\u8981\u7ecf\u8fc7\u7f16\u8bd1\u3001\u94fe\u63a5\u3001\u88c5\u8f7d\u4e09\u4e2a\u6b65\u9aa4\uff0c\u624d\u80fd\u6210\u4e3a\u4e00\u4e2a\u5728\u5185\u5b58\u4e2d\u7684\uff0c\u53ef\u4ee5\u88ab\u6267\u884c\u7684\u7a0b\u5e8f\u3002

\u7b80\u5355\u6765\u8bf4\uff0c\u7f16\u8bd1\u5668\u9996\u5148\u5c06\u82e5\u5e72 .c \u6e90\u6587\u4ef6\u7f16\u8bd1\u4e3a\u82e5\u5e72 .o \u6587\u4ef6\uff08\u8fd9\u91cc\u5408\u5e76\u4e86\u9884\u5904\u7406\u3001\u7f16\u8bd1\u3001\u6c47\u7f16\u6b65\u9aa4\uff09\uff0c\u8fd9\u4e9b .o \u6587\u4ef6\u88ab\u79f0\u4e3a\u53ef\u91cd\u5b9a\u4f4d\u76ee\u6807\u6587\u4ef6(relocatable object file)\uff0c\u5176\u5b58\u5728\u5f62\u5f0f\u4e3a\u673a\u5668\u7801\uff1b\u968f\u540e\u94fe\u63a5\u5668\u5c06\u82e5\u5e72 .o \u6587\u4ef6\u8fde\u5e26\u6240\u9700\u8981\u7684\u4e00\u4e9b\u5e93\u6587\u4ef6\uff08\u5982 .a \u6587\u4ef6\uff09\u94fe\u63a5\u4e3a\u4e00\u4e2a\u53ef\u6267\u884c\u76ee\u6807\u6587\u4ef6(executable object file)\u3002

\u7279\u522b\u7684\uff0c\u94fe\u63a5\u5206\u4e3a\u9759\u6001\u94fe\u63a5\u548c\u52a8\u6001\u94fe\u63a5\u4e24\u79cd\u3002\u9759\u6001\u94fe\u63a5\u5c06\u5e93\u6587\u4ef6\u7684\u4ee3\u7801\u76f4\u63a5\u5408\u5e76\u8fdb\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u52a8\u6001\u94fe\u63a5\u4ec5\u4ec5\u5c06\u5e93\u6587\u4ef6\u7684\u5f15\u7528\u4fe1\u606f\u5199\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u518d\u53bb\u5bfb\u627e\u8fd9\u4e9b\u5e93\u6587\u4ef6\u3002

gcc -E main.c -o main.i # pre-process\ngcc -S main.i -o main.s # compile to assembly code\ngcc -c main.s -o main.o # assemble to object file\ngcc main.o -o main      # link\n./main                  # (load and) execute\n
\u4e00\u4e9b\u64cd\u4f5c

\u53ef\u4ee5\u53d1\u73b0\uff0c\u52a8\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u6bd4\u9759\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u8981\u5c0f\u4e0d\u5c11\u3002

  1. \u5e76\u53d1\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u95f4\u95f4\u9694\u5185\u53d1\u751f\uff0c\u800c\u5e76\u884c\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u523b\u53d1\u751f\u3002\u903b\u8f91\u4e0a\uff0c\u5e76\u884c\u662f\u5e76\u53d1\u7684\u5b50\u96c6\u3002\u00a0\u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/","title":"Unit 1: \u8fdb\u7a0b\u7ba1\u7406 | Process Management","text":"

\u7ea6 6600 \u4e2a\u5b57 78 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \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

\u4e0b\u56fe\u662f\u8fdb\u7a0b\u5728\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7528\u6237\u90e8\u5206\u7684\u7ec4\u6210\uff1a

\u7528\u6237\u90e8\u5206

\u53ef\u4ee5\u53d1\u73b0\uff0cText \u548c Data \u90e8\u5206\u6240\u9700\u8981\u7684\u7a7a\u95f4\u5728\u4e00\u5f00\u59cb\u5c31\u88ab\u786e\u5b9a\uff0c\u800c Heap \u548c Stack \u90fd\u53ef\u80fd\u52a8\u6001\u7684\u6269\u5c55\u548c\u6536\u7f29\u3002\u89c2\u5bdf\u53f3\u56fe\uff0cHeap \u548c Stack \u662f\u76f8\u5411\u6269\u5c55\u7684\uff0c\u4e8e\u662f\u6574\u4e00\u5757\u7684\u5927\u5c0f\u80fd\u591f\u56fa\u5b9a\u4e0b\u6765\uff0c\u800c\u5728\u5185\u90e8\u8fdb\u884c\u6709\u9650\u5236\u7684\u52a8\u6001\u5206\u914d\u3002\u5f53\u7136\uff0cHeap \u548c Stack \u7684\u533a\u57df\u5e76\u4e0d\u4f1a\u4ea4\u53c9\u3002

memory layout of a C program

\u4e4b\u6240\u4ee5\u628a\u6709\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u548c\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u5206\u5f00\u6765\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u5728\u4e00\u5f00\u59cb\u53ea\u5b58\u50a8\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u7684\u5927\u5c0f\uff0c\u800c\u5728\u771f\u6b63\u7b2c\u4e00\u6b21\u8bbf\u95ee\u7684\u65f6\u5019\u624d\u5206\u914d\u5185\u5b58\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u51cf\u5c11\u5185\u5b58\u5360\u7528\u3002

\u901a\u5e38\u6765\u8bf4\uff0c\u672a\u521d\u59cb\u5316\u7684\u9759\u6001\u53d8\u91cf\u4e00\u822c\u90fd\u88ab\u653e\u5728 .bss \u6bb5\uff0c\u800c\u5728\u88ab\u521d\u59cb\u5316\u7684\u65f6\u5019\u79fb\u52a8\u5230 .data \u6bb5\u30021

\u800c\u653e\u5728\u5185\u6838\u90e8\u5206\u7684\u5185\u5bb9\uff0c\u5219\u66f4\u4fa7\u91cd\u4e8e\u8fdb\u7a0b\u7684\u63a7\u5236\u4fe1\u606f\uff0c\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u3002

\u5185\u6838\u90e8\u5206

\u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7528\u6765\u63cf\u8ff0\u8fdb\u7a0b\u7684\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u5305\u542b\u4e86\u8fdb\u7a0b\u7684\u6240\u6709\u4fe1\u606f\uff0c\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u91cd\u8981\u7684\u6570\u636e\u7ed3\u6784\u4e4b\u4e00\u3002\u53ef\u4ee5\u8bf4\uff0cPCB \u662f\u8fdb\u7a0b\u5b58\u5728\u7684\u552f\u4e00\u6807\u5fd7\u3002

\u901a\u5e38\u6765\u8bf4\uff0cPCB \u53ef\u80fd\u5305\u542b\u8fd9\u4e9b\u5185\u5bb9\uff1a

\u4e24\u4e2a\u90e8\u5206\u5728\u903b\u8f91\u4e0a\u7684\u5173\u7cfb\u662f\uff0c\u7528\u6237\u90e8\u5206\u5212\u5206\u5e76\u5b9e\u9645\u5b58\u50a8\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u6570\u636e\u8d44\u6e90\uff08\u5305\u62ec\u7a0b\u5e8f\u8fd0\u884c\u7684\u4ee3\u7801\uff09\uff0c\u800c\u5185\u6838\u90e8\u5206\u5b58\u50a8\u8fdb\u7a0b\u7684\u5143\u6570\u636e\uff0c\u5305\u62ec\u63a7\u5236\u4fe1\u606f\u4e0e\u7528\u6237\u90e8\u5206\u4e2d\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u7684\u5206\u914d\u548c\u4f7f\u7528\u60c5\u51b5\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u72b6\u6001","title":"\u8fdb\u7a0b\u7684\u72b6\u6001","text":"

\u5728\u5355\u673a\u8bed\u5883\u4e0b\uff0c\u8fdb\u7a0b\u8c03\u5ea6\u4e00\u4e2a\u6bd4\u8f83\u6838\u5fc3\u7684\u90e8\u5206\u5c31\u662f\u5c06 CPU \u8d44\u6e90\u7ed9\u54ea\u4e2a\u4efb\u52a1\u7528\u3002\u800c\u5e76\u4e0d\u662f\u4efb\u4f55\u8fdb\u7a0b\u5728\u4efb\u4f55\u65f6\u523b\u90fd\u53ef\u4ee5\u76f4\u63a5\u83b7\u5f97 CPU \u8d44\u6e90\u5e76\u76f4\u63a5\u5f00\u59cb\u4f7f\u7528\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u5bf9\u8fdb\u7a0b\u7684\u72b6\u6001\u8fdb\u884c\u5efa\u6a21\u3002

\u8fdb\u7a0b\u5728\u5c31\u7eea\u6001\u9700\u8981\u7b49\u5f85 CPU \u8d44\u6e90\u7684\u6d3e\u53d1(dispatch)\uff0c\u63a5\u53d7\u8c03\u5ea6\uff1b\u5728\u963b\u585e\u6001\u9700\u8981\u7b49\u5f85\u5bf9\u5e94\u7684 I/O \u5b8c\u6210\u6216\u4e8b\u4ef6\u5b8c\u6210\uff0c\u56e0\u800c\u5b58\u5728\u4e00\u79cd\u7ed3\u6784\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u4e9b\u201c\u76f8\u5bf9\u9759\u6b62\u201d\u7684\u8fdb\u7a0b\u3002\u901a\u5e38\u4f7f\u7528\u5c31\u7eea\u961f\u5217(ready queue)\u548c\u7b49\u5f85\u961f\u5217(wait queue)\u6765\u5b9e\u73b0\uff0c\u5176\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

\u5b9e\u9645\u5b9e\u73b0\u4e2d\uff0c\u7531\u4e8e\u7b49\u5f85\u7684 I/O \u6216\u4e8b\u4ef6\u4e0d\u540c\uff0c\u53ef\u80fd\u7ef4\u62a4\u591a\u4e2a\u7b49\u5f85\u961f\u5217\uff0c\u4e8e\u662f\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u7684\u60c5\u51b5\u53ef\u80fd\u5982\u4e0b\uff1a

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7ba1\u7406","title":"\u8fdb\u7a0b\u7ba1\u7406","text":"

\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u8ba8\u8bba\u4e86\u8fdb\u7a0b\u7684\u5f62\u5f0f\u548c\u4e00\u4e2a\u4e2a\u79bb\u6563\u7684\u72b6\u6001\uff0c\u73b0\u5728\u6211\u4eec\u6765\u8bb2\u8bb2\u8fdb\u7a0b\u5728\u51e0\u4e2a\u9636\u6bb5\u7684\u52a8\u6001\u8fc7\u7a0b\u3002

\u7528\u6237\u8fdb\u7a0b\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u603b\u4f53\u4e0a\u6765\u8bb2\u9075\u5faa\u4e00\u4e2a\u6811\u72b6\u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u552f\u4e00\u6807\u8bc6\u7b26\u8fdb\u7a0b\u53f7\uff08\u901a\u5e38\u88ab\u79f0\u4e3a pid\uff0c\u4f46\u5728\u7279\u5b9a\u8bed\u5883\u4e0b\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u542b\u4e49\uff09\u3002\u5982\u4e0b\u56fe\u662f Linux \u7684\u4e00\u4e2a\u8fdb\u7a0b\u6811\u3002

\u4f60\u4e5f\u53ef\u4ee5\u5728 Linux \u4e2d\u4f7f\u7528 pstree \u6765\u67e5\u770b\u8fdb\u7a0b\u6811\u3002 \u8a00\u4e0b\u4e4b\u610f\u5c31\u662f\u8fdb\u7a0b\u4e4b\u95f4\u5b58\u5728\u4e00\u79cd\u7236\u5b50\u5173\u7cfb\uff0c\u5373 child \u8fdb\u7a0b\u662f\u7531 parent \u8fdb\u7a0b\u521b\u5efa\u7684\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9664\u4e86\u81ea\u5df1\u7684 pid \u8fd8\u6709 ppid \u6765\u6807\u8bc6\u5b83\u7684 parent \u8fdb\u7a0b\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u521b\u5efa","title":"\u8fdb\u7a0b\u7684\u521b\u5efa","text":"

child \u8fdb\u7a0b\u7684\u8d44\u6e90\u53ef\u80fd\u76f4\u63a5\u6765\u81ea\u64cd\u4f5c\u7cfb\u7edf\u7684\u5206\u914d\uff0c\u4e5f\u53ef\u80fd\u6765\u81ea parent \u8fdb\u7a0b\u7684\u5206\u914d\uff0c\u9650\u5236\u4f7f\u7528\u540e\u8005\u7684\u597d\u5904\u662f\u80fd\u591f\u907f\u514d\u56e0\u4e3a\u521b\u5efa\u592a\u591a\u5b50\u8fdb\u7a0b\u800c\u5bfc\u81f4\u8d44\u6e90\u4e0d\u591f\u7528\u3002\u7279\u522b\u7684\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u8fd9\u68f5\u6811\u7684\u6839\u662f systemd\uff0c\u5386\u53f2\u4e0a\u4e5f\u66fe\u53eb\u8fc7 init\uff0c\u5b83\u662f\u64cd\u4f5c\u7cfb\u7edf\u542f\u52a8\u540e\u8fd0\u884c\u7684\u7b2c\u4e00\u4e2a\u7528\u6237\u8fdb\u7a0b\uff0c\u81f3\u5c11\u5728 Linux \u4e2d\uff0c\u5b83\u7684 pid \u88ab\u5206\u914d\u4e3a 1\uff0c\u800c\u5b83\u7684 ppid \u662f 0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u4e2a\u8fdb\u7a0b\u7684 parent \u662f scheduler \u800c\u975e\u4e00\u4e2a\u8fdb\u7a0b2\u3002

\u5728 Linux \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 fork \u6765\u521b\u5efa\u4e00\u4e2a child \u8fdb\u7a0b\uff0c\u5728\u8fd9\u91cc\u5148\u5f15\u5165\u5982\u4f55\u5b9e\u73b0\u662f\u4e3a\u4e86\u5f15\u5165\u4e00\u4e2a\u53ef\u4ee5\u501f\u6765\u63cf\u8ff0\u8fc7\u7a0b\u7684\u8bed\u8a00\uff0c\u6211\u4eec\u4ee5\u4e0b\u9762\u7684 C \u7a0b\u5e8f\u4e3a\u4f8b\u5c55\u5f00\u4e4b\u540e\u7684\u8ba8\u8bba\u3002

#include <stdio.h>\n#include <unistd.h>\n#include <sys/wait.h>\n#include <sys/types.h>\n\nint main() {\nprintf(\"A process starts!\\n\");\n\npid_t pid;\npid = fork();\nif (pid < 0) {\nprintf(\"Fork failed!\\n\");\n} else if (pid == 0) {\n// sleep(1);\nprintf(\"pid is zero, so it's child process!\\n\");\n} else {\n// wait(NULL);\n// sleep(1);\nprintf(\"pid is nonzero thus it's parent process!\\n\");\n}\n}\n

\u7b2c 10 \u884c\u9ad8\u4eae\u7684 fork() \u8bed\u53e5\u521b\u5efa\u4e86\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u8be5\u8fdb\u7a0b\u53ea\u6709\u8fdb\u7a0b\u53f7\u4e0e parent \u8fdb\u7a0b\u4e0d\u4e00\u6837\uff0c\u540c\u65f6\u901a\u8fc7\u68c0\u67e5\u8fd4\u56de\u503c pid \u6765\u5224\u65ad\u5c5e\u4e8e parent \u8fd8\u662f child\u3002

\u5982\u679c\u7b2c 18 \u884c\u4ecd\u7136\u88ab\u6ce8\u91ca\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u8bf6 child \u8fdb\u7a0b\u5c06\u5e76\u53d1\u6267\u884c\uff0c\u5373\u5b8c\u6210 fork() \u540e\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u4ece 11 \u884c\u5f00\u59cb\u7ee7\u7eed\u5411\u4e0b\u5e76\u53d1\u7684\u6267\u884c\uff0c\u4e92\u4e0d\u963b\u585e\uff1b\u5982\u679c 18 \u884c\u7684\u6ce8\u91ca\u88ab\u53d6\u6d88\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u5c06\u7b49\u5f85 child \u8fdb\u7a0b\u7ed3\u675f\u540e\u518d\u7ee7\u7eed\u3002\u8bfb\u8005\u53ef\u4ee5\u5c1d\u8bd5\u6392\u5217\u7ec4\u5408\u4e24\u4e2a\u6ce8\u91ca\u6765\u89c2\u5bdf\u7a0b\u5e8f\u8fd0\u884c\u7684\u7ed3\u679c\u4f1a\u5982\u4f55\u53d8\u5316\u3002

\u903b\u8f91\u4e0a\u521b\u5efa\u7684\u65b0\u8fdb\u7a0b\u6709\u4e24\u79cd\u60c5\u51b5\uff1a

  1. \u590d\u5236 parent \u8fdb\u7a0b\u7684\u4ee3\u7801\u6570\u636e\uff1b
  2. \u8f7d\u5165\u65b0\u7684\u7a0b\u5e8f\u5e76\u7ee7\u7eed\u6267\u884c\uff1b

\u800c\u5b9e\u9645\u5728 Linux \u4e2d\uff0c\u7b2c\u4e00\u79cd\u901a\u8fc7 fork() \u5b9e\u73b0\uff0c\u7b2c\u4e8c\u79cd\u901a\u8fc7 fork() \u540e execXX() \u5b9e\u73b0\uff0cexecXX() \u4f1a\u8986\u76d6\u90a3\u4e2a\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u6267\u884c\u5176\u4ed6\u7a0b\u5e8f\u30023 4

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u7ec8\u6b62","title":"\u8fdb\u7a0b\u7684\u7ec8\u6b62","text":"

\u5f53\u8fdb\u7a0b\u8c03\u7528 exit() \u8fd9\u4e2a\u7cfb\u7edf\u8c03\u7528\u65f6\uff0c\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u88ab\u7ec8\u6b62\uff0c\u8fd9\u610f\u5473\u7740\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u4e0d\u518d\u6267\u884c\uff0c\u5176\u8d44\u6e90\u5c06\u88ab\u91ca\u653e\uff0c\u540c\u65f6\u2014\u2014\u8fd4\u56de\u72b6\u6001\u503c\uff0c\u800c\u8fd9\u4e2a\u72b6\u6001\u503c\u5c06\u88ab parent \u8fdb\u7a0b\u7684 wait() \u63a5\u6536\u3002\u7279\u522b\u7684\uff0c\u5982\u679c parent \u8fdb\u7a0b\u5c1a\u672a\u8c03\u7528 wait()\uff0c\u5219\u8fd9\u4e2a child \u8fdb\u7a0b\u8fd8\u4e0d\u4f1a\u5b8c\u5168\u6d88\u5931\uff0c\u56e0\u4e3a\u8981\u8fd4\u56de\u7684\u4e1c\u897f\u8fd8\u6ca1\u8fd4\u56de\uff0c\u8fd9\u79cd\u903b\u8f91\u4e0a\u5df2\u7ecf\u7ec8\u6b62\uff0c\u4f46\u4ecd\u7136\u5360\u6709\u4e00\u90e8\u5206\u8d44\u6e90\uff0c\u7b49\u5f85 parent \u8fdb\u7a0b\u8c03\u7528 wait() \u7684\u8fdb\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u50f5\u5c38\u8fdb\u7a0b(zombie)\u3002\u4e00\u4e2a\u8fdb\u7a0b\u53d8\u6210\u50f5\u5c38\u8fdb\u7a0b\u662f\u5f88\u666e\u901a\u7684\uff0c\u5173\u952e\u5728\u4e8e\uff0c\u5982\u679c parent \u8fdb\u7a0b\u4e0d\u8c03\u7528 wait()\uff0c\u90a3\u7b49 parent \u7ec8\u6b62\u540e\uff0c\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u53ef\u80fd\u4ecd\u7136\u4e00\u76f4\u5b58\u5728\uff0c\u6b64\u65f6\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u540c\u65f6\u662f\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b(orphan)\u2014\u2014\u5373\u6ca1\u6709 parent \u8fdb\u7a0b\u7684\u8fdb\u7a0b\uff0c\u8fd9\u663e\u7136\u662f\u4e0d\u5408\u7406\u7684\uff0cUNIX \u7684\u89e3\u51b3\u529e\u6cd5\u662f\uff0c\u8ba9\u6240\u6709\u5b64\u513f\u8fdb\u7a0b\u90fd\u6210\u4e3a init/systemd \u7684 child \u8fdb\u7a0b\uff0c\u7531 init/systemd \u6765 wait() \u5b83\u4eec\u3002

\u5728\u67d0\u4e9b\u7cfb\u7edf\u91cc\uff0c\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u7ea7\u8054\u7ec8\u6b62(cascading termination)\u6765\u907f\u514d\u5b64\u513f\u8fdb\u7a0b\u7684\u51fa\u73b0\uff0c\u5373\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u7ec8\u6b62\u65f6\uff0c\u5b83\u7684 child \u4e5f\u5e94\u5f53\u88ab\u9012\u5f52\u5730\u7ec8\u6b62\u3002

daemon

\u5b88\u62a4\u8fdb\u7a0b\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5728\u201c\u540e\u53f0\u201d\u957f\u671f\u8fd0\u884c\uff0c\u4f8b\u5982\u67d0\u4e9b\u6570\u636e\u5e93\u670d\u52a1\u3001\u53cd\u4ee3\u7406\u670d\u52a1\u7b49\uff0c\u800c\u975e\u50cf\u666e\u901a\u7684\u7528\u6237\u7a0b\u5e8f\u4e00\u6837\u4f9d\u8d56\u4e8e\u7528\u6237\u4ea4\u4e92\u3002

\u4e3a\u4e86\u5b9e\u73b0\u201c\u957f\u671f\u8fd0\u884c\u201d\uff0c\u6211\u4eec\u9700\u8981\u8ba9\u5b83\u4ee5 init/systemd \u4e3a parent\uff0c\u56e0\u4e3a\u4efb\u4f55\u5176\u5b83\u8fdb\u7a0b\u90fd\u6709\u53ef\u80fd\u5728\u64cd\u4f5c\u7cfb\u7edf\u8fd0\u884c\u7684\u65f6\u5019\u7ec8\u6b62\u3002

\u90a3\u4e48\u4e00\u79cd\u529e\u6cd5\u5c31\u662f\u6211\u4eec\u9012\u5f52\u5730 fork() \u4e24\u6b21\uff0c\u7136\u540e\u7ec8\u6b62\u7b2c\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u5373\u7ec8\u6b62\u7b2c\u4e8c\u4e2a\u8fdb\u7a0b\u7684 parent\uff0c\u8fd9\u6837\u5b83\u5c31\u80fd\u6210\u4e3a\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b\uff0c\u8fdb\u800c\u88ab init/systemd \u63a5\u7ba1\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u95f4\u901a\u4fe1","title":"\u8fdb\u7a0b\u95f4\u901a\u4fe1","text":"

\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u53d7\u5230\u5176\u5b83\u8fdb\u7a0b\u7684\u5f71\u54cd\uff0c\u6216\u4f1a\u5f71\u54cd\u5176\u5b83\u8fdb\u7a0b\uff0c\u90a3\u4e48\u6211\u4eec\u79f0\u4e4b\u4e3a\u534f\u4f5c\u8fdb\u7a0b(cooperation process)\uff0c\u800c\u8fdb\u7a0b\u95f4\u901a\u4fe1(Inter-Process Communication, IPC)\u652f\u6301\u4e86\u8fdb\u7a0b\u534f\u4f5c\uff0c\u4ee5\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u7684\u6570\u636e\u4ea4\u6362\u3002

Communications models. (a) Shared memory. (b) Message passing.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u8c03\u5ea6","title":"\u8fdb\u7a0b\u8c03\u5ea6","text":"

\u591a\u9053\u6280\u672f\u5f15\u5165\u540e\uff0c\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\uff0c\u8fdb\u7a0b\u7684\u6570\u91cf\u6211\u4eec\u79f0\u4e4b\u4e3a\u591a\u9053\u7684\u5ea6(degree of multiprogramming)\u3002\u4e00\u6bb5\u65f6\u95f4\u5185\u82e5\u5e72\u8fdb\u7a0b\u5e76\u53d1\u6267\u884c\uff0c\u56e0\u6b64\u8c03\u5ea6\u95ee\u9898(scheduling)\u2014\u2014CPU scheduler \u5c06\u51b3\u5b9a\u5728\u4f55\u65f6\u5c06 CPU \u8d44\u6e90\u5206\u914d\u7ed9\u54ea\u4e00\u4e2a\u5c31\u7eea\u8fdb\u7a0b\uff0c\u4f7f\u4e4b\u8fdb\u5165\u8fd0\u884c\u6001\u2014\u2014\u8fd9\u4e2a\u95ee\u9898\u5c31\u5f88\u91cd\u8981\u4e86\u3002\u603b\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u9ad8\u6548\u3001\u516c\u5e73\u7684\u7684\u8c03\u5ea6\uff0c\u4ee5\u6b64\u4fdd\u8bc1 CPU \u5229\u7528\u7387\u8db3\u591f\u9ad8\uff0c\u540c\u65f6\u53c8\u4fdd\u8bc1\u8ba1\u7b97\u673a\u529f\u80fd\u6b63\u5e38\u8fd0\u4f5c\u3002

Diagram of process state.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u65f6\u673a","title":"\u8c03\u5ea6\u7684\u65f6\u673a","text":"

\u6211\u4eec\u518d\u6b21\u5ba1\u89c6\u8fdb\u7a0b\u72b6\u6001\u7684 FSM\uff0c\u53d1\u73b0\u6240\u6709\u72b6\u6001\u90fd\u662f\u56f4\u7ed5\u7740 ready/running \u5c55\u5f00\u7684\uff0c\u800c CPU \u5177\u4f53\u8d44\u6e90\u5206\u914d\u7684\u8fc7\u7a0b\u4e5f\u6b63\u662f\u901a\u8fc7\u8fd9\u4e24\u4e2a\u72b6\u6001\u7684\u8f6c\u5316\u4f53\u73b0\u7684\u3002\u800c \u2776 \u5f53\u8fd0\u884c\u6001\u7684\u8fdb\u7a0b\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u4e3b\u52a8\u79bb\u5f00\u8fd0\u884c\u6001\u65f6\uff0c\u6216 \u2777 \u5f53\u5c31\u7eea\u6001\u7684\u67d0\u4e2a\u8fdb\u7a0b\u9700\u8981\u7acb\u523b\u5f97\u5230 CPU \u8d44\u6e90\u65f6\uff0cscheduler \u4f1a\u8fdb\u884c\u8c03\u5ea6\u3002\u4e0a\u9762\u8fd9\u53e5\u8bdd\u53cd\u5e94\u5728\u3000FSM \u4e0a\uff0c\u5c31\u662f \u2776 \u8fdb\u7a0b\u4ece\u8fd0\u884c\u6001\u8f6c\u5316\u4e3a\u5176\u5b83\u72b6\u6001\uff0c\u5373\u7bad\u5934\u4ece running \u51fa\u53d1\u5411\u5916\uff1b\u2777 \u8fdb\u7a0b\u4ece\u5176\u5b83\u72b6\u6001\u8f6c\u5316\u4e3a\u5c31\u7eea\u6001\uff0c\u5373\u7bad\u5934\u4ece\u5916\u6307\u5411 ready\uff0c\u8fd9\u91cc\u5176\u5b9e\u8fd8\u6697\u542b\u4e86\u4e00\u4e2a ready \u6307\u5411 ready \u7684\u7bad\u5934\uff0c\u5728\u4f8b\u5982 priority aging \u7684\u60c5\u51b5\u4e0b\uff0cready \u4e2d\u53ef\u80fd\u7a81\u7136\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\u8db3\u591f\u5927\u4e86\u5c31\u4f1a\u53d1\u751f\u62a2\u5360\u5f0f\u8c03\u5ea6\u3002\u4e0a\u9762\u63cf\u8ff0\u7684\u8fd9\u4e24\u79cd\u65f6\u673a\u4e0b\u4ea7\u751f\u7684\u8c03\u5ea6\uff0c\u5c31\u5206\u522b\u5b9a\u4e49\u4e3a\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6(non-preemptive scheduling)\u548c\u62a2\u5360\u5f0f\u8c03\u5ea6(preemptive scheduling)\u3002

Diagram of process state.

\u4e24\u8005\u672c\u8d28\u4e0a\u7684\u533a\u522b\u5c31\u662f\uff0c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u662f\u7531\u5df2\u7ecf\u62e5\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u4e3b\u52a8\u91ca\u653e CPU \u8d44\u6e90\u5f15\u8d77\u7684\uff0c\u800c\u62a2\u5360\u5f0f\u8c03\u5ea6\u5219\u662f\u4e0d\u5360\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u7d22\u53d6 CPU \u8d44\u6e90\u6210\u529f\u5f15\u8d77\u7684\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u8fc7\u7a0b","title":"\u8c03\u5ea6\u7684\u8fc7\u7a0b","text":"

\u7531 CPU scheduler \u9009\u62e9\u54ea\u4e00\u4e2a\u5c31\u7eea\u6001\u7684\u5c06\u8981\u88ab\u6267\u884c\u540e\uff0c\u7531 dispatcher \u6765\u5b8c\u6210\u5177\u4f53\u7684\u5207\u6362\u5de5\u4f5c\u5305\u62ec\uff1a

  1. \u5728\u4e24\u4e2a\u8fdb\u7a0b\u95f4\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362\uff1b
  2. \u5207\u6362\u5230\u7528\u6237\u6001\uff1b
  3. \u8df3\u8f6c\u5230\u7528\u6237\u7a0b\u5e8f\u4e2d\u5408\u9002\u7684\u4f4d\u7f6e\u4ee5\u7ee7\u7eed\u8fdb\u7a0b\u6267\u884c\uff1b

\u800c\u4ece dispatcher \u505c\u6b62\u4e0a\u4e00\u4e2a\u8fd0\u884c\u65f6\u7684\u8fdb\u7a0b\uff0c\u5b8c\u6210\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u5e76\u542f\u52a8\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5ef6\u65f6\uff0c\u79f0\u4e3a dispatch latency\u3002

\u4e0a\u4e0b\u6587\u5207\u6362

\u5207\u6362\u8fdb\u7a0b\u7684\u65f6\u5019\u9700\u8981\u4fdd\u5b58\u201c\u73b0\u573a\u201d\uff0c\u5e76\u5728\u4e0b\u4e00\u6b21\u62ff\u51fa\u8fd9\u4e2a\u8fdb\u7a0b\u51c6\u5907\u6267\u884c\u4e4b\u524d\u6062\u590d\u201c\u73b0\u573a\u201d\uff0c\u4ee5\u6b64\u6765\u4fdd\u8bc1\u8fdb\u7a0b\u6267\u884c\u7684\u4e00\u81f4\u6027\u3002\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u73b0\u573a\u201d\u88ab\u79f0\u4e3a\u4e0a\u4e0b\u6587(context)\uff0c\u8868\u793a\u4e00\u79cd\u201c\u8bed\u5883\u201d\uff1b\u800c\u4fdd\u62a4-\u6062\u590d\u7684\u8fc7\u7a0b\uff0c\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u4e0a\u4e0b\u6587\u5207\u6362(context switch)\u3002

\u5176\u4e2d\uff0c\u4e0a\u4e0b\u6587\u53ef\u80fd\u5305\u62ec \u2460 CPU \u5bc4\u5b58\u5668\u4e2d\u7684\u503c\uff0c\u2461 \u8fdb\u7a0b\u72b6\u6001\uff0c\u2462 \u5185\u5b58\u7684\u7ba1\u7406\u4fe1\u606f\u7b49\u3002

\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u76f8\u5173\u5185\u5bb9\u5728 Lab2 \u91cc\u6709\u6240\u6d89\u53ca\uff0c\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u3002

(a) Diagram showing context switch from process to process. (b) Role of dispatcher.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7b97\u6cd5","title":"\u8c03\u5ea6\u7b97\u6cd5","text":"

\u5728\u8ba8\u8bba\u6709\u54ea\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u77e5\u9053\u600e\u6837\u7b97\u4e00\u4e2a\u597d\u7684\u8c03\u5ea6\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bc4\u4ef7\uff0c\u8c03\u5ea6\u7b97\u6cd5\u7684\u8bc4\u4ef7\u6807\u51c6\u4e5f\u4e0d\u662f\u5355\u4e00\u7684\uff1b\u5bf9\u5e94\u7684\uff0c\u4e0d\u540c\u8c03\u5ea6\u7b97\u6cd5\u6709\u5404\u81ea\u7684\u4f18\u7f3a\u70b9\uff0c\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u548c\u9700\u6c42\u6709\u6240\u9009\u62e9\u3002\u901a\u5e38\u6765\u8bf4\u6709\u8fd9\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u7684\u6307\u6807(scheduling criteria)\uff1a

\u4e0a\u9762\u4e94\u4e2a\u524d\u4e24\u4e2a\u8d8a\u5927\u8d8a\u597d\uff0c\u540e\u4e09\u4e2a\u8d8a\u5c0f\u8d8a\u597d\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u5f00\u59cb\u4ecb\u7ecd\u5404\u79cd\u8c03\u5ea6\u7b97\u6cd5\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u4e0b\u8c03\u5ea6\u7b97\u6cd5\u4e2d\u5b58\u5728\u4e00\u4e9b\u7406\u60f3\u5316\u7684\u5efa\u6a21\uff08\u4f8b\u5982\u5047\u8bbe\u6211\u4eec\u77e5\u9053\u8fdb\u7a0b\u9700\u8981\u4f7f\u7528\u591a\u4e45 CPU\uff09\uff0c\u800c\u6211\u4eec\u91cd\u70b9\u9700\u8981\u638c\u63e1\u5b83\u7684\u601d\u8def\uff0c\u505a\u5230\u80fd\u753b\u7518\u7279\u56fe\u3001\u80fd\u7b97\u65f6\u95f4\u3002\u6b64\u5916\uff0c\u8fd9\u91cc\u6211\u4eec\u4ee5\u201c\u591a\u9053\u201d\u4e3a\u8bed\u5883\uff0c\u5373\u5982\u679c\u4e0d\u662f\u7279\u522b\u8bf4\u660e\uff0c\u4e0d\u8003\u8651\u5206\u65f6\u6280\u672f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--first-come-first-serve-fcfs","title":"\u7b97\u6cd5 | First-Come, First-Serve (FCFS)","text":"

FCFS \u662f\u6700\u57fa\u672c\u7684\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65b9\u6cd5\u5c31\u662f\u6309\u7167\u8fdb\u7a0b\u5148\u6765\u540e\u5230\u7684\u987a\u5e8f\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u901a\u8fc7\u4e00\u4e2a FIFO \u7684\u961f\u5217\u5b9e\u73b0\u3002FCFS \u6700\u5927\u7684\u4f18\u70b9\u5c31\u662f\u5b9e\u73b0\u7b80\u5355\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--shortest-job-first-sjf--shortest-remaining-time-first-srtf","title":"\u7b97\u6cd5 | Shortest-Job-First (SJF) / Shortest-Remaining-Time-First (SRTF)","text":"

SJF \u7684\u601d\u8def\u662f\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u5c0f\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u5f88\u957f\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fdb\u7a0b\u8fd0\u884c\u65f6\u95f4\u6709\u591a\u4e45\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

\u73b0\u5728\u5b83\u4eec\u6309\u7167\u987a\u5e8f\u8fdb\u5165 ready queue\uff0c\u8bf7\u5206\u522b\u8ba1\u7b97 FCFS \u4e0b\u548c SJF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

\u9996\u5148\u770b FCFS\uff0c\u5373\u6309\u7167\u987a\u5e8f\u6267\u884c\uff0c\u753b\u51fa\u7518\u7279\u56fe\uff1a

gantt\n    title FCFS\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P1: a, 00, 24\n    P2: b, 24, 27\n    P3: c, 27, 30

\u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 24 + 27) / 3 = 17\\)\u3002

\u73b0\u5728\u6309\u7167 SJF \u6765\uff0c\u987a\u5e8f\u53d8\u4e3a P2 \u548c P3 \u5148\u6267\u884c\uff1a

gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P2: a, 00, 03\n    P3: b, 03, 06\n    P1: c, 06, 30

\u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 3 + 6) / 3 = 3\\)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4f7f\u7528 SJF \u4ee5\u540e\u5bf9\u4e8e\u8fd9\u79cd\u524d\u9762\u653e\u4e86\u4e2a\u5927\u4efb\u52a1\u7684\u60c5\u51b5\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u5927\u5927\u51cf\u5c11\u3002

\u8fd9\u79cd\u505a\u6cd5\u53c8\u88ab\u79f0\u4e3a Shortest-Next-CPU-Burst\uff0c\u5b83\u662f\u4e00\u79cd\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u7b97\u6cd5\uff0c\u4f46\u5047\u8bbe\u6211\u4eec\u5728\u6267\u884c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6709\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b\u52a0\u5165\u4e86 ready queue\uff0c\u800c\u4e14\u8fd9\u4e2a\u8fdb\u7a0b\u7684\u6267\u884c\u65f6\u95f4\u6bd4\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u7684\u5269\u4f59\u65f6\u95f4\u8fd8\u8981\u77ed\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u7ee7\u7eed\u6267\u884c\u5b8c\u5f53\u524d\u7684\u8fdb\u7a0b\u624d\u884c\u2014\u2014\u56e0\u4e3a\u5b83\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u800c\u663e\u7136\u8fd9\u4e2a\u8fc7\u7a0b\u662f\u53ef\u4ee5\u901a\u8fc7\u62a2\u5360\u5f0f\u8c03\u5ea6\u6765\u4f18\u5316\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86 Shortest-Remaining-Time-First (SRTF)\uff0c\u5176\u8868\u8ff0\u662f\uff1a\u603b\u662f\u6267\u884c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u3002\u5176\u4f18\u7f3a\u70b9\u4e0e SJF \u4e00\u81f4\u3002

\u6211\u4eec\u53ea\u9700\u8981\u8003\u8651\u6240\u6709\u62a2\u5360\u5f0f\u8c03\u5ea6\u548c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65f6\u673a\uff0c\u5e76\u9009\u62e9\u6b64\u65f6\u7684\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u8fdb\u884c\u8c03\u5ea6\u5373\u53ef\u3002

\u5982\u4f55\u5f97\u5230\u5269\u4f59\u65f6\u95f4

\u6211\u4eec\u77e5\u9053\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u6240\u9700\u8981\u7684\u65f6\u95f4\u662f\u4e00\u4e2a\u65e0\u6cd5\u5728\u8fd0\u884c\u7ed3\u675f\u524d\u5f97\u5230\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4f7f\u7528\u8fd9\u4e2a\u4e1c\u897f\u8fdb\u884c\u8c03\u5ea6\u5c31\u663e\u5f97\u5341\u5206\u4e0d\u5408\u7406\u3002\u4f46\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u9884\u6d4b\u7684\u65b9\u6cd5\u4f30\u8ba1\u8fd0\u884c\u7684\u5269\u4f59\u65f6\u95f4\uff0c\u4f46\u662f\u65e2\u7136\u662f\u9884\u6d4b\u5c31\u4f1a\u6709\u4e0d\u51c6\u786e\uff0c\u6240\u4ee5 SJF/SRTF \u5e76\u4e0d\u80fd\u5b9e\u73b0\u7406\u8bba\u4e0a\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u4f18\u3002\u81f3\u4e8e\u5982\u4f55\u9884\u6d4b\uff0c\u4e66\u4e0a\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53eb exponential average \u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u4e0d\u5c55\u5f00\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

\u5b83\u4eec\u5230\u8fbe ready queue \u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

\u8bf7\u5206\u522b\u8ba1\u7b97 SJF \u4e0b\u548c SRTF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

\u5bf9\u4e8e SJF \u6765\u8bf4\uff0c\u5728\u7b2c 0 \u65f6\u523b\uff0c\u53ea\u6709 P1 \u53ef\u7528\uff0c\u6240\u4ee5\u53ea\u80fd\u6267\u884c P1\uff1bP1 \u6267\u884c\u7ed3\u675f\u540e\u6240\u6709\u5176\u5b83\u8fdb\u7a0b\u90fd\u53ef\u7528\u4e86\uff0c\u6b64\u65f6\u6309\u7167\u6b63\u5e38\u7684 SJF \u5373\u53ef\u5f97\u5230\u7ed3\u679c\u3002

gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 08\n\n    section P2\n    ready: b, 01, 08\n    run: e, 08, 12\n\n    section P3\n    ready: c, 02, 17\n    run: 17, 26\n\n    section P4\n    ready: d, 03, 12\n    run: f, 12, 17

\u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 7 + 15 + 9) / 4 = 7.75\\)\u3002

\u5bf9\u4e8e SRFT \u6765\u8bf4\uff0c\u540c\u6837\u4ece P1 \u5f00\u59cb\u6267\u884c\uff0c\u4f46\u662f\u7b2c\u4e00\u79d2 P2 \u8fdb\u5165\uff0c\u53d1\u73b0\u6b64\u65f6 P1 \u8fd8\u5269\u4e0b 7\uff0c\u800c P2 \u53ea\u9700\u8981 4\uff0c\u4e8e\u662f P2 \u9700\u8981\u62a2\u5360 P1 \u7684\u8d44\u6e90\uff1b\u4e4b\u540e\u7684\u8fc7\u7a0b\u7c7b\u4f3c

gantt\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 01\n    ready(rest 7): e, 01, 10\n    run: g, 10, 17\n\n    section P2\n    run: b, 01, 05\n\n    section P3\n    ready(rest 9): c, 02, 17\n    run: h, 17, 26\n\n    section P4\n    ready(rest 5): d, 03, 05\n    run: f, 05, 10

\u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\(((0+9) + 0 + 15 + 2) / 4 = 6.5\\)\u3002

\u53ef\u4ee5\u53d1\u73b0 SRTF \u80fd\u591f\u63d0\u5347 SJF \u7684\u6548\u7387\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--round-robin-rr","title":"\u7b97\u6cd5 | Round-Robin (RR)","text":"

RR \u8c03\u5ea6\u5c31\u662f\u4f7f\u7528\u5206\u65f6\u6280\u672f\u540e\u7684 FCFS \u8c03\u5ea6\uff0c\u56e0\u6b64\u5b83\u4e5f\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u6700\u591a\u8fde\u7eed\u6267\u884c\u4e00\u4e2a\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u5b8c\u6210\u540e\u88ab\u63d2\u5165\u5230 FIFO ready queue \u7684\u672b\u5c3e\uff0c\u5e76\u53d6\u51fa FIFO ready queue \u7684\u961f\u9996\u8fdb\u884c\u6267\u884c\u3002

\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u5206\u65f6\u7684\u65f6\u5019\u4e5f\u8bf4\u8fc7\uff0c\u5206\u65f6\u6280\u672f\u901a\u8fc7\u4f18\u5316\u54cd\u5e94\u65f6\u95f4\u89e3\u51b3\u4e86\u7528\u6237\u4ea4\u4e92\u95ee\u9898\uff0cRR \u8c03\u5ea6\u867d\u7136\u76f8\u6bd4 SJF \u6709\u4e86\u66f4\u957f\u7684\u7b49\u5f85\u65f6\u95f4\uff0c\u4f46\u662f\u6709\u4e86\u66f4\u77ed\u7684\u54cd\u5e94\u65f6\u95f4\uff0c\u800c\u5b9e\u9645\u76f4\u63a5\u5f71\u54cd\u7528\u6237\u4ea4\u4e92\u95ee\u9898\u7684\u5e94\u8be5\u662f\u54cd\u5e94\u65f6\u95f4\u3002

\u4e00\u4e2a\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cRR \u8c03\u5ea6\u6709\u4e00\u4e2a\u201c\u8d85\u53c2\u6570\u201d\uff0c\u5373\u65f6\u95f4\u7247\u7684\u957f\u5ea6\u3002\u7406\u8bba\u4e0a\uff0c\u65f6\u95f4\u7247\u7ea6\u77ed\uff0c\u54cd\u5e94\u65f6\u95f4\u8d8a\u77ed\uff1b\u4f46\u66f4\u77ed\u7684\u65f6\u95f4\u7247\u5c06\u5e26\u6765\u66f4\u9891\u7e41\u7684\u8fdb\u7a0b\u5207\u6362\uff0c\u4ece\u800c\u5e26\u6765\u66f4\u591a\u7684 dispatch latency\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--priority-scheduling","title":"\u7b97\u6cd5 | Priority Scheduling","text":"

\u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u601d\u8def\u662f\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u4f18\u5148\u7ea7\u9ad8\u7684\u8fdb\u7a0b\u4f18\u5148\u8fd0\u884c\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u5f88\u9ad8\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\u3002

\u4f60\u53ef\u80fd\u53d1\u73b0\u4e86\uff0c\u5982\u679c\u628a\u4e0a\u9762\u8fd9\u53e5\u8bdd\u7684\u201c\u4f18\u5148\u7ea7\u6700\u9ad8\u201d\u6539\u6210\u201c\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d/\u201c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d\uff0c\u90a3\u5c31\u548c SJF/SRTF \u4e00\u6a21\u4e00\u6837\u4e86\uff0cSJF/SRTF \u5b9e\u9645\u4e0a\u5c31\u662f\u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u56e0\u800c\u4f18\u5148\u7ea7\u8c03\u5ea6\u5f53\u7136\u662f\u53ef\u4ee5\u5b9e\u73b0\u62a2\u5360\u5f0f\u548c\u975e\u62a2\u5360\u5f0f\u4e24\u79cd\u7684\u3002

\u6b64\u5916\uff0c\u4f18\u5148\u7ea7\u7684\u5206\u914d\u53ef\u4ee5\u6839\u636e\u4f7f\u7528\u9700\u6c42\u8fdb\u884c\u8bbe\u8ba1\uff0c\u5b83\u53ef\u80fd\u662f\u4e00\u4e9b\u6d4b\u91cf\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u5177\u6709\u4e00\u4e9b\u88ab\u8d4b\u4e88\u7684\u610f\u4e49\uff0c\u751a\u81f3\u53ef\u4ee5\u662f\u4e00\u4e9b\u590d\u5408\u7684\u503c\uff1b\u4f18\u5148\u7ea7\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u662f\u9759\u6001\u7684\uff0c\u5148\u524d\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u9965\u997f\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u52a8\u6001\u7684\u4f18\u5148\u7ea7\u6765\u89e3\u51b3\uff1a\u4f18\u5148\u7ea7\u968f\u7740\u7b49\u5f85\u65f6\u95f4\u589e\u52a0\u4e0d\u65ad\u589e\u957f\uff0c\u7b49\u5f85\u8fc7\u4e45\u7684\u4efb\u52a1\u5c31\u4f1a\u88ab\u8d4b\u4e88\u8f83\u9ad8\u7684\u4f18\u5148\u7ea7\uff0c\u4ee5\u6b64\u907f\u514d\u9965\u997f\u7684\u53d1\u751f\uff0c\u8fd9\u79cd\u7b56\u7565\u53eb priority aging\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Queue Scheduling","text":"

\u65e2\u7136\u8c03\u5ea6\u7b97\u6cd5\u591a\u79cd\u591a\u6837\uff0c\u4ed6\u4eec\u9002\u914d\u4e0d\u540c\u7684\u9700\u6c42\uff0c\u90a3\u80fd\u5426\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u4f7f\u7528\u7279\u5b9a\u7b97\u6cd5\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 ready queue \u5206\u6210\u591a\u4e2a\u961f\u5217\uff0c\u6bcf\u4e2a\u961f\u5217\u4f7f\u7528\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\uff0c\u7136\u540e\u518d\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u8fd9\u79cd\u65b9\u6cd5\u88ab\u79f0\u4e3a\u591a\u7ea7\u961f\u5217\u8c03\u5ea6(multilevel queue scheduling)\u3002

\ud83c\udf30

\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u6309\u7167\u4f18\u5148\u7ea7\u5148\u540e\uff0c\u53ef\u80fd\u6709\u8fd9\u4e48\u4e9b\u961f\u5217\uff1a

  1. Real-time processes
  2. System processes
  3. Interactive processes
  4. Batch processes

\u5b83\u4eec\u7684\u4f18\u5148\u7ea7\u968f\u7740 1 -> 4 \u9012\u51cf\uff0c\u800c\u5f53\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u4e2d\u5b58\u5728\u4efb\u52a1\u65f6\uff0c\u4f18\u5148\u7ea7\u4f4e\u7684\u961f\u5217\u4fbf\u4e0d\u4f1a\u53c2\u4e0e\u8c03\u5ea6\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u9ad8\u4f18\u5148\u7ea7\u7684\u961f\u5217\u4e2d\u51fa\u73b0\u65b0\u7684\u4efb\u52a1\u65f6\uff0c\u4e5f\u4f1a\u62a2\u5360\u6b63\u5728\u8fd0\u884c\u7684\u4f4e\u4f18\u5148\u7ea7\u961f\u5217\u7684\u4efb\u52a1\u3002

\ud83c\udf30

\u53c8\u6bd4\u5982\uff0c\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u53ef\u80fd\u5206\u524d\u53f0(foreground)\u7a0b\u5e8f\u961f\u5217\u548c\u540e\u53f0(background)\u7a0b\u5e8f\u961f\u5217\uff0c\u800c\u6211\u4eec\u4f7f\u7528\u65f6\u95f4\u7247\u6765\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u4f46\u524d\u53f0\u5360\u7528 80% \u7684\u65f6\u95f4\uff0c\u800c\u540e\u53f0\u5360\u7528 20% \u7684\u65f6\u95f4\u3002

\u800c\u5728\u961f\u5217\u5185\u90e8\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u4f7f\u7528\u4e0d\u540c\u7684\u961f\u5217\u5185\u8c03\u5ea6\u7b97\u6cd5\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u7531\u4e8e\u524d\u53f0\u7a0b\u5e8f\u5f80\u5f80\u8981\u6c42\u66f4\u597d\u7684\u54cd\u5e94\u65f6\u95f4\u8868\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 RR \u8c03\u5ea6\uff1b\u800c\u5728\u540e\u53f0\u4f7f\u7528 FCFS \u8c03\u5ea6\u3002

Windows XP Scheduling

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-feedback-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Feedback Queue Scheduling","text":"

\u66f4\u8fdb\u4e00\u6b65\uff0cMultilevel Feedback Queue Scheduling \u5728 Multilevel Queue Scheduling \u7684\u57fa\u7840\u4e0a\uff0c\u5141\u8bb8\u8fdb\u7a0b\u5728\u961f\u5217\u95f4\u8f6c\u79fb\uff0c\u4ee5\u6b64\u5b9e\u73b0\u66f4\u7075\u6d3b\u66f4\u79d1\u5b66\u7684\u8c03\u5ea6\u3002\u4f8b\u5982\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5982\u679c\u4f7f\u7528\u4e86\u8fc7\u957f\u7684 CPU \u65f6\u95f4\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u4f4e\u7684\u961f\u5217\uff1b\u76f8\u53cd\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u7b49\u5f85\u4e86\u592a\u4e45\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u3002

\u5f53\u7136\uff0c\u76f8\u5bf9\u5e94\u7684\uff0c\u7b97\u6cd5\u590d\u6742\u5ea6\u4e5f\u4f1a\u63d0\u9ad8\u4e0d\u5c11\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7ebf\u7a0b","title":"\u7ebf\u7a0b","text":"

\u7ebf\u7a0b\u662f\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u8fdb\u7a0b\uff0c\u5b83\u5728\u8fdb\u7a0b\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u5212\u5206\uff0c\u662f\u8fdb\u7a0b\u5185\u7684\u4e00\u4e2a\u53ef\u8c03\u5ea6\u7684\u6267\u884c\u5355\u5143\uff0c\u4ee5\u51cf\u5c0f\u8fdb\u7a0b folk \u548c\u5207\u6362\u7684\u5f00\u9500\u4e3a\u76ee\u7684\u3002

\u540c\u4e00\u8fdb\u7a0b\u7684\u82e5\u5e72\u7ebf\u7a0b\u5171\u4eab\u4ee3\u7801\u3001\u6570\u636e\u7b49\u201c\u76f8\u5bf9\u9759\u6001\u201d\u7684\u8d44\u6e90\uff0c\u800c\u5404\u81ea\u7ef4\u62a4\u5bc4\u5b58\u5668\u3001\u6808\u3001PC \u7b49\u201c\u76f8\u5bf9\u52a8\u6001\u201d\u7684\u8d44\u6e90\uff1b\u6216\u8005\u8bf4\u7ebf\u7a0b\u53ea\u62e5\u6709\u4e00\u4e9b\u8fd0\u884c\u4e2d\u5fc5\u4e0d\u53ef\u7701\u7684\u8d44\u6e90\uff0c\u800c\u6240\u6709\u5176\u5b83\u8d44\u6e90\u90fd\u5c5e\u4e8e\u8fdb\u7a0b\uff0c\u7ebf\u7a0b\u4e0e\u8fdb\u7a0b\u4e2d\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8fd9\u4e9b\u8d44\u6e90\uff0c\u4ee5\u6b64\u6765\u51cf\u5c11\u8fdb\u7a0b\u521b\u5efa\u8fc7\u7a0b\u4e2d\u590d\u5236\u4ee3\u7801\u6bb5\u7b49\u8d44\u6e90\u65f6\u5e26\u6765\u7684\u4e0d\u5c0f\u5f00\u9500\u3002

\u7ebf\u7a0b\u5929\u751f\u548c\u540c\u4e00\u8fdb\u7a0b\u5185\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8d44\u6e90\uff0c\u56e0\u6b64\u540c\u8fdb\u7a0b\u5185\u7ebf\u7a0b\u5929\u751f\u5c31\u6709\u7ebf\u7a0b\u95f4\u901a\u4fe1\u7684\u80fd\u529b\u3002\u540c\u65f6\uff0c\u7531\u4e8e\u5c06\u8fdb\u7a0b\u8fdb\u884c\u4e86\u518d\u5212\u5206\uff0c\u4e00\u65b9\u9762\u5728\u786c\u4ef6\u652f\u6301\u7684\u60c5\u51b5\u4e0b\u80fd\u66f4\u597d\u5730\u9002\u914d\u5e76\u884c\uff0c\u53e6\u4e00\u65b9\u9762\u4e5f\u80fd\uff08\u4ee3\u4ef7\u66f4\u5c0f\u5730\uff09\u8ba9\u4efb\u52a1\u7684\u7c92\u5ea6\u53d8\u5c0f\uff0c\u6b64\u65f6\u53ef\u4ee5\u5c06\u6574\u4e2a\u8fdb\u7a0b\u7684\u963b\u585e\u8f6c\u79fb\u5230\u5355\u4e2a\u7ebf\u7a0b\u7684\u963b\u585e\u4e0a\uff0c\u8fdb\u4e00\u6b65\u51cf\u5c11\u54cd\u5e94\u65f6\u95f4\u3002

\u5f53\u7136\uff0c\u7531\u4e8e\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u90e8\u5206\u6574\u4f53\u7684\u5173\u7cfb\uff0c\u5373\u5b58\u5728\u4e00\u4e2a\u201c\u5c06\u82e5\u5e72\u9e21\u86cb\u653e\u5728\u540c\u4e00\u4e2a\u7bee\u5b50\u91cc\u201d\u7684\u95ee\u9898\uff0c\u867d\u7136\u5c06\u82e5\u5e72\u4efb\u52a1\u90fd\u653e\u5230\u4e00\u4e2a\u8fdb\u7a0b\u7684\u591a\u7ebf\u7a0b\u53ef\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u662f\u4e00\u65e6\u201c\u7bee\u5b50\u201d\u574f\u4e86\uff0c\u90a3\u6240\u6709\u201c\u9e21\u86cb\u201d\u90fd\u65e0\u6cd5\u5e78\u514d\uff1b\u5176\u6b21\uff0c\u867d\u7136\u5929\u7136\u7684\u5171\u4eab\u5c5e\u6027\u8ba9\u7ebf\u7a0b\u80fd\u66f4\u65b9\u4fbf\u5730\u8fdb\u884c\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff0c\u4f46\u4e5f\u5e26\u6765\u4e86\u5185\u5b58\u4fdd\u62a4\u7684\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u591a\u7ebf\u7a0b\u6a21\u578b","title":"\u591a\u7ebf\u7a0b\u6a21\u578b","text":"

\u6309\u7167\u7ebf\u7a0b\u5212\u5206\u7684\u5b9e\u73b0\u4f4d\u7f6e\uff0c\u591a\u7ebf\u7a0b\u6a21\u578b\u5206\u4e3a\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b(user threads)\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b(kernel threads)\u3002

\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u5728\u7528\u6237\u7a7a\u95f4\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff0c\u5373\u4f7f\u7528\u7ebf\u7a0b\u5e93(thread library)\u5229\u7528\u5355\u4e2a\u8fdb\u7a0b\u7684\u8d44\u6e90\uff0c\u5728\u7528\u6237\u7a7a\u95f4\u7ef4\u62a4\u591a\u4e2a\u7ebf\u7a0b\uff1b\u800c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5219\u662f\u7531\u5185\u6838\u652f\u6301\u591a\u7ebf\u7a0b\u64cd\u4f5c\u3002\u4e24\u8005\u5404\u6709\u4f18\u7f3a\u70b9\uff1a

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5e76\u4e0d\u51b2\u7a81\uff0c\u56e0\u800c\u6392\u5217\u7ec4\u5408\u540e\u5f97\u5230\u591a\u7ebf\u7a0b\u4e3b\u8981\u6709\u5982\u4e0b\u4e09\u79cd\u6a21\u578b\uff1a

(a) Many-to-many model. (b) One-to-one model. (c) Many-to-one model.

Linux \u7ebf\u7a0b

  1. Where memory will be allocated to \"Uninitialized Static variable\" upon initialization? \u21a9

  2. What process is the parent of the init process in Linux? \u21a9

  3. Linux CreateProcess? \u21a9

  4. Differences between fork and exec? \u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/","title":"U2 Part 1: \u540c\u6b65\u5de5\u5177 | Synchronization Tools","text":"

\u7ea6 7935 \u4e2a\u5b57 216 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 29 \u5206\u949f

\u5f15\u5165

\u9996\u5148\u6211\u4eec\u7b80\u5355\u63cf\u8ff0\u4ec0\u4e48\u662f\u540c\u6b65\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u62b1\u7740\u5bf9\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u7684\u7591\u95ee\u53bb\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u3002

\u4e0d\u5fc5\u5c1d\u8bd5\u7acb\u523b\u7406\u89e3\u8fd9\u6bb5\u8bdd\uff0c\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u591f\u5728\u770b\u7684\u8fc7\u7a0b\u4e2d\u4ee5\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u4e3a\u4e3b\u7ebf\uff0c\u731c\u6d4b\u63a5\u4e0b\u6765\u5c06\u8981\u5c55\u5f00\u7684\u5185\u5bb9\uff0c\u53bb\u53d1\u73b0\u95ee\u9898\u3001\u601d\u8003\u89e3\u51b3\u529e\u6cd5\u3002

\u5728\u652f\u6301\u5e76\u53d1\u751a\u81f3\u5e76\u884c\u7684\u7cfb\u7edf\u4e2d\uff0c\u867d\u7136\u8fdb\u7a0b\u4e4b\u95f4\u76f8\u5bf9\u9694\u79bb\uff0c\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\u4e92\u4e0d\u76f4\u63a5\u5e72\u6270\uff0c\u81ea\u987e\u81ea\u8dd1\u2014\u2014\u5373\u662f\u5f02\u6b65\u7684\uff1b\u4f46\u7531\u4e8e\u5404\u4e9b\u539f\u56e0\uff08\u4f8b\u5982\u90fd\u9700\u8981\u5bf9\u4e00\u5171\u4eab\u8d44\u6e90\u7684\u4fee\u6539\uff09\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u9700\u8981\u4e92\u76f8\u5236\u7ea6\uff0c\u9075\u5faa\u7279\u5b9a\u7684\u5148\u540e\u987a\u5e8f\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9700\u8981\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff0c\u8ba9\u534f\u4f5c\u8fdb\u7a0b\u80fd\u591f\u76f4\u63a5\u6216\u95f4\u63a5\u4e86\u89e3\u5230\u5176\u5b83\u76f8\u5173\u8fdb\u7a0b\u7684\u72b6\u6001\uff0c\u4ee5\u5b9e\u73b0\u5bf9\u5f53\u524d\u8fdb\u7a0b\u6267\u884c\u7684\u63a7\u5236\uff0c\u6700\u7ec8\u5728\u5b8f\u89c2\u4e0a\u5b9e\u73b0\u540c\u6b65\u63a7\u5236\u3002

\u800c\u4e0a\u9762\u63d0\u5230\u7684\u201c\u5404\u79cd\u539f\u56e0\u201d\u548c\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6211\u4eec\u7a0d\u540e\u5c06\u8ba8\u8bba\u7684\u4e1c\u897f\uff0c\u5176\u4e2d\uff0c\u8fd9\u91cc\u7684\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6307\u6211\u4eec\u7684\u5404\u79cd\u540c\u6b65\u5de5\u5177\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u540c\u6b65\u5e76\u4e0d\u662f\u67d0\u79cd\u4e2d\u592e\u8c03\u63a7\u673a\u5236\uff0c\u800c\u66f4\u50cf\u662f\u4e00\u79cd\u201c\u534f\u8bae\u201d\uff0c\u5f53\u5404\u4e2a\u8fdb\u7a0b\u53d1\u73b0\u6709\u522b\u7684\u8fdb\u7a0b\u4e0e\u81ea\u5df1\u4ea7\u751f\u7ade\u4e89\u65f6\uff0c\u5e94\u5f53\u6709\u67d0\u79cd\u624b\u6bb5\u5141\u8bb8\u5b83\u4eec\u8fbe\u6210\u534f\u5546\uff0c\u4ee5\u51b3\u5b9a\u8c01\u5148\u8c01\u540e\u3002

\u6211\u4eec\u6309\u7167\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u7531\u6d45\u5165\u6df1\u5730\u8ba8\u8bba\u8fd9\u4e9b\u4e1c\u897f\u3002

\u8bed\u5883\u95ee\u9898

\u4e00\u4e2a\u6bd4\u8f83\u5c34\u5c2c\u7684\u95ee\u9898\u662f\uff0c\u4e66\u672c\u4e0a\u4ee5\u534f\u4f5c\u8fdb\u7a0b\u7684\u8bed\u5883\u4e3a\u5f00\u7bc7\uff0c\u4f46\u63a5\u4e0b\u6765\u8bb2\u7684\u6709\u4e9b\u5185\u5bb9\u662f\u4ee5\u7ebf\u7a0b\u540c\u6b65\u4e3a\u8bed\u5883\uff08\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\u6211\u5df2\u7ecf\u653e\u5f03\u53bb\u68b3\u7406\u548c\u7ea0\u6b63\u4e66\u4e2d\u7684\u63aa\u8f9e\u4e86\uff0c\u7d2f\u4e86\uff09\uff0c\u5982\u679c\u5728\u7528\u8bcd\u4e0a\u90fd\u533a\u5206\u7ebf\u7a0b\u548c\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4f1a\u53d8\u5f97\u5f88\u7e41\u6742\uff0c\u6240\u4ee5\u6211\u63a5\u4e0b\u6765\u4e00\u5f8b\u7528\u8fdb\u7a0b\u8868\u793a\uff0c\u4f46\u8bfb\u8005\u5fc3\u4e2d\u5e94\u5f53\u5bf9\u8fd9\u4e2a\u8bed\u5883\u66f4\u9002\u4e8e\u7ebf\u7a0b\u8fd8\u662f\u8fdb\u7a0b\u6709\u6240\u611f\u53d7\u3002

\u5173\u4e8e\u8fd9\u4e9b\u65b9\u6cd5\u66f4\u9002\u5408\u5728 process \u8fd8\u662f thread \u4e0a\u88ab\u5e94\u7528\uff0c\u53ef\u4ee5\u770b\u8fd9\u4e2a\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7ade\u6001\u6761\u4ef6","title":"\u7ade\u6001\u6761\u4ef6","text":"

Links

\u6211\u4eec\u9700\u8981\u610f\u8bc6\u5230\uff0c\u6211\u4eec\u65e0\u6cd5\u4e00\u6b65\u5230\u4f4d\u5730\u3001in-place \u5730\u53bb\u4fee\u6539\u4e00\u4e2a\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6362\u8a00\u4e4b\uff0c\u8981\u60f3\u4fee\u6539 mem[x]\uff0c\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u6b65\u9aa4\uff1a

  1. reg <- mem[x]\uff1b
  2. reg <- update(reg)\uff1b
  3. mem[x] <- reg\uff1b

\u800c\u5982\u679c\u73b0\u5728\u4e0d\u6b62\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x]\uff0c\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u5b83\u4eec\u90fd\u60f3\u8981\u66f4\u65b0 mem[x]\uff0c\u53c8\u597d\u5de7\u4e0d\u5de7\u7684\u5b83\u4eec\u51e0\u4e4e\u540c\u65f6\u53d1\u751f\u8bfb\u53d6\u4e86 mem[x]\uff0c\u90a3\u4e48\u5c31\u4f1a\u51fa\u73b0\u95ee\u9898\uff1a\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8bfb\u53d6 mem[x]\uff0c\u7136\u540e\u5404\u81ea\u8ba1\u7b97\u66f4\u65b0\u540e\u7684\u503c\uff0c\u7136\u540e\u5404\u81ea\u5199\u56de mem[x]\uff1b\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6700\u7ec8\u7684 mem[x] \u4f1a\u6bd4\u539f\u6765\u5927 3\uff1b\u4f46\u73b0\u5728\u7684 mem[x] \u53ea\u6bd4\u539f\u6765\u5927 2\uff0c\u5176\u4e2d process A \u5bf9\u5b83\u7684\u4fee\u6539\u5728\u7b2c 7 \u884c\u88ab\u8986\u76d6\u4e86\u3002

\u7a76\u5176\u6839\u672c\uff0c\u7531\u4e8e\u6211\u4eec\u5904\u5728\u5e76\u53d1\u8bed\u5883\u4e0b\uff0c\u6240\u4ee5\u4f1a\u51fa\u73b0\u82e5\u5e72\u7528\u6237\u540c\u65f6\u6301\u6709\u4e00\u4efd\u6570\u636e\u8d44\u6e90\u7684\u60c5\u51b5\uff08\u4e3a\u4e86\u53d1\u6325\u5e76\u53d1\u7684\u4f18\u52bf\uff0c\u6211\u4eec\u4e5f\u5e94\u5f53\u5c3d\u53ef\u80fd\u7684\u6ee1\u8db3\u8fd9\u79cd\u9700\u6c42\uff09\uff0c\u903b\u8f91\u4e0a\u6570\u636e\u4fee\u6539\u8fc7\u7a0b\u5e94\u5f53\u662f\u7b26\u53f7\u7684\u3001\u77ac\u95f4\u7684\u3001\u7acb\u5373\u751f\u6548\u7684\uff1b\u4f46\u5b9e\u9645\u4e0a\u6211\u4eec\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\u3002\u5728\u8fd9\u79cd\uff08\u540e\u8005\uff09\u8bed\u5883\u4e0b\uff0c\u5982\u679c\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8be5\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u4f7f\u7528\u8fc7\u65f6\u6570\u636e\u8fdb\u884c\u8ba1\u7b97\u3002

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u516d\u884c\u7684 t0 \u4ecd\u7136\u5728\u7528\u88ab process A \u66f4\u65b0\u4e4b\u524d\u7684 mem[x] \u505a\u8ba1\u7b97\uff0c\u56e0\u800c\u53ef\u4ee5\u8ba4\u4e3a\u6b64\u65f6 process B \u4e2d t0 \u53c2\u4e0e\u8fd0\u7b97\u7684\u3001\u6697\u542b\u7684 mem[x] \u7684\u6570\u636e\u5df2\u7ecf\u8fc7\u65f6\u3002

race condition

\u7c7b\u4f3c\u8fd9\u79cd\u7684\uff0c\u7531\u4e24\u4e2a\u4fe1\u53f7\u4ea7\u751f\u7ade\u4e89\uff0c\u5176\u7ade\u4e89\u60c5\u51b5\u5f71\u54cd\u6700\u7ec8\u7ed3\u679c\u7684\u60c5\u51b5\uff0c\u88ab\u79f0\u4e3a\u7ade\u6001\u6761\u4ef6(race condition)\u3002\u5728\u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u8c01\u540e\u6267\u884c\uff0c\u6700\u7ec8\u7ed3\u679c\u5c31\u662f\u8c01\u7684\u8f93\u51fa\uff0c\u800c\u53e6\u4e00\u4e2a\u7528\u6237\u7684\u8f93\u51fa\u5219\u4f1a\u88ab\u8986\u76d6\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u91cd\u70b9\u5e76\u4e0d\u662f\u201c\u5982\u4f55\u63a7\u5236\u7ade\u4e89\u7ed3\u679c\u201d\uff0c\u56e0\u4e3a\u65e0\u8bba\u7ade\u4e89\u7ed3\u679c\u5982\u4f55\uff08\u751a\u81f3\u8c01\u8d62\u4e86\u7ed3\u679c\u53ef\u80fd\u90fd\u4e00\u6837\uff09\uff0c\u53ea\u8981\u8fd9\u79cd\u201c\u7ade\u4e89\u201d\u51fa\u73b0\uff0c\u90a3\u4e48\u6700\u7ec8\u7ed3\u679c\u5c31\u6709\u53ef\u80fd\u4e0d\u7b26\u5408\u9884\u671f\u7684\u3002 \u771f\u6b63\u7684\u91cd\u70b9\u5e94\u8be5\u662f\u5982\u4f55\u907f\u514d\u8fd9\u79cd\u7ade\u4e89\u7684\u51fa\u73b0\u3002\u5c31\u6bd4\u5982\u4e0a\u9762\u7684\u4f8b\u5b50\uff0c\u65e0\u8bba\u6700\u7ec8 mem[x] \u662f 3 \u8fd8\u662f 2 \u90fd\u4e0d\u5bf9\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u5e94\u8be5\u662f 4\u2014\u2014\u65e0\u8bba\u662f\u5148\u8fdb\u884c +1 \u8fd8\u662f\u5148\u8fdb\u884c +2\u3002

\u6ce8\u610f

\u867d\u7136\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u6211\u4eec\u6a21\u62df\u7684\u4e24\u4e2a\u7a0b\u5e8f\u662f\u6309\u7167\u76f8\u540c\u901f\u5ea6\uff0c\u4e00\u884c\u4e00\u4e2a\u6307\u4ee4\u6267\u884c\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u5bf9\u6240\u6709\u8fdb\u7a0b\u6267\u884c\u7684\u901f\u5ea6\u4e0d\u5e94\u5f53\u6709\u6240\u5047\u8bbe\uff0c\u5373\u8fdb\u7a0b A \u4e0d\u77e5\u9053\u8fdb\u7a0b B \u7684\u901f\u5ea6\u3002

\u4e0d\u4ec5\u5982\u6b64\uff0c\u6211\u4eec\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u8981\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u5728\u591a\u9053\u8bed\u5883\u4e0b\u8fd9\u4e2a\u95ee\u9898\u90fd\u4f1a\u51fa\u73b0\uff0c\u4f8b\u5982\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502     \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524     \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502              \u2502     \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- mem[x] \u2502\u25c4\u2500\u2500\u2500\u2500\u2524 <ctx switch> \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502     \u2502              \u2502\n\u2502 mem[x] <- t0 \u2502     \u2502              \u2502 mem[x] = 2, B's t0 is out of date\n\u2502 <ctx switch> \u251c\u2500\u2500\u2500\u2500\u25ba\u2502 t0 <- t0 + 1 \u2502\n\u2502              \u2502     \u2502 t0 <- t0 + 1 \u2502 \n\u2502              \u2502     \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u95ee\u9898\u4f9d\u65e7\u3002

\u6839\u636e\u4e0a\u9762\u8fd9\u4e2a\u5177\u4f53\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u5982\u679c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u6709\u4e24\u79cd\u9009\u62e9\uff1a

  1. \u8fdb\u884c\u7b26\u53f7\u7684\u8fd0\u7b97\u800c\u975e\u6570\u503c\u7684\u8fd0\u7b97\uff0c\u8fd9\u6837\u8f93\u5165\u7684\u53d8\u5316\u80fd\u5728\u4efb\u610f\u65f6\u523b\u53cd\u6620\u5728\u8f93\u51fa\u4e0a\uff0c\u8fd9\u6837\u65f6\u65f6\u523b\u523b\u90fd\u662f\u201c\u6700\u65b0\u201d\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u201c\u8fc7\u65f6\u201d\uff1b
  2. \u4fdd\u8bc1\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u4fdd\u6301\u4e0d\u53d8\uff0c\u5373\u4e24\u4e2a\u53ef\u80fd\u7ade\u4e89\u7684\u64cd\u4f5c\uff0c\u5728\u65f6\u95f4\u4e0a\u4e0d\u5e94\u8be5\u6709\u4ea4\u96c6\uff1b

\u663e\u7136\uff0c\u6211\u4eec\u5e94\u5f53\u9009\u62e9\u7b2c\u4e8c\u79cd\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#the-critical-section-problem","title":"The Critical-Section Problem","text":"

\u4e3a\u4e86\u66f4\u597d\u5730\u5c55\u5f00\uff0c\u6211\u4eec\u5bf9\u4e0a\u9762\u7684\u8fd9\u79cd\u60c5\u51b5\u8fdb\u884c\u5efa\u6a21\uff0c\u5e76\u7ed9\u51fa\u89e3\u51b3 race condition \u95ee\u9898\u7684\u65b9\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u8303\u5f0f\uff1a

\u6211\u4eec\u5e94\u5f53\u4fdd\u8bc1\u5728\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x] \u7684\u65f6\u5019\uff0c\u5176\u5b83\u8fdb\u7a0b\u4e0d\u5e94\u8be5\u8bfb\u53d6 mem[x]\uff08\u81f3\u5c11\u4e0d\u5e94\u4ee5\u4fee\u6539 mem[x] \u4e3a\u76ee\u7684\u6765\u8bfb\u53d6\uff09\uff0c\u76f4\u5230\u8fd9\u4e2a\u8fdb\u7a0b\u5b8c\u6210\u5bf9 mem[x] \u7684\u4fee\u6539\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0cmem[x] \u8fd9\u4e2a\u5171\u4eab\u8d44\u6e90\u5e94\u5f53\u53ea\u80fd\u88ab\u4e00\u4e2a\u7528\u6237\u6301\u6709\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u53ea\u80fd\u88ab\u81f3\u591a\u4e00\u4e2a\u7528\u6237\u5360\u6709\u7684\u8d44\u6e90\u4e3a\u4e34\u754c\u8d44\u6e90\u3002\u800c\u7a0b\u5e8f\u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u4ee3\u7801\u6bb5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e34\u754c\u533a\u6bb5(critical section, CS)\ud83d\udd17\u3002

\u90a3\u4e48\uff0c\u5bf9\u4e8e\u4e4b\u524d\u63d0\u5230\u8fc7\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u62ff\u51fa\u6765\u5bf9\u6bd4\u6a21\u62df\u7684\u90e8\u5206\u5c31\u662f critical section\u3002

\u800c CS \u95ee\u9898\uff0c\u6307\u7684\u5c31\u662f\u5982\u4f55\u4fdd\u8bc1\u6700\u591a\u53ea\u6709\u4e00\u4e2a\u7528\u6237\u5728\u6267\u884c\u4e34\u754c\u533a\u6bb5\u7684\u4ee3\u78011\u3002

\u56f4\u7ed5\u4e34\u754c\u533a\u6bb5\uff0c\u6211\u4eec\u5b9a\u4e49\u80fd\u591f\u89e3\u51b3 CS \u95ee\u9898\u7684\u4ee3\u7801\u5e94\u5f53\u80fd\u591f\u505a\u5982\u4e0b\u5212\u5206\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Entry Section      \u2502 <-- ask for & wait for permission to enter CS\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Exit Section       \u2502 <-- release the critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u8fdb\u7a0b\u9700\u8981\u5728 entry section \u5224\u65ad\u662f\u5426\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u5373\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u5982\u679c\u4e0d\u884c\u5219\u7b49\u5f85\uff1b\u800c\u5728\u8fdb\u5165 critical section \u540e\uff0c\u8fdb\u7a0b\u9700\u8981\u5728 exit section \u91ca\u653e\u4e34\u754c\u8d44\u6e90\uff1b\u7136\u540e\u8131\u79bb CS \u95ee\u9898\u7684\u8bed\u5883\uff0c\u8fdb\u5165 remainder section \u7ee7\u7eed\u6267\u884c\u3002

Brainstorming

\u6574\u4e2a\u8fc7\u7a0b\u6709\u70b9\u50cf\u8c03\u5ea6\uff0c\u7b49\u5f85\u4e34\u754c\u8d44\u6e90\u7684\u8fc7\u7a0b\u5c31\u597d\u50cf ready \u6001\u7b49\u5f85\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u7684 CPU \u8d44\u6e90\uff08CPU \u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u79cd\u4e34\u754c\u8d44\u6e90\uff0c\u53ea\u4e0d\u8fc7\u5b83\u4e0d\u662f\u7531\u8fdb\u7a0b\u4e3b\u52a8\u5904\u7406\u548c\u7d22\u53d6\uff09\u3002

\u65e2\u7136\u5982\u6b64\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u201c\u72b6\u6001\u201d\u8fd9\u4e2a\u6982\u5ff5\u3002\u6211\u4eec\u53ea\u5173\u5fc3\u76f4\u63a5\u4e0e CS \u95ee\u9898\u6709\u5173\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5b9a\u4e49\uff1a\u5c31\u7eea\u3001\u4e34\u754c\u3001\u65e0\u5173\u4e09\u4e2a\u72b6\u6001\u3002

  1. \u5c31\u7eea\u6001\uff1a\u8fdb\u7a0b\u968f\u65f6\u51c6\u5907\u597d\u8fdb\u5165 critical section\uff0c\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff1b
  2. \u4e34\u754c\u6001\uff1a\u8fdb\u7a0b\u6b63\u5728\u6267\u884c critical section\uff0c\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u8fdb\u7a0b\u6267\u884c\u5b8c critical section\uff0c\u6267\u884c exit section \u6b63\u5728\u91ca\u653e\u6301\u6709\u7684\u4e34\u754c\u8d44\u6e90\u4e2d\uff1b
  3. \u65e0\u5173\u6001\uff1a\u4e0d\u5904\u4e8e\u5c31\u7eea\u6001\u4e5f\u4e0d\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4e0d\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u662f\u4f7f\u7528\u5b8c\u5df2\u7ecf\u91ca\u653e\uff1b

\u6839\u636e\u6211\u4eec\u5148\u524d\u7ed9\u51fa\u7684\uff0c\u89e3\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u6027\u8d28\u4e2d\u7684 mutual exclusion\uff0c\u4e0d\u80fd\u540c\u65f6\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4f46\u662f\u53ef\u4ee5\u6709\u82e5\u5e72\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\uff0c\u800c\u65e0\u5173\u6001\u5219\u8868\u793a\u4e0d\u4f1a\u4ea7\u751f\u7ade\u4e89\uff0c\u548c\u8c03\u5ea6\u8fc7\u7a0b\u5341\u5206\u76f8\u4f3c\u3002

\u8fd9\u4e9b\u5b9a\u4e49\u5c06\u4f1a\u5728\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u7d22\u4e2d\u8d77\u4f5c\u7528\u3002

\u540c\u65f6\uff0c\u6211\u4eec\u8981\u6c42\u89e3\u51b3\u65b9\u6848\u9700\u8981\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

requirements for solution to CS problem

  1. \u4e34\u754c\u4e92\u65a5(mutual exclusion)\uff1a\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\u4e34\u754c\u533a\u6bb5\u5e94\u5f53\u4e92\u76f8\u6392\u65a5\uff1b
    • \u5982\u679c\u8fdb\u7a0b \\(P_i\\) \u6b63\u5728\u6267\u884c\u5176 critical section\uff0c\u90a3\u4e48\u4e0d\u5e94\u5f53\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\uff08\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\uff09critical section\uff1b
  2. \u9009\u62e9\u65f6\u95f4\u6709\u9650(progress)\uff1a\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u64cd\u4f5c\u5e94\u5f53\u53ea\u6709\u5904\u4e8e entry/critical/exit section \u7684\u8fdb\u7a0b\u53c2\u4e0e\uff0c\u4e14\u8be5\u9009\u62e9\u5e94\u5f53\u5728\u6709\u9650\u65f6\u95f4\u5185\u88ab\u6267\u884c\uff1b
  3. \u7b49\u5f85\u65f6\u95f4\u6709\u9650(bounded waiting)\uff1a\u8fdb\u7a0b\u7b49\u5f85\u88ab\u5141\u8bb8\u8fdb\u5165 critical section \u7684\u65f6\u95f4\u5e94\u5f53\u662f\u6709\u9650\u7684\uff1b

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u8ba8\u8bba CS \u95ee\u9898\u662f\u5982\u4f55\u89e3\u51b3\u7684\u4e3a\u4e3b\u7ebf\uff0c\u63a2\u7d22\u5982\u4f55\u89e3\u51b3 race condition\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#for-kernel-code","title":"For Kernel Code","text":"

\u7531\u4e8e kernel code \u4e0b\u7684 CS \u95ee\u9898\u89e3\u51b3\u8f83\u4e3a\u6e05\u6670\u76f4\u63a5\uff0c\u6240\u4ee5\u5148\u884c\u4ecb\u7ecd\u3002

For Kernel Code

\u5728 kernel code \u4e2d\u4e5f\u666e\u904d\u5b58\u5728\u7740 race condition \u7684\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

Race condition when assigning a pid.

\u4e0a\u4f8b\u4e2d \\(P_0\\) \u548c \\(P_1\\) \u540c\u65f6\u8bbf\u95ee\u4e86 next_available_pid \u8fd9\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u4ea7\u751f\u7ade\u4e89\uff0c\u5bfc\u81f4\u6700\u540e\u6709\u4e24\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e86\u540c\u4e00\u4e2a pid\u3002

\u6b32\u89e3\u51b3 kernel code \u4e2d\u7684 CS \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u5728 kernel code \u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u884c\u4e3a\uff0c\u4ece\u800c\u89e3\u51b3 CS \u95ee\u9898\u3002

\u5bf9\u4e8e\u5355\u5904\u7406\u5668\u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728 kernel code \u4e2d\u7981\u6b62\u4e2d\u65ad\uff0c\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff1b\u800c\u5bf9\u4e8e\u591a\u5904\u7406\u5668\u6765\u8bf4\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c31\u4e0d\u90a3\u4e48\u5408\u9002\u4e86\u2014\u2014\u6211\u4eec\u9700\u8981\u540c\u65f6\u544a\u8bc9\u591a\u4e2a\u5904\u7406\u5668\u4e2d\u65ad\u88ab\u7981\u6b62\uff0c\u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u7684\u65f6\u5ef6\u4ecd\u7136\u4f1a\u4ea7\u751f\u95ee\u9898\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4e5f\u4f1a\u5e26\u6765\u989d\u5916\u7684\u5f00\u9500\u3002\u5728\u591a\u5904\u7406\u5668\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u62a2\u5360\u5f0f\u5185\u6838(preemptive kernels)\u548c\u975e\u62a2\u5360\u5f0f\u5185\u6838(non-preemptive kernels)\uff0c\u5173\u952e\u662f\u540e\u8005\u5b9e\u73b0\u4e86\u4e00\u6bb5\u65f6\u95f4\u5185\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode2\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u63a2\u7d22\u66f4\u4e3a\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\u3002

\u8bf4\u660e

\u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\u4ee3\u7801\uff0c\u6211\u4eec\u7528\u5168\u5927\u5199\u6765\u8868\u793a\u4e00\u4e2a\u5171\u4eab\u8d44\u6e90\uff0c\u4f8b\u5982 READY\uff0c\u5b83\u80fd\u591f\u88ab\u82e5\u5e72\u8fdb\u7a0b\u8bbf\u95ee\u3002\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5e94\u5f53\u7531\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\uff0c\u5e76\u4e0d\u662f\u6211\u4eec\u5173\u6ce8\u7684\u91cd\u70b9\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#petersons-algorithm","title":"Peterson\u2019s Algorithm","text":"

Links

Peterson's algorithm \u662f\u5bf9\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7684\u540c\u6b65\u95ee\u9898\u7684\u4e00\u4e2a\u89e3\u6cd5\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u5c40\u9650\u6027\uff0c\u4f46\u5176\u8bbe\u8ba1\u76f8\u5bf9\u7b80\u5355\uff0c\u6240\u4ee5\u5148\u884c\u7ed9\u51fa\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe \\(P_0\\) \u548c \\(P_1\\) \u662f\u53c2\u4e0e\u540c\u6b65\u95ee\u9898\u8ba8\u8bba\u7684\u4e24\u4e2a\u8fdb\u7a0b\u3002

\u57fa\u4e8e Peterson's algorithm \u5bf9\u591a\u8fdb\u7a0b\u60c5\u51b5\u7684\u6269\u5c55\u88ab\u79f0\u4e3a filter algorithm\uff0c\u4f46 filter algorithm \u4e0d\u6ee1\u8db3 bounded waiting time \u7684\u6761\u4ef6\uff0c\u8bfb\u8005\u6709\u5174\u8da3\u53ef\u4ee5\u81ea\u884c\u4e86\u89e3\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7b97\u6cd5\u63cf\u8ff0","title":"\u7b97\u6cd5\u63cf\u8ff0","text":"

\u4e3a\u4e86\u4fdd\u8bc1\u5904\u4e8e\u4e34\u754c\u6001\u7684\u8fdb\u7a0b\u81f3\u591a\u53ea\u6709\u4e00\u4e2a\uff0c\u6211\u4eec\u5e94\u5f53\u5728\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u786e\u8ba4\u6ca1\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\u540e\u518d\u8fdb\u5165\u3002\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4ef6\u4e8b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u5904\u5728 \\(P_0\\) \u65f6\uff0c\u6211\u4eec\u5982\u4f55\u77e5\u9053 \\(P_1\\) \u662f\u5426\u6b63\u5904\u4e8e\u4e34\u754c\u6001\u5462\uff1fPeterson\u2019s Algorithm \u901a\u8fc7\u5982\u4e0b\u65b9\u5f0f\u5b9e\u73b0\u4e86\u8fd9\u4ef6\u4e8b\uff1a

// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

\u9996\u5148\uff0c\u6211\u4eec\u8bf4\u660e entry section \u6ca1\u6709\u4e34\u754c\u8d44\u6e90\u3002READY \u662f\u4e00\u4e2a\u5171\u4eab\u7684\u6570\u7ec4\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u53ea\u4fee\u6539\u4e0e\u81ea\u5df1\u4e00\u4e00\u5bf9\u5e94\u7684 element\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a READY \u4e0d\u4f1a\u51fa\u73b0 race condition\uff0c\u56e0\u800c\u4e5f\u4e0d\u662f\u4e34\u754c\u8d44\u6e90\u3002\u800c TURN\uff0c\u6211\u4eec\u8fd9\u91cc\u53ea\u5bf9 TURN \u8fdb\u884c\u5199\u7684\u64cd\u4f5c\uff0c\u4f46\u662f P1 \u548c P2 \u8c01\u5148\u8dd1\u5230\u8fd9\u4e00\u884c\u4f1a\u51b3\u5b9a TURN \u6700\u540e\u7684\u503c\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u8fd9\u91cc\u6709 race condition\u3002

\u4f46\u8fd9\u5c31\u662f Peterson\u2019s Algorithm \u5de7\u5999\u7684\u5730\u65b9\uff0cPeterson's \u5229\u7528 race condition \u8fd9\u4e2a\u201c\u540e\u8986\u76d6\u524d\u201d\u7684\u6027\u8d28\uff0c\u5b9e\u73b0\u4e86\u6807\u8bb0\u4e86\u8fd9\u4e24\u4e2a\u8fdb\u7a0b\u7684\u5148\u6765\u540e\u5230\u7684\u6548\u679c\u3002\u6211\u4eec\u90fd\u5411\u8fd9\u4e2a TURN \u5199\u4e00\u4e2a\u4e92\u5f02\u7684\u503c\uff08\u6bd4\u5982\u81ea\u5df1\u7684 id\uff0c\u6216\u8005\u5bf9\u65b9\u7684 id\uff09\uff0c\u7b49\u5927\u5bb6\u90fd\u5199\u597d\u540e\u6211\u4eec\u770b\u770b\u8fd9\u4e2a\u503c\u6700\u7ec8\u662f\u8c01\u5199\u7684\uff0c\u4e8e\u662f\u5c31\u77e5\u9053\u8c01\u540e\u5230\u3002

\u5229\u7528\u8fd9\u4e2a\u539f\u7406\uff0cPeterson's \u8fd9\u91cc\u505a\u4e86\u4e00\u4e2a\u201c\u975e\u5e38\u6709\u4e2d\u56fd\u4eba\u6c14\u8d28\u201d\u7684\u4e8b\u60c5\uff1a\\(P_0\\) \u548c \\(P_1\\) \u4e0a\u516c\u4ea4\u8f66\u540e\u540c\u65f6\u770b\u4e0a\u4e86\u4e00\u4e2a\u5ea7\u4f4d\uff0c\\(P_0\\) \u8bf4\uff1a\u201c\u4f60\u5750\u5427\u3002\u201d\uff0c \\(P_1\\) \u81ea\u7136\u4e5f\u8981\u5ba2\u6c14\u4e00\u4e0b\uff0c\u8bf4\uff1a\u201c\u8fd8\u662f\u4f60\u5750\u5427\uff01\u201d\u3002\u73b0\u5728\u4e24\u8fb9\u90fd\u5ba2\u6c14\u8fc7\u4e86\uff0c\\(P_0\\) \u5c31\u53ef\u4ee5\u5fc3\u5b89\u7406\u5f97\u5730\u5750\u4e0b\u4e86\u3002\u5bf9\u4e0a\u8ff0\u8fc7\u7a0b\uff0c\u6211\u4eec\u7ed9\u51fa \\(P_0\\) \u83b7\u5f97\u6905\u5b50\u7684\u51c6\u786e\u6761\u4ef6\u6709\uff1a

  1. \\(P_0\\) \u60f3\u5750\u4e0b\uff0c\\(P_1\\) \u4e5f\u60f3\u5750\u4e0b\uff0c\u5426\u5219\u5c31\u6ca1\u6709\u51b2\u7a81\u4e86\uff1b
  2. \\(P_0\\) \u53d1\u73b0 \\(P_1\\) \u5728\u5ba2\u6c14\uff0c\u4f46 \\(P_0\\) \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e86\uff1b

\u5bf9\u5e94\u5230\u4e0a\u9762\u7ed9\u51fa\u7684\u4ee3\u7801\u91cc\uff0c\u8fd9\u4e2a\u6761\u4ef6\u53ef\u4ee5\u7ffb\u8bd1\u4e3a\uff1a

  1. READY[0] = READY[1] = true\uff1b
  2. TURN \u2260 j\uff0c\u4f46\u6b64\u524d \\(P_i\\) \u5df2\u7ecf\u6267\u884c\u8fc7 TURN <- j\uff1b

\u8bf7\u8bfb\u8005\u4ed4\u7ec6\u601d\u8003\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5e76\u9002\u5f53\u8fdb\u884c\u5168\u9762\u7684\u6a21\u62df\u4ee5\u7406\u89e3 Peterson's \u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u6027\u8d28\u8bc1\u660e","title":"\u6027\u8d28\u8bc1\u660e","text":"

\u73b0\u5728\u6211\u4eec\u9700\u8981\u8bc1\u660e\u8fd9\u4e2a\u7b97\u6cd5\u6ee1\u8db3\u6027\u8d28\u3002

\u6211\u7684\u8bc1\u660e\u6bd4\u8f83\u8be6\u7ec6\u548c\u5570\u55e6\uff0c\u4f46\u6211\u8ba4\u4e3a\u5b8c\u6574\u5730\u6a21\u62df\u66f4\u52a0\u6709\u5229\u4e8e\u76f4\u89c9\u7406\u89e3\uff0c\u5982\u679c\u4f60\u60f3\u8981\u66f4\u7b80\u6d01\u7684\u8bc1\u660e\uff0c\u53ef\u4ee5\u53c2\u8003 xyx \u7684\u7b14\u8bb0\u3002

mutual exclusion
// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

lemma

\u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c 7 \u884c\uff0c\u90a3\u4e48\u663e\u7136\uff1a

  1. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u60f3\u8981\u8fdb\u5165 critical section\uff0c\u5373 READY[i] \u548c READY[j] \u90fd\u4e3a true\uff1b
  2. TURN \u7684\u503c\u4e0d\u518d\u4f1a\u88ab\u66f4\u6539\uff1b
  3. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u5c1a\u672a\u8fdb\u5165 critical section\uff1b

\u7531\u4e8e TURN \u5fc5\u5b9a\u4e5f\u53ea\u80fd\u4e3a i \u6216 j\uff0c\u6240\u4ee5 i \u548c j \u5fc5\u7136\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u8fdb\u7a0b\u63a5\u4e0b\u6765\u4f1a break loop \u5e76\u8fdb\u5165 critical section\uff0c\u5728\u5b83\u7ed3\u675f\u4e4b\u524d\uff0c\u5373\u5728 READY[?] \u88ab\u6539\u53d8\u4e4b\u524d\uff0c\u8be5\u6761\u4ef6\u6301\u7eed\u6210\u7acb\u3002

\u56e0\u6b64\u6211\u4eec\u5f97\u5230\u4e00\u4e2a\u7ed3\u8bba\uff1a\u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c\u4e03\u884c\uff0c\u90a3\u4e48\u4ece\u8be5\u65f6\u523b\u5f00\u59cb\uff0c\u5230\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u79bb\u5f00 critical section \u4e3a\u6b62\uff0c\u4e92\u65a5\u6027\u8d28\u90fd\u6210\u7acb\u3002

\u73b0\u5728\u6211\u4eec\u8003\u8651 i \u5df2\u7ecf\u5148\u884c\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff0c\u800c j \u8fd8\u6ca1\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff1a

Situation 1

\u5982\u679c j \u8fd8\u6ca1\u8fdb\u5165\u7b2c 5 \u884c\uff0c\u90a3\u4e48 READY[j] \u4e3a false\uff0c\u6b64\u65f6\u6ca1\u6709\u7ade\u4e89\uff0ci \u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6001\u3002\u5e76\u4e14 j \u4e4b\u540e\u8fd0\u884c\u5230\u7b2c 7 \u884c\u65f6\uff0cTURN == <another> \u59cb\u7ec8\u6210\u7acb\u3002\u6240\u4ee5 j \u4f55\u65f6\u8fdb\u5165 critical section \u5b8c\u5168\u53d6\u51b3\u4e8e READY[j]\uff0c\u5373 j \u4f55\u65f6\u79bb\u5f00 critical section\u3002

\u663e\u7136\uff0c\u6b64\u65f6\u6ee1\u8db3\u4e92\u65a5\u6027\u8d28\u3002

Situation 2

\u5982\u679c j \u5df2\u7ecf\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\uff0c\u8fd8\u6ca1\u6267\u884c\u7b2c 6 \u884c\uff0c\u90a3\u4e48\u5bf9\u4e8e i \u6765\u8bf4\uff0c(READY[j] && TURN == j) \u4e3a true\uff0c\u6b64\u65f6 i \u5c06\u7b49\u5f85 j\uff0c\u8fdb\u5165 Situation 3\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u8981\u4e48 i \u548c j \u4e0d\u7ade\u4e89\uff0c\u8981\u4e48\u4e24\u8005\u90fd\u8fd0\u884c\u5230\u7b2c 7 \u884c\u540e\u624d\u4f1a\u6709\u8fdb\u7a0b\u8fdb\u5165 critical section

\u8fd9\u5c31\u597d\u50cf\u4e24\u8005\u5728\u7b2c 6 \u884c\u6bd4\u8c01\u5148\u4e3e\u624b\uff0c\u7136\u540e\u7b49\u4e24\u8005\u90fd\u4e3e\u8fc7\u624b\uff08\u90fd\u8dd1\u5b8c\u7b2c 6 \u884c\uff0c\u5230\u8fbe\u7b2c 7 \u884c\uff09\u540e\uff0c\u518d\u5224\u65ad\u8c01\u8fdb\u5165 critical section\uff0c\u800c\u8fdb\u5165\u7b2c 7 \u884c\u4ee5\u540e\u6240\u6709\u7684\u5224\u65ad\u6761\u4ef6\u90fd\u662f\u76f8\u5bf9\u9759\u6b62\u7684\u3001\u4e0d\u4f1a\u518d\u88ab\u4fee\u6539\u7684\uff0c\u56e0\u800c\u907f\u514d\u751a\u81f3\u5229\u7528\u4e86 race condition \u5bf9 selection \u7684\u5f71\u54cd\uff0c\u4fdd\u8bc1\u4e86\u4e92\u65a5\u7684\u6027\u8d28\u3002

progress

\u8fd9\u6761\u6027\u8d28\u7684\u6210\u7acb\u6bd4\u8f83\u7b26\u5408\u76f4\u89c9\uff0c\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f\u4e0d\u4f1a\u51fa\u73b0\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u5728 while () \u88ab\u963b\u585e\u4f4f\u7684\u60c5\u51b5\u3002\u4f46\u662f\u8fd9\u70b9\u975e\u5e38\u663e\u7136\uff0cTURN == i && TURN == j \u5fc5\u7136\u662f false\uff0c\u6240\u4ee5\u4e24\u4e2a\u5faa\u73af\u603b\u6709\u4e00\u4e2a\u4f1a\u88ab break\u3002

bounded waiting time

\u5728 Peterson's \u4e2d\uff0c\u7b49\u5f85\u65f6\u95f4\u4e3b\u8981\u6307\u8fd9\u90e8\u5206\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u5c24\u5176\u6307\u7b2c\u4e03\u884c\u7684 while \u5faa\u73af\u3002

// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u65ad\u5faa\u73af\u7684\u6761\u4ef6\u662f\uff1aREADY[j] && TURN == j\uff0c\u5982\u679c\u8be5\u5faa\u73af\u4e00\u5f00\u59cb\u5c31\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u663e\u7136\u662f\u7b26\u5408 bounded waiting time \u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u8fd9\u4e2a\u6761\u4ef6\u6700\u591a\u80fd\u6301\u7eed\u591a\u4e45\u3002

A. READY[j] \u4e3a true

\u8fd9\u9700\u8981 process j \u5df2\u7ecf\u8fd0\u884c\u8fc7\u7b2c 5 \u884c\uff0c\u5e76\u4e14\u8fd8\u6ca1\u8fd0\u884c\u7b2c 15 \u884c\uff0c\u5373 process j \u4e5f\u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\u3002

\u8fd9\u4e00\u6761\u662f\u5728\u5224\u65ad\u662f\u5426\u6709\u51b2\u7a81\u5b58\u5728\uff0c\u5982\u73b0\u5728\u53ea\u6709 process i \u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\uff0c\u90a3\u65e0\u9700\u7b49\u5f85\u76f4\u63a5\u8fdb\u5165\u5373\u53ef\u3002\u901a\u8fc7\u6539\u53d8\u8fd9\u4e2a\u6761\u4ef6\u800c\u8fdb\u5165\u4e34\u754c\u6001\u6709\u4e24\u79cd\u53ef\u80fd\uff1a

  1. \u4e00\u5f00\u59cb\u51b2\u7a81\u5c31\u4e0d\u5b58\u5728\uff1b
  2. process j \u521a\u79bb\u5f00\u4e34\u754c\u6001\uff0c\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff1b

B. TURN == j \u4e3a true

\u6709\u4e24\u79cd\u53ef\u80fd\uff1a

  1. process j \u8fd8\u6ca1\u8fd0\u884c\u7b2c 6 \u884c\uff1b
  2. process j \u5728 process i \u4e4b\u524d\u5c31\u8fd0\u884c\u4e86\u7b2c 6 \u884c\uff1b

\u5bf9\u4e8e\u7b2c\u4e00\u79cd\u60c5\u51b5\uff0c\u7531\u4e8e A. \u6210\u7acb\u540e\u624d\u4f1a\u5224\u65ad\u8fd9\u6761\uff0c\u6240\u4ee5 process j \u7684\u72b6\u6001\u5176\u5b9e\u662f\u521a\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\u8fd8\u6ca1\u8fd0\u884c\u5b8c\u7b2c 6 \u884c\uff0c\u663e\u7136\u8fd9\u4e2a\u65f6\u95f4\u662f\u6709\u754c\u7684\u3002

\u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u8bf4\u660e i \u662f\u540e\u6765\u8005\uff0cj \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e00\u6b21\u4e86\uff0c\u6240\u4ee5\u5e94\u5f53\u8ba9 j \u8fd0\u884c\uff0ci \u7b49\u5f85 j \u79bb\u5f00\u4e34\u754c\u6001\u91ca\u653e\u8d44\u6e90\uff0c\u6b64\u65f6\u901a\u8fc7 A.2. \u6765\u8fdb\u5165\u4e34\u754c\u6001\u3002\u800c process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\u4e5f\u5e94\u5f53\u6709\u9650\u7684\u3002

\u7efc\u4e0a\u6240\u8ff0\uff0cwaiting time \u7684\u6700\u5927\u503c\u57fa\u672c\u4e0a\u53d6\u81ea\uff1a

  1. process j \u6267\u884c\u7b2c 6 \u884c\u7684\u65f6\u95f4\uff1b
  2. process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\uff1b

\u901a\u8fc7\u4e4b\u524d\u7684\u8bba\u8ff0\u6211\u4eec\u77e5\u9053\uff0c\u8fd9\u4e24\u4e2a\u90fd\u662f\u6709\u754c\u7684\uff0c\u4e8e\u662f\u8be5\u6027\u8d28\u5f97\u8bc1\u3002

Oops!

\u4f46\u662f\uff0cPeterson's \u5b9e\u9645\u4e0a\u65e0\u6cd5\u9002\u7528\u4e8e\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\u3002\u4e0a\u8ff0\u505a\u6cd5\u6709\u4e00\u4e2a\u5173\u952e\uff0c\u4e5f\u662f\u6211\u4eec\u5728\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u4e00\u76f4\u9ed8\u8ba4\u6210\u7acb\u7684\u4e8b\u60c5\uff1a\u8fdb\u7a0b\u603b\u662f\u5148\u6267\u884c READY[i] = true;\uff0c\u7136\u540e\u624d\u4f1a\u6267\u884c TURN = j;\uff0c\u5373\u5148\u8fdb\u5165\u5c31\u7eea\u6001\uff0c\u518d\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u8fd9\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u5408\u7406\u7684\u6761\u4ef6\u3002\u4f46\u5728\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0c\u7f16\u8bd1\u5668\u53ef\u80fd\u4f1a\u901a\u8fc7\u91cd\u6392\u5217\u90e8\u5206\u8bed\u53e5\u6765\u66f4\u597d\u5730\u5229\u7528 CPU \u8d44\u6e90\uff08\u53c2\u8003\u8ba1\u7ec4\u7684\u5404\u79cd\u7ade\u4e89\uff09\u3002\u800c\u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\uff08\u5c31\u7eea\u548c\u8bf7\u6c42\uff09\u5e76\u6ca1\u6709\u64cd\u4f5c\u76f8\u540c\u5185\u5bb9\uff0c\u56e0\u800c\u4ea4\u6362\u987a\u5e8f\u662f\u4e0d\u4f1a\u5f71\u54cd\u7ed3\u679c\u7684\uff0c\u6240\u4ee5\u53ef\u80fd\u88ab\u7f16\u8bd1\u5668\u4ea4\u6362\u3002\u800c\u8fd9\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u51fa\u73b0\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

The effects of instruction reordering in Peterson\u2019s solution.

\u5728\u68d5\u8272\u6807\u8bb0\u65f6\u523b\uff0cprocess 1 \u8fdb\u884c while \u5faa\u73af\u5224\u65ad\uff0c\u53d1\u73b0 READY[0] \u4e3a false\uff0c\u4f46\u6b64\u65f6 TURN \u6307\u5411\u5bf9\u65b9\uff0c\u6240\u4ee5\u6309\u7167\u6211\u4eec\u5148\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 1 \u4f1a\u8ba4\u4e3a process 0 \u662f\u5df2\u7ecf\u8fd0\u884c\u5b8c critical section\uff0c\u5df2\u7ecf\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u8fdb\u5165\u4e34\u754c\u6001\uff1b\u7136\u800c\uff0c\u5728\u7eff\u8272\u6807\u8bb0\u65f6\u523b\uff0c\u5bf9\u4e8e process 0\uff0c\u6b64\u65f6 TURN \u6307\u5411\u81ea\u5df1\uff0cprocess 1 \u8fd8\u6ca1\u8fd0\u884c\u5b8c\u6240\u4ee5 READY[1] \u8fd8\u662f true\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 0 \u4f1a\u8ba4\u4e3a process 1 \u5728\u7b49\u5f85\u81ea\u5df1\uff0c\u6240\u4ee5\u4e5f\u8fdb\u5165\u4e86\u4e34\u754c\u6001\u3002\u4e8e\u662f\uff0c\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8fdb\u5165\u4e86\u4e34\u754c\u6001\uff0c\u8fdd\u53cd\u4e86 mutual exclusion \u7684\u6027\u8d28\u3002

\u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a Peterson's Algorithm \u4ecd\u7136\u6ca1\u6709\u89e3\u51b3\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#memory-barriers","title":"Memory Barriers","text":"

\u8be5\u65b9\u6cd5\u5b9e\u9645\u4e0a\u662f\u5bf9\u8f6f\u4ef6\u65b9\u6cd5\u7684\u8865\u8db3\u3002\u6211\u4eec\u5148\u524d\u63d0\u5230\uff0cPeterson's Algorithm \u5931\u6548\u7684\u539f\u56e0\u662f\u7f16\u8bd1\u5668\u4f1a\u6839\u636e\u9700\u6c42\u91cd\u6392\u5217\u4e00\u4e9b\u5185\u5b58\u64cd\u4f5c\uff0c\u800c memory barriers \u4fdd\u8bc1 barrier \u4e4b\u524d\u7684 S/L \u6307\u4ee4\u5fc5\u987b\u5728 barrier \u4e4b\u540e\u7684 S/L \u6307\u4ee4\u4e4b\u524d\u5b8c\u6210\uff0c\u4f7f\u6211\u4eec\u80fd\u591f\u4e3b\u52a8\u7981\u6b62\u7f16\u8bd1\u5668\u505a\u8fd9\u79cd\u91cd\u6392\u3002

// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nmemory_barrier();                   // \u2502\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

Memory Model

\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u67b6\u6784\u53ef\u80fd\u4f1a\u5bf9\u7528\u6237\u7a0b\u5e8f\u64cd\u4f5c\u5185\u5b58\u7684\u4fdd\u8bc1\u6709\u6240\u4e0d\u540c\uff0c\u8fd9\u79cd\u4fdd\u8bc1\u88ab\u79f0\u4e3a memory model\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u5206\u4e3a\u4e24\u5927\u7c7b\uff1a

  1. \u5f3a\u6709\u5e8f(strongly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b
  2. \u5f31\u6709\u5e8f(weakly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u4e0d\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b

\u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4e86\u63d0\u9ad8\u5185\u5b58\u64cd\u4f5c\u7684\u6548\u7387\uff0c\u6211\u4eec\u5f15\u5165\u4e86 cache\uff0c\u5728\u591a\u5904\u7406\u5668\u60c5\u51b5\u4e0b\uff0ccache \u673a\u5236\u7684\u5b58\u5728\u53ef\u80fd\u5bfc\u81f4\u8fdb\u7a0b A \u5bf9\u5185\u5b58\u7684\u5199\u65e0\u6cd5\u5bf9\u8fdb\u7a0b B \u7acb\u523b\u53ef\u89c1\uff0c\u8fd9\u5c31\u662f\u5f31\u6709\u5e8f\u7684\u4e00\u79cd\u4f53\u73b0\u3002

\u8fd9\u90e8\u5206\u6211\u6ca1\u6709\u5b8c\u5168\u641e\u6e05\u695a\uff0c\u4e66\u672c\u7684\u903b\u8f91\u975e\u5e38\u7684\u8be1\u5f02\uff1a\u4e66\u672c\u8ba4\u4e3a memory barrier \u662f\u5f31\u6709\u5e8f\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4f46\u662f\u6211\u59cb\u7ec8\u6ca1\u660e\u767d\u5b83\u4eec\u4e4b\u95f4\u7684\u903b\u8f91\u5728\u54ea\u91cc\uff0c\u4ee5\u53ca\u201c\u6709\u5e8f\u201d\u548c\u201c\u7acb\u523b\u53ef\u89c1\u201d\u7684\u6839\u672c\u8054\u7cfb\u5728\u54ea\u91cc\u3002\u8fd9\u91cc\u4e00\u5b9a\u662f\u5b58\u5728\u4e0d\u6e05\u695a\u7684\u5730\u65b9\u7684\u3002\u4f46\u662f\u8fd9\u90e8\u5206\u770b\u8d77\u6765\u4e0d\u662f\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u6211\u5c31\u5148\u653e\u7740\u4e0d\u7ba1\u4e86\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#hardware-instructions","title":"Hardware Instructions","text":"

\u8ba8\u8bba Peterson's Algorithm \u540e\u6211\u4eec\u5e94\u5f53\u610f\u8bc6\u5230\uff0c\u540c\u6b65\u95ee\u9898\u7684\u51fa\u73b0\u662f \u24f5 \u786c\u4ef6\u64cd\u4f5c\u6570\u636e\u9700\u8981\u65f6\u95f4\uff0c\u4e0e \u24f6 \u6570\u636e\u5177\u6709\u5171\u4eab\u6027\u7684\u4e0d\u534f\u8c03\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u786c\u4ef6\u4ea7\u751f\u7684\u95ee\u9898\u3002\u56e0\u800c\uff0c\u8981\u60f3\u66f4\u597d\u7684\u89e3\u51b3\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u662f\u5e94\u5f53\u4ece\u786c\u4ef6\u51fa\u53d1\u3002\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u539f\u5b50\u6027(atomic)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5b83\u7684\u57fa\u672c\u903b\u8f91\u662f\u8ba9\u201c\u9700\u8981\u65f6\u95f4\u7684\uff0c\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u201d\uff0c\u53d8\u6210\u4e00\u4e2a\u201c\u5728\u65f6\u95f4\u4e0a\u4e0d\u53ef\u5206\u5272\u3001\u4e0d\u53ef\u88ab\u6253\u65ad\u7684\uff0c\u5373\u539f\u5b50\u6027\u7684\u64cd\u4f5c\u201d\u3002\u4e0d\u540c\u786c\u4ef6\u53ef\u80fd\u63d0\u4f9b\u4e0d\u540c\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6211\u4eec\u8fd9\u91cc\u5c06\u5b83\u4eec\u62bd\u8c61\u4e3a test_and_set() \u548c compare_and_swap() \u4e24\u7c7b\u6765\u4ecb\u7ecd\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#test_and_set","title":"test_and_set()","text":"

Links

<atomic> test_and_set(bool * target) {\nbool ret = *target;\n*target = true;\nreturn ret;\n}\n

\u8be5\u6307\u4ee4\u7684\u529f\u80fd\u5c31\u7c7b\u4f3c\u4e0a\u9762\u8fd9\u6bb5\u4ee3\u7801\uff1a\u5c06\u76ee\u6807\u8bbe\u4e3a true\uff0c\u540c\u65f6\u8fd4\u56de\u5176\u65e7\u503c\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u4e2a\u6307\u4ee4\u9700\u8981\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u5982\u679c\u6709\u82e5\u5e72 test_and_set() \u540c\u65f6\u53d1\u751f\uff0c\u90a3\u4e48\u65e0\u8bba\u5e76\u53d1\u8fd8\u662f\u5e76\u884c\uff0c\u5b83\u4eec\u90fd\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u5730\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u4ea7\u751f\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u79cd atomic \u7684\u64cd\u4f5c\u5929\u7136\u4fdd\u8bc1\u4e86 mutual exclusion\uff0c\u56e0\u800c\u5bf9\u4e8e\u5b9e\u73b0\u4e86 test_and_set() \u7684\u673a\u5668\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 test_and_set() \u6765\u89e3\u51b3 CS \u95ee\u9898\u3002

process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n\n/* other things */                  // - remainder section\n}\n

\u5728\u7b2c 3 \u884c\uff0c\u5faa\u73af\u7b49\u5f85\u7684\u6761\u4ef6\u53d8\u4e3a test_and_set(&LOCK)\uff0c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f false\uff0c\u5219\u53ef\u4ee5\u7ee7\u7eed\uff0c\u5e76\u4e14\u6b64\u65f6 LOCK \u7684\u503c\u88ab\u539f\u5b50\u6027\u5730\u4fee\u6539\u4e3a true\uff1b\u800c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f true\uff0c\u90a3\u4e48\u5b83\u7ecf\u8fc7 test_and_set(&LOCK) \u540e\u7684\u503c\u4ecd\u7136\u662f true\uff0c\u4e14\u9700\u8981\u7b49\u5f85\uff0c\u76f4\u5230\uff1a\u5c06 LOCK \u6539\u6210 true \u7684\u90a3\u4e2a\u8fdb\u7a0b\u5728 exit section \u5c06 LOCK \u6539\u56de false\uff0c\u5373\u91ca\u653e\u9501\u3002

\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u4e0e\u6211\u4eec\u8ba8\u8bba Peterson's Algorithm \u65f6\u7684\u8bed\u5883\u4e0d\u540c\uff0c\u6211\u4eec\u73b0\u5728\u4e0d\u518d\u5047\u8bbe\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53ea\u6709\u4e24\u4e2a\uff08\u8fd9\u662f Peterson's \u7684\u5c40\u9650\u6027\u4e4b\u4e00\uff09\u3002\u5728\u8fd9\u4e2a\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u518d\u6765\u8003\u8651\u5b83\u662f\u5426\u6ee1\u8db3\u4e09\u6761\u6027\u8d28\u3002

mutual exclusion

\u7531\u4e8e test_and_set() \u662f\u539f\u5b50\u6027\u7684\uff0c\u6240\u4ee5\u540c\u65f6\u6267\u884c\u7684\u4e00\u7cfb\u5217 test_and_set() \u4e2d\uff0c\u53ea\u6709\u4e00\u4e2a\u80fd\u8fd4\u56de false\uff0c\u5373\u53ea\u6709\u4e00\u4e2a\u80fd\u901a\u8fc7\u9501\uff0c\u56e0\u800c\u5929\u751f\u6ee1\u8db3\u4e86 mutual exclusion\u3002

progress

\u4ee3\u7801\u4e2d\u5bf9 LOCK \u7684\u4fee\u6539\u64cd\u4f5c\u662f\u95ed\u5408\u7684\uff0c\u5373\u8fdb\u5165 critical section \u4f1a\u5bfc\u81f4 LOCK \u53d8\u4e3a false\uff0c\u4f46\u79bb\u5f00 critical section \u5fc5\u5b9a\u5bfc\u81f4 LOCK \u53d8\u4e3a true\u3002\u56e0\u6b64\uff0c\u53ea\u8981\u6ca1\u6709\u8fdb\u7a0b\u5904\u4e8e critical section\uff0c\u90a3\u4e48 LOCK \u5fc5\u5b9a\u4e3a false\uff0c\u5219\u4e00\u5b9a\u6709\u5c31\u7eea\u7684\u8fdb\u7a0b\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u800c\u8fd0\u884c critical section \u7684\u65f6\u95f4\u662f\u6709\u9650\u7684\uff0c\u56e0\u6b64 LOCK \u53c8\u4e00\u5b9a\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u53d8\u4e3a false\uff0c\u4ece\u800c\u6ee1\u8db3 progress\u3002

bounded waiting time

\u5982\u679c\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7ade\u4e89\uff0c\u90a3\u4e48\u901a\u8fc7\u7c7b\u4f3c\u8bc1\u660e progress \u7684\u8fc7\u7a0b\u53ef\u4ee5\u5f97\u5230 bounded waiting time \u662f\u53ef\u4ee5\u6210\u7acb\u7684\u3002A \u79bb\u5f00\u4e34\u754c\u6001\u540e\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u7684 B \u7acb\u523b\u5c31\u80fd\u8fdb\u5165 critical section\uff0c\u5373\u53ea\u6709\u4e24\u4e2a\u4eba\u6392\u961f\u662f\u4e0d\u4f1a\u88ab\u63d2\u961f\u7684\u3002

\u4f46\u5728\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53d8\u591a\u4ee5\u540e\uff0c\u5c31\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u7c7b\u4f3c\u4e8e\u8c03\u5ea6\u4e2d\u201c\u9965\u997f\u201d\u7684\u73b0\u8c61\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \nP0  \u2502 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500 \u00b7\u00b7\u00b7\n    \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \n          \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510\nP1  \u2500\u2500\u2500\u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502 \u00b7\u00b7\u00b7\n          \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518\n\nP2  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u00b7\u00b7\u00b7\n

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7531\u4e8e P0 \u548c P1 \u603b\u662f\u8f6e\u6d41\u83b7\u5f97\u9501\uff0c\u5bfc\u81f4 P2 \u59cb\u7ec8\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u9501\uff0c\u56e0\u800c\u5bf9\u4e8e P2 \u6765\u8bf4 waiting time \u5c31\u4e0d\u518d\u6709\u9650\u4e86\u3002

\u7cdf\u4e86\uff0c\u770b\u8d77\u6765\u5f88\u9177\u7684\u4e00\u4e2a\u65b9\u6cd5\u8c8c\u4f3c\u4e0d\u80fd\u6ee1\u8db3 CS \u89e3\u6cd5\u7684\u6027\u8d28\uff0c\u4f46\u4ed4\u7ec6\u5206\u6790\uff0c\u8fd9\u662f\u7531\u4e8e\u9501\u7684\u5206\u914d\u673a\u5236\u662f\u4e0d\u53ef\u63a7\u7684\u2014\u2014\u5728\u4e00\u4e2a\u9501\u88ab\u91ca\u653e\u540e\uff0c\u63a5\u4e0b\u6765\u5c06\u62ff\u5230\u9501\u7684\u8fdb\u7a0b\u5e94\u5f53\u662f\u63a5\u4e0b\u6765\u7b2c\u4e00\u4e2a\u5b9e\u9645\u6267\u884c test_and_set() \u7684\u8fdb\u7a0b\uff0c\u7136\u800c\u7531\u4e8e \u2776 \u6211\u4eec\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u8fd0\u884c\u901f\u5ea6\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u2777 \u6211\u4eec\u5bf9\u540c\u65f6\u4ea7\u751f\u7684 test_and_set() \u5c06\u6309\u4f55\u987a\u5e8f\u88ab\u5904\u7406\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u624b\u52a8\u7528\u67d0\u79cd\u65b9\u6cd5\u6765\u5b9e\u73b0\u8fd9\u79cd\u201c\u9501\u7684\u8c03\u5ea6\u201d\uff1a

// `i` is process id in [0, n), where `n` is the count of related process. \nprocess(i) {\nWAITING[i] = true;                                  // \u2510\nwhile ( WAITING[i] && test_and_set(&LOCK) ) {}      // \u251c entry sec.\n// \u2502\nWAITING[i] = false;                                 // \u2518\n\n/* operate critical resources */                    // - critical sec.\n\n// i.e. find next waiting process j                 // \u2510\nj = (i + 1) % n;                                    // \u2502\nwhile (i != j && !WAITING[j]) {                     // \u251c exit sec.\nj = (i + 1) % n;                                // \u2502\n}                                                   // \u2502\n// release j's LOCK or release whole LOCK           // \u2502\nif (i == j)     LOCK = false;                       // \u2502\nelse            WAITING[j] = false;                 // \u2518\n\n/* other things */                                  // - remainder sec.\n}\n

\u6211\u4eec\u5f15\u5165\u4e86\u4e00\u4e2a WAITING[] \u6570\u7ec4\u6765\u8f85\u52a9 LOCK \u7ec6\u5316\u9501\u7684\u7c92\u5ea6\uff0c\u6b64\u65f6 LOCK \u8868\u793a\u7684\u201c\u662f\u5426\u5b58\u5728\u7ade\u4e89\u201d\uff0c\u800c WAITING[] \u5219\u6807\u8bc6\u4e86\u6240\u6709\u6b63\u5728\u7b49\u5f85\u7684\u8fdb\u7a0b\u3002\u533a\u522b\u4e8e\u4e4b\u524d\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0c\u8ba9\u5269\u4e0b\u7684\u8fdb\u7a0b\u53bb\u201c\u62fc\u624b\u901f\u201d\uff0c\u6211\u4eec\u8fd9\u6b21\u7531\u91ca\u653e\u9501\u7684\u8fdb\u7a0b\u6765\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u662f\u8c01\u3002

\u5728 11-14 \u884c\uff0c\u901a\u8fc7\u4e00\u4e2a\u5faa\u73af\u627e\u5230\u4e0b\u4e00\u4e2a WAITING[j] \u4e3a true \u7684 j\uff0c\u2776 \u5982\u679c\u627e\u5230\u4e86\u8fd9\u4e2a j\uff0c\u90a3\u4e48\u5c31\u5c06 WAITING[j] \u8bbe\u4e3a false\uff0819 \u884c\uff09\uff0c\u8fd9\u6837 j \u9a6c\u4e0a\u5c31\u4f1a\u5728\u7b2c 4 \u884c break\uff0c\u8fdb\u5165 critical section\uff1b\u2777 \u800c\u5982\u679c\u627e\u4e0d\u5230\u8fd9\u4e2a j\uff0c\u5373\u627e\u4e86\u4e00\u5708\u53c8\u627e\u56de\u4e86 i\uff0c\u90a3\u4e48\u8bf4\u660e i \u662f\u6700\u540e\u4e00\u4e2a\u4e86\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0817 \u884c\uff09\u3002

\u901a\u8fc7\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u4fdd\u8bc1\u4e86\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u6700\u591a\u53ea\u9700\u8981\u7b49\u5f85 n-1 \u4e2a\u8fdb\u7a0b\u8fd0\u884c\u5b8c critical section\uff08\u7c7b\u4f3c\u4e8e\u5b9e\u73b0\u4e86\u201cFCFS\u201d\uff09\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#compare_and_swap","title":"compare_and_swap()","text":"

Links

compare_and_swap() \u4e5f\u88ab\u7b80\u5199\u4e3a CAS \u6307\u4ee4\uff0c\u5b83\u7684\u529f\u80fd\u5982\u4e0b\uff1a

<atomic> compare_and_swap(int * target, int expected, int new_val) {\nint ret = *target;\n\n// *target = (*target == expected) ? new_val : *target;\nif (*target == expected) {\n*target = new_val;\n}\n\nreturn ret;\n}\n

CAS \u63a5\u53d7\u4e09\u4e2a\u503c\uff1a

  1. target \u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u5730\u5740\uff1b
  2. expected \u9884\u671f\u4e2d\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u65e7\u503c\uff1b
  3. new_val \u5e0c\u671b\u5c06\u6570\u636e\u4fee\u6539\u4e3a\u7684\u65b0\u503c\uff1b

\u800c\u5f53\u4e14\u4ec5\u5f53 *target \u7b26\u5408\u9884\u671f\uff0c\u4e0e expected \u76f8\u540c\u65f6\u5019\uff0c\u624d\u4f1a\u5c06\u5b83\u6539\u4e3a new_val\u3002\u540c\u6837\uff0cCAS \u4e5f\u5e94\u5f53\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u82e5\u5e72 CAS \u540c\u65f6\u53d1\u751f\u65f6\uff0c\u4e5f\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u5b58\u5728\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

\u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5b9e\u9645\u4e0a test_and_set(target) \u5c31\u662f compare_and_swap(target, false, true)\uff0c\u56e0\u800c\u5b9e\u9645\u4e0a CAS \u89e3\u51b3 CS \u95ee\u9898\u7684\u65b9\u6cd5\u4ee5\u53ca\u95ee\u9898\u548c\u4e0a\u4e00\u8282\u7684\u5185\u5bb9\u6ca1\u4ec0\u4e48\u5dee\u522b\u3002

\u4f46\u662f\u6211\u4eec\u53d1\u73b0\uff0ccompare_and_swap() \u76f8\u6bd4\u4e8e test_and_set()\uff0c\u663e\u7136\u6709\u66f4\u5927\u7684\u64cd\u4f5c\u7a7a\u95f4\uff0c\u4e5f\u66f4\u6cdb\u7528\uff0c\u8003\u8651\u5230 CAS \u6307\u4ee4\u81ea\u8eab\u5df2\u7ecf\u80fd\u591f\u652f\u6301\u539f\u5b50\u6027\u7684\u4fee\u6539\u503c\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u8df3\u51fa CS \u95ee\u9898\u7684\u8303\u5f0f\u6765\u8003\u8651\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#atomic-variables","title":"Atomic Variables","text":"

\u539f\u5b50\u53d8\u91cf(atomic variables)\u662f\u4e00\u79cd\u7528\u539f\u5b50\u6027\u64cd\u4f5c\u7ef4\u62a4\u7684\u53d8\u91cf\u3002\u6211\u4eec\u6240\u6709\u5bf9\u539f\u5b50\u53d8\u91cf\u7684\u64cd\u4f5c\u53ef\u4ee5\u901a\u8fc7 CAS \u6765\u5b9e\u73b0\uff0c\u4f8b\u5982\u81ea\u589e\u64cd\u4f5c\uff1a

increment(atomic_int * v) {\nint tmp;\ndo {\ntmp = *v;\n} while ( tmp != compare_and_swap(v, tmp, tmp+1) );\n}\n

\u4f7f\u7528 atomic variables \u540e\u5b9e\u9645\u4e0a\u5c31\u4e0d\u592a\u7b26\u5408 CS \u95ee\u9898\u7684\u6a21\u578b\u4e86\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u91cc\u5e76\u4e0d\u518d\u9700\u8981\u7ef4\u62a4\u7c7b\u4f3c LOCK \u7684\u4e1c\u897f\uff0c\u800c\u662f\u4ee5 *target \u662f\u5426\u7b26\u5408 expected \u7684\u9884\u8bbe\u6765\u5224\u65ad\u662f\u5426\u6709\u7ade\u4e89\u51fa\u73b0\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u540c\u6b65\u5de5\u5177\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u79cd\u5c01\u88c5\u540e\u7684\u539f\u5b50\u6027\u64cd\u4f5c\u6765\u89e3\u51b3 race condition\uff0c\u800c\u4e0d\u9700\u8981\u518d\u533a\u5206 entry section \u6216\u662f critical section \u7b49\u3002

\u4e66\u672c\u4e0a\u7279\u5730\u63d0\u5230\uff0c\u5728\u4f8b\u5982 producer&consumer \u7684\u6a21\u578b\u4e2d\uff0c\u4f7f\u7528 atomic variables \u7ef4\u62a4 count \u5e76\u4e0d\u80fd\u89e3\u51b3 race condition\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u79cd\u8ba8\u8bba\u662f\u6709\u5931\u504f\u9887\u7684\uff0c\u6240\u8c13\u7684\u201c\u539f\u5b50\u6027\u201d\u5e94\u8be5\u5305\u62ec\u6240\u6709\u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u90e8\u5206\uff0c\u4e66\u4e2d\u53ea\u7ef4\u62a4 count \u4e0d\u7ef4\u62a4 buffer \u7684\u5047\u8bbe\u6211\u89c9\u5f97\u5bf9\u4e8e atomic \u8fd9\u4e2a\u6982\u5ff5\u6765\u8bf4\u5b9e\u5728\u4e0d\u591f\u516c\u5e73\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5c31\u4e0d\u7740\u91cd\u8bf4\u660e\u8fd9\u4e2a\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#mutex-locks","title":"Mutex Locks","text":"

\u7531\u6b64\u6211\u4eec\u5df2\u7ecf\u5f97\u5230\u4e86\u80fd\u5728\u786c\u4ef6\u5c42\u9762\u89e3\u51b3 race condition \u95ee\u9898\u7684\u6839\u6e90\u7684\u5de5\u5177\u4e86\uff0c\u4f46\u662f\u4e3a\u4e86\u80fd\u8ba9\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u66f4\u597d\u7684\u4f7f\u7528\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u505a\u4e00\u6b21\u8f6f\u4ef6\u5c42\u9762\u7684\u5c01\u88c5\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e92\u65a5\u9501(mutex locks)\u8fd9\u4e2a\u4e1c\u897f\u3002

\u5229\u7528\u4e92\u65a5\u9501\u907f\u514d race condition \u7684\u57fa\u672c\u601d\u8def\u4ecd\u7136\u662f\u57fa\u4e8e CS \u95ee\u9898\u7684\u5efa\u6a21\uff0c\u4f46\u5b83\u66f4\u5177\u4f53\u5730\u8ba4\u4e3a\u5728 entry section \u5c31\u8be5\u53bb\u7d22\u53d6\u4e92\u65a5\u9501\uff0c\u800c\u5728 exit section \u5c31\u5e94\u8be5\u53bb\u91ca\u653e\u4e92\u65a5\u9501\uff0c\u5373\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Acquire Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Release Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u56de\u987e\u6211\u4eec\u5728\u4ecb\u7ecd test_and_set() \u90e8\u5206\u7ed9\u51fa\u7684\u8fd9\u6bb5\u4ee3\u7801\uff1a

process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n/* other things */                  // - remainder section\n}\n

\u6211\u4eec\u53ea\u9700\u8981\u5c06\u9ad8\u4eae\u7684\u8fd9\u4e24\u884c\u5c01\u88c5\u8d77\u6765\uff0c\u5c31\u5b9e\u73b0\u4e86 acquire LOCK \u548c release LOCK\u3002

// `available` means whether the `LOCK` is free, or whether the related \n// resources is available\nacquire() {\nwhile ( !compare_and_swap(&available, true, false) ) {}\n}\n\nrelease() {\navailable = true;\n}\n

\u4f60\u53ef\u80fd\u6ce8\u610f\u5230\u4e86\uff0c\u6211\u4eec\u5728 test_and_set() \u8ba8\u8bba\u4e0a\u9762\u90a3\u6bb5\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u8ba8\u8bba\u8fc7\u5b83\u65e0\u6cd5\u6ee1\u8db3 bounded waiting time \u7684\u95ee\u9898\uff0c\u90a3\u65e2\u7136\u5982\u6b64\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u628a WAITING[] \u4e5f\u4e00\u8d77\u5c01\u8fdb\u53bb\u5462\uff1f

\u8fd9\u662f\u56e0\u4e3a\u4e66\u4e0a\u76f4\u63a5\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u76f4\u5230\u5728\u4e4b\u540e\u8bb2 semaphores \u7684\u65f6\u5019\u624d\u60f3\u8d77\u6765\uff0c\u4f46 semaphores \u548c mutex lock \u53c8\u662f\u4e24\u4e2a\u8def\u5b50\uff0c\u6211\u4e5f\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u60f3\u8bf4\u660e\u4ec0\u4e48\u95ee\u9898\u3002\u4f46\u662f\u65e2\u7136\u5b83\u73b0\u5728\u5ffd\u7565\u4e86\uff0c\u6211\u4eec\u5c31\u5148\u4e0d\u7ba1\u5b83\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u610f\u8bc6\u5230\u8fd9\u4e2a\u95ee\u9898\u662f\u5b58\u5728\u7684\u3002

\u7ecf\u8fc7\u8fd9\u4e48\u957f\u7684\u94fa\u57ab\uff0c\u6211\u4eec\u73b0\u5728\u80fd\u591f\u4fdd\u8bc1\u7684\u4e00\u4ef6\u4e8b\u662f\uff0c\u6211\u4eec\u7ec8\u4e8e\u5f97\u5230\u4e86\u4e00\u4e2a\u8f6f\u4ef6\u5c42\u9762\u7684\u3001\u80fd\u591f\u907f\u514d race condition \u7684\u540c\u6b65\u5de5\u5177\u3002\u90a3\u4e48\u5b9e\u73b0\u57fa\u672c\u9700\u6c42\u4ee5\u540e\u6211\u4eec\u5c31\u5f00\u59cb\u8003\u8651\u80fd\u4e0d\u80fd\u4f18\u5316\u5b83\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u5fd9\u7b49\u5f85","title":"\u5fd9\u7b49\u5f85","text":"

\u5982\u679c\u8bfb\u8005\u5bf9\u4ee3\u7801\u6709\u6bd4\u8f83\u654f\u611f\u7684\u55c5\u89c9\uff0c\u90a3\u53ef\u80fd\u770b\u8fd9\u51e0\u5343\u4e2a\u5b57\u5230\u73b0\u5728\uff0c\u4f60\u5df2\u7ecf\u4e3a\u6570\u4e0d\u6e05\u7684 while() \u63d0\u5fc3\u540a\u80c6\u8fc7\u5341\u591a\u6b21\u4e86\u3002\u6ca1\u9519\uff0c\u867d\u7136\u6211\u4eec\u901a\u8fc7\u903b\u8f91\u4fdd\u8bc1\u8fd9\u91cc\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u5faa\u73af\uff0c\u4f46\u5bf9\u4e8e\u7b49\u5f85\u4e2d\u7684 process\uff0c\u786e\u5b9e\u8981\u5728\u6570\u4e0d\u5c3d\u7684 while loop \u4e2d\u6d6a\u8d39 CPU\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u7b49\u5f85\u9501\u91ca\u653e\u7684\u884c\u4e3a\u4e3a\u5fd9\u7b49\u5f85(busy waiting)\uff0c\u5176\u4e2d\u201c\u5fd9\u201d\u6307\u7684\u5c31\u662f\u5728\u7b49\u5f85\u8fc7\u7a0b\u4e2d\u4ecd\u7136\u5360\u7528 CPU \u8d44\u6e90\u3002\u800c\u8fd9\u79cd\u4f7f\u7528\u5fd9\u7b49\u5f85\u7684\u4e92\u65a5\u9501\uff0c\u4e5f\u88ab\u79f0\u4e3a\u81ea\u65cb\u9501(spinlock)\u3002

\u6211\u4eec\u5f15\u5165\u4e24\u4e2a\u8bcd\u6765\u66f4\u51c6\u786e\u7684\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\uff1a

Lock Contention

\u5982\u679c\u4e00\u4e2a\u7528\u6237\u8bd5\u56fe\u7d22\u53d6\u67d0\u4e2a\u9501\u65f6\uff0c\u5982\u679c\u8fd9\u4e2a\u9501\u4e0d\u662f available \u7684\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u6709\u7528\u6237\u6b63\u5728\u4f7f\u7528\u8fd9\u4e2a\u9501\uff0c\u800c\u5f53\u524d\u7528\u6237\u9700\u8981\u7b49\u5f85\u8fd9\u4e2a\u9501\u91cd\u65b0\u53ef\u7528\uff0c\u6b64\u65f6\u6211\u4eec\u79f0\u8fd9\u4e2a\u9501\u662f\u88ab\u4e89\u62a2\u7684(contended)\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u4e89\u62a2\uff0c\u6211\u4eec\u5c31\u79f0\u4e4b\u4e3a\u4e0d\u88ab\u4e89\u62a2\u7684(uncontended)\u3002

\u5982\u679c\u73b0\u5728\u6709\u597d\u591a\u7528\u6237\u90fd\u5728\u4e89\u62a2\u4e00\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a high contention\uff1b\u53cd\u4e4b\u5982\u679c\u53ea\u6709\u96f6\u661f\u51e0\u4e2a\u7528\u6237\u5728\u4e89\u62a2\u8fd9\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a low contention\u3002

\u5982\u679c\u5ef6\u7528 spinlock\uff0c\u90a3\u4e48\u4e0d\u96be\u5f97\u5230\u7ed3\u8bba\uff1ahigh contention \u4f1a\u5bfc\u81f4\u4e25\u91cd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u603b\u662f\u4f1a\u6709\u5927\u91cf\u5f97\u4e0d\u5230\u9501\u7684\u7528\u6237\u5904\u4e8e busy waiting \u4e2d\u3002

\u65e2\u7136\u5b83\u4eec\u90fd\u662f\u5728\u505a\u65e0\u610f\u4e49\u7684\u7b49\u5f85\uff0c\u90a3\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u5728\u8fd9\u4e2a\u65f6\u5019\u628a\u8d44\u6e90\u8ba9\u7ed9\u6709\u9700\u8981\u7684\u4eba\u5462\uff1f

\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6682\u65f6\u5730\u5207\u6362\u8fdb\u7a0b\uff0c\u8ba9\u8fd9\u4e9b\u5904\u4e8e\u7b49\u5f85\u7684\u7528\u6237\u6682\u65f6\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5230\u6765\u518d\u5524\u9192\u5b83\u4eec\uff0c\u6b64\u65f6\u5c31\u9700\u8981\u7cfb\u7edf\u8c03\u7528\u7684\u4ecb\u51653\u3002\u800c\u5177\u4f53\u7684\u65b9\u6cd5\u6211\u4eec\u5728\u4e0b\u4e00\u8282\u7684\u907f\u514d\u5fd9\u7b49\u5f85\u4e2d\u4ecb\u7ecd\u3002

\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u9700\u8981\u4fdd\u6301\u5ba2\u89c2\uff1aspinlock \u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u662f\u6709\u597d\u5904\u7684\uff0c\u5728\u7b49\u5f85\u65f6\u95f4\u5e76\u4e0d\u957f\u7684\u60c5\u51b5\u4e0b\uff0c\u76f8\u6bd4\u4e8e\u62e5\u6709\u9501\u7684\u7528\u6237\u91ca\u653e\u9501\uff0c\u8fdb\u884c\u8c03\u5ea6\u9501\u9700\u8981\u7684 context switch \u7684\u5f00\u9500\u53ef\u80fd\u663e\u5f97\u8f83\u5927\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6211\u4eec\u8fd8\u6ca1\u6765\u5f97\u53ca\u628a\u8d44\u6e90\u8ba9\u7ed9\u522b\u4eba\u9501\u5c31\u597d\u4e86\uff0c\u90a3\u4e48\u8fd9\u79cd\u8d44\u6e90\u8f6c\u8ba9\u8fd8\u4e0d\u5982\u4e0d\u8f6c\u3002\u800c\u4e8b\u5b9e\u4e0a\uff0c\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\uff0c\u81ea\u65cb\u9501\u4e5f\u786e\u5b9e\u662f\u4e00\u4e9b\u591a\u6838\u7cfb\u7edf\u7684\u9996\u9009\u3002

\u4e0d\u8fc7\u5728\u8bb8\u591a\u8bed\u5883\u91cc mutex \u548c spinlock \u662f\u88ab\u533a\u5206\u5f00\u6765\u7684\u4e24\u4e2a\u6982\u5ff5\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u4e2a\u5219\u9700\u8981\u9002\u65f6\u5224\u65ad4\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#semaphores","title":"Semaphores","text":"

Links

Mutex lock \u4e3a\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u4e86\u7c7b\u4f3c\u4e8e\u201c\u623f\u95f4\u7533\u8bf7\u201d\u7684\u529f\u80fd\uff0c\u9501\u7ade\u4e89\u5c31\u597d\u50cf\u5927\u5bb6\u62a2\u623f\u95f4\u7684\u4f7f\u7528\u6743\u3002\u800c\u4fe1\u53f7\u91cf(semaphores)\u5219\u662f\u7c7b\u4f3c\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 atomic variables\uff0c\u901a\u8fc7\u63d0\u4f9b\u6807\u51c6\u5316\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6765\u7ef4\u62a4\u4e00\u4e9b\u53d8\u91cf\uff0c\u53ea\u4e0d\u8fc7\u5b83\u989d\u5916\u5bf9\u53d8\u91cf\u7684\u503c\u6709\u4e00\u5b9a\u7684\u7ea6\u675f\u3002

\uff08\u8bf4\u5b9e\u8bdd\u6211\u611f\u89c9\u8fd9\u4fe9\u4e1c\u897f\u672c\u8d28\u4e0a\u771f\u6ca1\u5565\u533a\u522b\u2026\u2026\uff09

Semaphores \u53ea\u63d0\u4f9b\u4e24\u4e2a\u6807\u51c6\u5316\u7684\u63a5\u53e3\uff1await()\uff08\u6216P()\uff09 \u548c signal()\uff08\u6216V()\uff09\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u5982\u4e0b\uff1a

<atomic> wait(reference S) {\nwhile (S <= 0) {} // busy wait here\nS--;\n}\n\n<atomic> signal(reference S) {\nS++;\n}\n

\u663e\u7136\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\u7684\u5b9e\u73b0\u4e5f\u5e94\u5f53\u4fdd\u8bc1\u662f atomic \u7684\u3002

\u533a\u522b\u4e8e\u666e\u901a\u7684 atomic variables\uff0csemaphores \u591a\u4e86\u5728\u7b2c 2 \u884c\u7684 busy wait\uff0c\u8fd9\u6697\u542b\u4e86\u4e00\u79cd\u201c\u6709\u9650\u201d\u7684\u6982\u5ff5\uff0c\u5373\u4fdd\u8bc1 \\(0 \\leq S\\)\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0csemaphores \u5206\u4e3a counting semaphore \u548c binary semaphore\uff0c\u524d\u8005\u7684\u529f\u80fd\u5982\u4e0a\uff0c\u540e\u8005\u53ea\u4e0d\u8fc7\u662f\u989d\u5916\u8981\u6c42 \\(0 \\leq S \\leq 1\\)\uff0c\u4fee\u6539 loop \u7684\u6761\u4ef6\u5373\u53ef\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u4f7f\u7528","title":"\u4f7f\u7528","text":"

\u4f8b\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u5f0f\uff0c\u4fdd\u8bc1 P0() \u4e2d\u7684 section A \u5fc5\u987b\u5728 P1() \u7684 section B \u4e4b\u524d\u5b8c\u6210\uff1a

semaphore S = 0;\n\nP0() {\n/* Section A */\nsignal(S);\n}\n\nP1() {\nwait(S);\n/* Section B */\n}\n

\u4e0a\u9762\u7684\u4f8b\u5b50\u975e\u5e38\u5f62\u8c61\u5730\u5c55\u793a\u4e86\u4fe1\u53f7\u91cf\u662f\u5982\u4f55\u53d1\u6325\u4f5c\u7528\u7684\uff0c\u5f53\u7136\uff0c\u4e0a\u9762\u53ea\u5c55\u793a\u4e86\u7c7b\u4f3c\u8fdb\u7a0b\u95f4\u901a\u8baf\u7684\u529f\u80fd\uff0c\u4e0b\u9762\u8fd9\u4e2a\u5f62\u5f0f\u5219\u66f4\u63a5\u8fd1\u6211\u4eec\u4e0a\u6587\u4e2d\u8ba8\u8bba\u7684\u60c5\u51b5\uff0c\u5373\u5b9e\u73b0\u4e86\u4e92\u65a5\uff1a

// `i` is process id and S is the semaphores\nprocess(i) {\nwait(S);    // i.e. release the 'LOCK'\n\n/* critical section */\n\nsignal(S);  // only one process can pass this line at once\n}\n
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u907f\u514d\u5fd9\u7b49\u5f85","title":"\u907f\u514d\u5fd9\u7b49\u5f85","text":"

\u6211\u4eec\u5728 mutex \u4e2d\u63d0\u51fa\u5fd9\u7b49\u5f85\u7684\u65f6\u5019\u5c31\u5df2\u7ecf\u63d0\u5230\u8fc7\uff0c\u53ef\u4ee5\u901a\u8fc7\u300c\u5728\u7b49\u5f85\u7684\u65f6\u5019\u8ba9\u8fdb\u7a0b\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5408\u9002\u7684\u65f6\u5019\u518d\u5524\u9192\u300d\u7684\u65b9\u5f0f\uff0c\u6765\u51cf\u5c0f\u8f83\u957f\u7684\u5fd9\u7b49\u5f85\u5f15\u8d77\u7684\u6027\u80fd\u964d\u4f4e\u3002\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u9700\u8981\u6269\u5c55 semaphores \u7684\u5185\u5bb9\uff0c\u5f15\u5165\u4e00\u4e2a\u94fe\u8868\u6765\u7ef4\u62a4\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u3002

struct semaphore {\nvalue;\nwaiting_list;\n};\n\n<atomic> wait(reference S) {\nS->value--;\nif (S->value < 0) {\nS->waiting_list.push(current process);\nsleep();\n}\n}\n\n<atomic> signal(reference S) {\nS->value++;\nif (S->value <= 0) {\np = S->waiting_list.pop();\nwakeup(p);\n}\n}\n

\u76f8\u6bd4\u4e8e\u4e4b\u524d\u7684\u903b\u8f91\uff0c\u73b0\u5728\u7684\u903b\u8f91\u7a0d\u5fae\u6709\u70b9\u53d8\u5316\uff0c\u8bf7\u8bfb\u8005\u5c1d\u8bd5\u72ec\u7acb\u5206\u6790\u5176\u4e2d\u7684\u5965\u79d8\u3002\u8fd9\u91cc\u662f\u4e00\u4e9b\u63d0\u793a\uff1a

\u601d\u8003\u9898

  1. \u73b0\u5728\u5df2\u7ecf\u6ca1\u6709 while \u4e86\uff0c\u53ea\u4f59\u4e0b if\uff0c\u73b0\u5728\u662f\u5982\u4f55\u4fdd\u8bc1\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u80fd\u591f\u88ab\u53ca\u65f6\u5524\u9192\uff1f
  2. wait \u539f\u5148\u662f\u5148\u7b49\u5f85\u518d\u4fee\u6539\uff0c\u73b0\u5728\u662f\u5148\u4fee\u6539\u3001\u518d\u7b49\u5f85\uff0c\u8fd9\u5bf9\u6574\u4f53\u903b\u8f91\u6709\u4f55\u5f71\u54cd\uff1f
  3. signal \u4e2d\u7684\u6761\u4ef6\u8bed\u53e5\uff0c\u4e3a\u4f55\u662f S->value <= 0\uff1f\u8fd9\u4e2a\u6761\u4ef6\u4e3a false \u65f6\u610f\u5473\u7740\u4ec0\u4e48\uff1f
    • \u8003\u8651\u5728 high contention \u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u603b\u662f\u4e00\u51fa\u73b0\u5c31\u88ab\u62a2\u7a7a\u3002
  1. The Critical Section Problem \u21a9

  2. \u4e66\u672c\u4e2d\u5bf9 preemptive kernels \u548c non-preemptive kernels \u7684\u5b9a\u4e49\u5e76\u4e0d\u51c6\u786e\uff0c\u4e24\u8005\u6700\u672c\u8d28\u7684\u533a\u522b\u662f\u540e\u8005\u5b9e\u73b0\u4e86 Giant Lock\u3002\u540c\u65f6\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff1aWhat was the reason of the non-preemptivity of older Linux kernels? \u21a9

  3. Mutex access and system call \u21a9

  4. \u2b50\ufe0f When should one use a spinlock instead of mutex? \u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/","title":"U2 Part 2: \u540c\u6b65\u95ee\u9898\u4f8b\u5b50 | Synchronization Problems Examples","text":"

\u7ea6 1567 \u4e2a\u5b57 51 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-bounded-buffer-problem","title":"The Bounded-Buffer Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f","title":"\u95ee\u9898\u80cc\u666f","text":"

The Bounded-Buffer Problem \u53c8\u79f0 The Producer\u2013Consumer Problem\uff0c\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u6709\u4e24\u4e2a\u89d2\u8272\uff0cproducer \u548c consumer\uff1aproducer \u4f1a\u4ea7\u751f item \u5b58\u653e\u5230 buffer \u4e2d\uff0c\u800c consumer \u53ef\u4ee5\u5c06\u6570\u636e\u4ece buffer \u4e2d\u53d6\u51fa item\u3002\u5982\u679c\u6211\u4eec\u7528 \\(n = \\# items\\) \u6765\u63cf\u8ff0 buffer \u7684\u72b6\u6001\uff0c\u90a3\u4e48\u95ee\u9898\u5c06\u62bd\u8c61\u4e3a\uff1a

void produce() {\n/* something */\n++n;\n/* something */\n}\n\nvoid consume() {\n/* something */\n--n;\n/* something */\n}\n

\u540c\u65f6\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(0 \\leq n \\leq n_{max}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 \\(n = 0\\) \u65f6\uff0c\u8ba9 consumer \u7b49\u5f85 \\(n > 0\\) \u518d consume()\uff1b\u5bf9\u5e94\u7684\uff0c\u5728 \\(n = n_{max}\\) \u65f6\u5019\uff0c\u8ba9 producer \u7b49\u5f85 \\(n < n_{max}\\) \u518d produce()\u3002\u4f46\u8fd9\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u5355\u5143\u63d0\u53ca\u5b83\u7684\u91cd\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u8fd9\u91cc\u8ba4\u4e3a\u5b83\u4eec\u5728 /* something */ \u4e2d\u3002

\u5b9e\u9645\u7684 The Bounded-Buffer Problem \u4e2d\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7ec6\u8282\uff0c\u4f46\u662f\u8fd9\u91cc\u6211\u4eec\u5c06\u6574\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u6211\u4eec\u9700\u8981\u7684\u6a21\u6837\uff0c\u8bf7\u4e0d\u8981\u8ba4\u4e3a\u4e0a\u9762\u7684\u4ee3\u7801\u5c31\u662f The Bounded-Buffer Problem \u7684\u5168\u90e8\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u63cf\u8ff0","text":"

\u8003\u8651\u5728\u5e76\u884c\u8bed\u5883\u4e0b\uff0cproduce() \u548c consume() \u540c\u65f6\u53d1\u751f\uff0c\u7531\u4e8e ++n \u548c --n \u8fd9\u4e9b\u64cd\u4f5c\u672c\u8d28\u4e0a\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\uff0c\u6240\u4ee5\u5bb9\u6613\u51fa\u73b0 race condition\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores","title":"\u89e3\u51b3 - semaphores","text":"

\u6211\u4eec\u4f7f\u7528\u4fe1\u53f7\u91cf\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u9700\u8981\u5b9a\u4e49\u4e09\u4e2a\u4fe1\u53f7\u91cf\uff1a

// suppose the capacity of the buffer is n\nsemaphore mutex = 1;\nsemaphore empty = n;\nsemaphore full  = 0;\n

\u903b\u8f91\u4e0a\u6211\u4eec\u8981\u6c42 empty + full == n \u59cb\u7ec8\u6210\u7acb\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u4ea7\u751f\u4e00\u5b9a\u8bef\u5dee\uff08\u8003\u8651\u67d0\u4e2a\u539f\u8bed\u8fd8\u6ca1\u5f7b\u5e95\u6267\u884c\u5b8c\uff09\u3002\u800c\u6211\u4eec\u8fd9\u91cc\u4e4b\u6240\u4ee5\u8981\u4f7f\u7528\u4e24\u4e2a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a buffer \u7684\u5360\u7528\u72b6\u6001\uff0c\u662f\u56e0\u4e3a\u4fe1\u53f7\u91cf\u7684\u201c\u6709\u754c\u201d\u662f\u901a\u8fc7 0 \u7ef4\u62a4\u7684\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5728\u201c\u51cf\u5c11\u201d\u7684\u65f6\u5019\u624d\u80fd\u7ef4\u62a4\uff1b\u800c\u6211\u4eec\u7684\u8981\u6c42\u662f\uff0cbuffer \u7684\u4e0a\u4e0b\u754c\u90fd\u6709\u754c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e24\u4e2a\u4fe1\u53f7\u91cf\u5206\u522b\u6765\u7ef4\u62a4\u4e24\u4e2a\u8fb9\u754c\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-readerswriters-problem","title":"The Readers\u2013Writers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

\u8be5\u95ee\u9898\u62bd\u8c61\u81ea\u6570\u636e\u5e93\u7684\u4f7f\u7528\u3002\u7528\u6237\u4f7f\u7528\u6570\u636e\u5e93\u4fee\u6539\u6570\u636e\uff08UPDATE\uff09\uff0c\u672c\u8d28\u4e0a\u4e5f\u662f\u6709\u4e09\u4e2a\u6b65\u9aa4\uff1a

  1. [READ] \u4ece\u6570\u636e\u5e93\u4e2d\u68c0\u7d22\u3001\u8bfb\u53d6\u6570\u636e\uff1b
  2. \u6570\u636e\u7ecf\u8fc7\u4e1a\u52a1\u903b\u8f91\u7684\u5904\u7406\uff0c\u5f97\u5230\u65b0\u503c\uff1b
  3. [WRITE] \u5c06\u65b0\u503c\u5199\u56de\u6570\u636e\u5e93\uff1b

\u8fd9\u4e2a\u6b65\u9aa4\u4e0e\u6211\u4eec\u4fee\u6539 mem[x] \u7684\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\uff0c\u56e0\u6b64\u9047\u5230\u7684\u95ee\u9898\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002

\u51b2\u7a81\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u79cd\u60c5\u51b5\uff1a

\u663e\u7136\uff0creader \u548c reader \u4e0d\u4f1a\u6709\u51b2\u7a81\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_1","title":"\u89e3\u51b3 - semaphores","text":"

\u6709\u4e24\u79cd\u79cd\u6734\u7d20\u7684\u89e3\u51b3\u529e\u6cd5\uff1a\u24f5 writer \u603b\u662f\u7b49\u5f85 reader\uff0c\u24f6 reader \u603b\u662f\u7b49\u5f85 writer\u3002\u4f46\u662f\u8fd9\u4e24\u79cd\u89e3\u51b3\u529e\u6cd5\u90fd\u4e0d\u662f\u5f88\u597d\uff0c\u56e0\u4e3a \u24f5 \u4f1a\u5bfc\u81f4 writer \u9965\u997f\uff0c\u24f6 \u4f1a\u5bfc\u81f4 reader \u9965\u997f\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u7ed9\u51fa\u6b63\u5f0f\u7684\u89e3\u51b3\u65b9\u6cd5\uff0c\u5f15\u5165\u4e24\u4e2a\u4fe1\u53f7\u91cf\u548c\u4e00\u4e2a\u5171\u4eab\u53d8\u91cf\uff1a

semaphores rw_mutex   = 1;\nsemaphores mutex      = 1;\nint        read_count = 0;\n

\u8003\u8651\u5230 reader \u548c reader \u4e0d\u4f1a\u51b2\u7a81\uff0c\u6240\u4ee5 readers \u4e4b\u95f4\u4e0d\u5e94\u8be5\u4e92\u65a5\u3002\u800c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1\u7684\u662f\uff1a\u5355\u4e2a writer \u548c\u82e5\u5e72 readers \u4e4b\u95f4\u4e92\u65a5\uff0c\u5355\u4e2a writer \u548c\u5355\u4e2a writer \u4e4b\u95f4\u4e92\u65a5\u3002\u800c rw_mutex \u5c31\u662f\u7528\u4e8e\u63a7\u5236\u8fd9\u79cd\u4e92\u65a5\u3002

writer's code
writer() {\nwait(rw_mutex);\n\n/* critical section */\nsignal(rw_mutex);\n}\n

\u4f46\u6b64\u65f6\u5982\u4f55\u4fdd\u8bc1 readers \u4e4b\u95f4\u4e0d\u4f1a\u4e92\u65a5\u5462\uff1f\u9996\u5148\uff0c\u5f53\u7b2c\u4e00\u4e2a reader \u8bd5\u56fe\u8fdb\u5165\u4e34\u754c\u6bb5\u65f6\uff0c\u5b83\u5e94\u5f53\u83b7\u53d6\u4e00\u4e2a rw_mutex\uff0c\u4ee5\u963b\u6b62\u5176\u5b83 writer \u8fdb\u5165\u4e34\u754c\u6bb5\u3002\u800c\u5bf9\u4e8e\u4e4b\u540e\u7684 reader \u6765\u8bf4\uff0c\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a reader\uff0c\u90a3\u4e48\u5b83\u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6bb5\uff1b\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a writer\uff0c\u90a3\u4e48\u5b9e\u9645\u4e0a\u5b83\u624d\u662f\u7b2c\u4e00\u4e2a reader\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u62ff rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5224\u65ad\u5f53\u524d\u6709\u6ca1\u6709 reader \u6b63\u5728\u4eab\u7528\u4e34\u754c\u8d44\u6e90\u5373\u53ef\uff1b\u800c\u5bf9\u4e8e\u653e rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u9700\u8981\u5224\u65ad\u5f53\u524d\u662f\u4e0d\u662f\u6700\u540e\u4e00\u4e2a reader\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u8ba1\u6570\u5668 read_count\uff0c\u800c\u7531\u4e8e\u8fd9\u4e2a\u8ba1\u6570\u5668\u662f\u4e2a\u666e\u901a\u7684\u5171\u4eab\u53d8\u91cf\uff0c\u800c\u4e14\u8fd9\u4e2a\u8ba1\u6570\u5668\u672c\u8eab\u4e5f\u662f\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a mutex \u6765\u7ef4\u62a4\u5b83\u3002

\u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a reader \u7684\u4ee3\u7801\u4e2d\u542b\u6709 3 \u4e2a\u4e34\u754c\u6bb5\uff0c\u5206\u522b\u662f\uff1a\u8ba1\u6570\u5668\u589e\u3001\u8bfb\u53d6\u4e34\u754c\u8d44\u6e90\u3001\u8ba1\u6570\u5668\u51cf\u3002

reader's code
reader() {\nwait(mutex);            //   \u2510\nread_count++;           //   \u251c obtain `mutex` to increase\nif (read_count == 1) {  //   \u2502 `read_count`\nwait(rw_mutex);     // \u2510 \u2502\n}                       // \u2502 \u2502\nsignal(mutex);          // \u2502 \u2518\n// \u251c\u2500\u2500 readers share `rw_mutex` to\n/* critical section */  // \u2502   read critical resource\n// \u2502\nwait(mutex);            // \u2502 \u2510\nread_count--;           // \u2502 \u251c obtain `mutex` to decrease\nif (read_count == 0) {  // \u2502 \u2502 `read_count`\nsignal(rw_mutex);   // \u2518 \u2502\n}                       //   \u2502\nsignal(mutex);          //   \u2518\n}\n

\u903b\u8f91\u4e0a\uff0c\u91ca\u653e rw_mutex \u7684 reader \u4e0d\u9700\u8981\u662f\u7533\u8bf7 rw_mutex \u7684 reader\uff0c\u8fd9\u4e5f\u5370\u8bc1\u4e86\u8fd9\u4e2a\u9501\u7ef4\u62a4\u7684\u662f\u6574\u4e2a readers \u7fa4\u4f53\u7684\u5b58\u5728\u4e0e\u5426\uff0c\u800c\u4e0d\u662f\u201c\u67d0\u4e2a reader\u201d\u7684\u5b58\u5728\u4e0e\u5426\u3002

\u4e3a\u4ec0\u4e48 read_count \u4e0d\u4f7f\u7528\u4fe1\u53f7\u91cf\uff1f

\u6211\u4eec\u89c2\u5bdf\u5bf9 read_count \u7684\u64cd\u4f5c\uff0c\u4e00\u5171\u6709\u4e09\u7c7b\uff1a

  1. read_count++\uff1b
  2. read_count--\uff1b
  3. read_count == k\uff1b

\u5e76\u4e14 read_count >= 0 \u5e94\u5f53\u59cb\u7ec8\u6210\u7acb\uff0c\u6240\u4ee5\u5149\u770b\u524d\u4e24\u7c7b\uff0c\u5176\u5b9e\u5f88\u9002\u5408\u76f4\u63a5\u4f5c\u4e3a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u3002\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\u5bf9\u4fe1\u53f7\u91cf\u8fdb\u884c\u6bd4\u8f83\u64cd\u4f5c\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528 mutex \u7ef4\u62a4\u4e86 read_count\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6240\u6709\u5bf9 read_count \u7684\u64cd\u4f5c\u90fd\u662f\u5728 mutex \u7684\u4fdd\u62a4\u4e0b\u8fdb\u884c\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5176\u5b9e read_count \u548c mutex \u4e00\u8d77\u6784\u6210\u4e86\u4e00\u4e2a\u539f\u5b50\u53d8\u91cf\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-dining-philosophers-problem","title":"The Dining Philosophers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0_1","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6709\u4e94\u4e2a\u54f2\u5b66\u5bb6\uff0cta \u4eec\u56f4\u5750\u5728\u4e00\u5f20\u5706\u684c\u65c1\uff0c\u6bcf\u4e2a\u54f2\u5b66\u5bb6\u9762\u524d\u90fd\u6709\u4e00\u7897\u7c73\u996d\uff0c\u800c ta \u4eec\u4e24\u4e24\u4e4b\u95f4\u5206\u522b\u6709\u4e00\u6839\u7b77\u5b50\u3002

\u6bcf\u5e27\u54f2\u5b66\u5bb6\u90fd\u80fd\u9009\u62e9\u6267\u884c\u4ee5\u4e0b\u4e24\u4e2a\u884c\u4e3a\u4e4b\u4e00\uff1a

  1. \u601d\u8003\uff1b
  2. \u62ff\u7b77\u5b50\uff1b

\u54f2\u5b66\u5bb6\u5982\u679c\u60f3\u8981\u5e72\u996d\u5c31\u5fc5\u987b\u6709\u4e24\u6839\u7b77\u5b50\uff0cta \u540c\u65f6 \u62ff\u8d77 ta \u5de6\u53f3\u4fa7\u7b77\u5b50\u65f6\uff0c\u624d\u80fd\u5e72\u996d\u3002\u663e\u7136\uff0c\u4e24\u4e2a\u54f2\u5b66\u5bb6\u4e0d\u80fd\u540c\u65f6\u62ff\u8d77\u540c\u4e00\u6839\u7b77\u5b50\uff1b\u5e72\u5b8c\u996d\u54f2\u5b66\u5bb6\u4f1a\u653e\u4e0b\u7b77\u5b50\u3002\u5047\u8bbe\u54f2\u5b66\u5bb6\u4eec\u90fd\u4e0d\u5acc\u810f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_2","title":"\u89e3\u51b3 - semaphores","text":"

\u663e\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a\u7b77\u5b50\u662f\u5426\u53ef\u7528\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u4e0b\u9762\uff08\u6709\u95ee\u9898\u7684\uff09\u89e3\u6cd5\uff1a

process() {\nwait(chopstick[i]);\nwait(chopstick[ (i+1) % 5 ]); // i.e. the next chopstick\n\n/* eat rice */\n\nsignal(chopstick[i]);\nsignal(chopstick[ (i+1) % 5 ]);\n}\n

\u4e0a\u8ff0\u65b9\u6848\u5b58\u5728\u95ee\u9898\uff01

\u8003\u8651\u8fd9\u79cd\u60c5\u51b5\uff1a\u6240\u6709\u54f2\u5b66\u5bb6\u5728\u7b2c\u4e00\u5e27\u90fd\u60f3\u8981\u5e72\u996d\uff0c\u6b64\u65f6\u5b83\u4eec\u540c\u65f6\u8fd0\u884c\u5b8c\u4e86\u7b2c 2 \u884c\uff08\u4f8b\u5982\uff0c\u540c\u65f6\u62ff\u8d77\u4e86\u53f3\u624b\u8fb9\u7684\u7b77\u5b50\uff09\uff0c\u8fd9\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\u6240\u6709\u7b77\u5b50\u90fd\u88ab\u5360\u6709\uff0c\u6ca1\u6709\u4efb\u4f55\u4e00\u4e2a\u4eba\u80fd\u7b49\u5230\u4e0b\u4e00\u4e2a\u7b77\u5b50\uff0c\u6b64\u65f6\uff0c\u54f2\u5b66\u5bb6\u4eec\u53d1\u751f\u4e86\u6b7b\u9501\u3002

\u5bf9\u4e8e\u8fd9\u4e2a\u6b7b\u9501\uff0c\u4e66\u4e2d\u7ed9\u51fa\u4e86\u4e09\u79cd\u89e3\u51b3\u65b9\u6848\uff1a

  1. \u5141\u8bb8\u6700\u591a 4 \u4f4d\u54f2\u5b66\u5bb6\u540c\u65f6\u83b7\u53d6\u7b77\u5b50\uff1b
  2. \u54f2\u5b66\u5bb6\u5fc5\u987b\u540c\u65f6\u83b7\u53d6\u4e24\u4e2a\u7b77\u5b50\uff0c\u800c\u4e0d\u80fd\u6293\u4e00\u652f\u7b49\u4e00\u652f\uff1b
    • \u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u201c\u6293\u7b77\u5b50\u201d\u8fd9\u4ef6\u4e8b\u5e94\u5f53\u5728\u4e00\u4e2a\u4e34\u754c\u6bb5\u4e2d\u5b8c\u6210\uff1b
  3. \u5947\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u5de6\u624b\u7684\u7b77\u5b50\uff0c\u5076\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u53f3\u624b\u7684\u7b77\u5b50\uff0c\u8fd9\u6837\u4e0d\u4f1a\u4ea7\u751f\u5faa\u73af\u7b49\u5f85\uff1b
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---monitors","title":"\u89e3\u51b3 - monitors","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/","title":"U2 Part 3: \u6b7b\u9501 | Deadlocks","text":"

\u7ea6 5215 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

\u5f15\u5165

\u6b7b\u9501\u95ee\u9898\u5e7f\u6cdb\u5b58\u5728\u4e8e\u8ba1\u7b97\u673a\u8f6f\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u800c\u6211\u4eec\u672c\u8282\u53ea\u8ba8\u8bba\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u5efa\u6a21","title":"\u6b7b\u9501\u5efa\u6a21","text":"

\u6211\u4eec\u5728\u4e0a\u4e00\u8282\u4e2d\u5df2\u7ecf\u63d0\u5230\u4e86\u4e00\u4e2a\u6b7b\u9501\u60c5\u51b5\u3002\u672c\u8282\u6211\u4eec\u4e13\u6ce8\u4e8e\u5982\u4f55\u89e3\u51b3\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501(deadlock)\u95ee\u9898\u3002

deadlock

A deadlock is a situation in which every process in a set of processes is waiting for an event that can be caused only by another process in the set.

\u5373\u5b58\u5728\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u96c6\u5408\uff0c\u5b83\u4eec\u4e92\u76f8\u7b49\u5f85\u5bf9\u65b9\u6301\u6709\u7684\u8d44\u6e90\u3002

\u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u53eb\u6d3b\u9501(livelock)1\u7684\u4e1c\u897f\u3002

\u6b7b\u9501\u4ea7\u751f\u4e8e\u8d44\u6e90\u7684\u4f7f\u7528\u8fc7\u7a0b\uff0c\u800c\u4e14\u901a\u5e38\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u624d\u4f1a\u53d1\u751f\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u8fd9\u79cd\u4e0d\u786e\u5b9a\u6027\uff0c\u6b7b\u9501\u95ee\u9898\u624d\u5f02\u5e38\u68d8\u624b\u3002\u4e3a\u4e86\u89e3\u51b3\u6b7b\u9501\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u7406\u89e3\u6b7b\u9501\u4ea7\u751f\u7684\u539f\u56e0\uff0c\u4ee5\u65b9\u4fbf\u5bf9\u5b83\u8fdb\u884c\u5efa\u6a21\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u63cf\u8ff0\u6b7b\u9501\u3002

\u4ece\u8d44\u6e90\u4f7f\u7528\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7cfb\u7edf\u7684\u884c\u4e3a\u5206\u6210\u4e09\u4e2a\u90e8\u5206\uff1a

  1. \u7533\u8bf7\u8d44\u6e90\uff1b
  2. \u4f7f\u7528\u8d44\u6e90\uff1b
  3. \u91ca\u653e\u8d44\u6e90\uff1b

\u5176\u4e2d\uff0c\u7533\u8bf7\u8d44\u6e90\u548c\u91ca\u653e\u8d44\u6e90\u901a\u5e38\u901a\u8fc7\u4e0d\u540c\u7684\u7cfb\u7edf\u8c03\u7528\u5b9e\u73b0\u3002\u800c\u90e8\u5206\u8d44\u6e90\u662f\u6709\u9650\u4e14\u4e92\u65a5\u7684\uff0c\u56e0\u800c\u5982\u679c\u5728\u7f3a\u4e4f\u8d44\u6e90\u7684\u60c5\u51b5\u4e0b\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u4ecd\u7136\u60f3\u8981\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u53ea\u80fd\u9677\u5165\u7b49\u5f85\u3002\u800c\u6b63\u5728\u7b49\u5f85\u7684\u8d44\u6e90\u4e5f\u53ef\u80fd\u6301\u6709\u4e00\u4e9b\u8d44\u6e90\uff0c\u4e00\u65e6\u6070\u597d\u51fa\u73b0\u4e86\u4e92\u76f8\u7b49\u5f85\u7684\u60c5\u51b5\uff0c\u5c31\u4f1a\u51fa\u73b0\u6b7b\u9501\u3002\u4f8b\u5982\uff0c\u4e92\u65a5\u9501\u548c\u4fe1\u53f7\u91cf\u8fd9\u4e9b\u4e1c\u897f\u5c31\u662f\u6b7b\u9501\u4ea7\u751f\u7684\u4e00\u5927\u91cd\u8981\u6765\u6e90\u3002

\u8ba1\u7b97\u673a\u8d44\u6e90\u5206\u4e3a\u5f88\u591a\u7c7b\uff0c\u6bcf\u4e00\u7c7b\u4e2d\u53ef\u80fd\u6709\u82e5\u5e72\u5e73\u7b49\u7684\u201c\u5b9e\u4f8b(instance)\u201d\u3002\u5bf9\u4e8e\u4e00\u4e2a\u5408\u7406\u7684\u201c\u8d44\u6e90\u5206\u7c7b\u201d\u6765\u8bf4\uff0c\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u67d0\u79cd\u8d44\u6e90\u65f6\u5019\uff0c\u8fd9\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u7684\u4efb\u610f\u7a7a\u95f2\u5b9e\u4f8b\u90fd\u5e94\u5f53\u53ef\u4ee5\u88ab\u7528\u4e8e\u6ee1\u8db3\u8fd9\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u9700\u6c42\u3002

\u5bfc\u8bfb

\u4e0b\u9762\u4e24\u4e2a\u90e8\u5206\u5e76\u4e0d\u4f1a\u5f88\u5feb\u5c31\u88ab\u7528\u5230\uff0c\u5c24\u5176\u662f\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u662f\u88ab\u6211\u63d0\u524d\u653e\u5230\u8fd9\u91cc\u6765\u7684\uff0c\u8bfb\u8005\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u662f\u76f4\u63a5\u987a\u5e8f\u9605\u8bfb\uff0c\u8fd8\u662f\u6682\u65f6\u8df3\u8fc7\uff08\u4e4b\u540e\u7528\u5230\u7684\u65f6\u5019\u6211\u4f1a\u7ed9\u51fa\u8df3\u56de\u94fe\u63a5\uff09\u3002

\u6211\u4e2a\u4eba\u8ba4\u4e3a\u7ed3\u6784\u4e0a\u8fd9\u6837\u5b89\u6392\u66f4\u6e05\u6670\uff0c\u4f46\u8003\u8651\u5230\u4e24\u4e2a\u5185\u5bb9\u5b58\u5728\u4e00\u5b9a\u95f4\u9694\uff0c\u6240\u4ee5\u5f80\u540e\u653e\u7f6e\u4e5f\u6709\u5f80\u540e\u653e\u7f6e\u7684\u9053\u7406\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe","title":"\u8d44\u6e90\u5206\u914d\u56fe","text":"

\u6839\u636e\u4e0a\u9762\u7684\u63cf\u8ff0\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\uff0c\u5efa\u6a21\u6b7b\u9501\u53ef\u4ee5\u4ece\u8ba8\u8bba\u8fdb\u7a0b/\u7ebf\u7a0b\u4e0e\u8d44\u6e90\u7684\u6c42\u53d6\u5173\u7cfb\u5165\u624b\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u8d44\u6e90\u5206\u914d\u56fe(resource-allocation graph)\u6765\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u3002

\u9759\u6001

\u8d44\u6e90\u5206\u914d\u56fe\u662f\u4e00\u79cd\u6709\u4e24\u7c7b\u8282\u70b9\u7684\u6709\u5411\u56fe\uff0c\u6211\u4eec\u7528\u5706\u8282\u70b9 \\(T_i\\) \u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\uff0c\u7528\u65b9\u8282\u70b9 \\(R_j\\) \u8868\u793a\u8d44\u6e90\uff0c\u65b9\u8282\u70b9\u4e2d\u7684\u5b9e\u5fc3\u70b9\u8868\u793a\u4e00\u4e2a\u8d44\u6e90\u7c7b\u522b\u7684\u4e00\u4e2a\u5b9e\u4f8b\u3002\u540c\u65f6\uff0c\u6211\u4eec\u79f0\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b\u6307\u5411\u8d44\u6e90\u7c7b\u522b\u7684\u6709\u5411\u8fb9\u4e3a\u8bf7\u6c42\u8fb9(request edge)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6b63\u5728\u7b49\u5f85\u8fd9\u79cd\u8d44\u6e90\uff1b\u79f0\u4ece\u8d44\u6e90\u5b9e\u4f8b\u6307\u5411\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u6709\u5411\u8fb9\u4e3a\u5206\u914d\u8fb9(allocation 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

Resource allocation graph.

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u5b58\u5728\u73af\uff0c\u662f\u7cfb\u7edf\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\u7684\u5fc5\u8981\u6761\u4ef6\u3002

\u52a8\u6001

\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u4eec\u8fd8\u5c06\u770b\u5230\u4e00\u4e9b\u8d44\u6e90\u5206\u914d\u56fe\u7684\u53d8\u4f53\uff1a\u5f15\u5165 claim edge \u7684\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u4ee5\u53ca\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7b49\u5f85\u5173\u7cfb\u7684 wait for graph\u3002

\u7531\u4e8e\u552f\u4e00\u5b9e\u4f8b\u8fd9\u4e2a\u6027\u8d28\u88ab\u7834\u574f\u540e\uff0c\u6b7b\u9501\u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e0a\u4e0d\u518d\u90a3\u4e48\u76f4\u89c2\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5f15\u5165\u65b0\u7684\u5de5\u5177\u6765\u63cf\u8ff0\u6b7b\u9501\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","title":"\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","text":"

\u8be5\u90e8\u5206\u5185\u5bb9\u88ab\u4e66\u672c\u5b89\u6392\u5728\u6b7b\u9501\u907f\u514d\u4e2d\uff0c\u88ab\u6211\u63d0\u524d\uff0c\u53ef\u4ee5\u8003\u8651\u4e0d\u76f4\u63a5\u6df1\u5165\u800c\u662f\u7b49\u4e4b\u540e\u9047\u5230\u4e86\u518d\u770b\u3002

\u5b89\u5168\u72b6\u6001(safe state)\u6307\u5b58\u5728\u5b89\u5168\u5e8f\u5217(safe sequence)\u7684\u72b6\u6001\uff0c\u7cfb\u7edf\u6309\u7167 safe sequence \u7684\u987a\u5e8f\u6267\u884c\u8fdb\u7a0b/\u7ebf\u7a0b\u548c\u5206\u914d\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b\u76f8\u5bf9\u5e94\u7684\uff0c\u4e0d\u662f\u5b89\u5168\u72b6\u6001\u7684\u72b6\u6001\u79f0\u4e3a\u4e0d\u5b89\u5168\u72b6\u6001(unsafe state)\u3002\u5177\u4f53\u6765\u8bf4\uff0csafe sequence \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

safe sequence

\u9996\u5148 high level \u5730\u8bb2\u4e00\u4e0b safe sequence \u7684\u601d\u8def\uff0csafe sequence \u4e2d\u7684\u6bcf\u4e00\u9879 \\(T_i\\) \u6240\u9700\u8981\u7684\u8d44\u6e90\uff0c\u90fd\u80fd\u901a\u8fc7\u73b0\u6709\u8d44\u6e90\u6216\u5176\u4e4b\u524d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b \\(\\forall j < i T_{j}\\) \u6267\u884c\u5b8c\u6bd5\u91ca\u653e\u7684\u8d44\u6e90\u6765\u6ee1\u8db3\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5bf9\u4e8e safe sequence \\(<T_1, T_2, \\dots, T_n>\\)\uff0c\u6211\u4eec\u5b9a\u4e49\u6bcf\u4e00\u9879\u8fd8\u9700\u8981\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(need_{i,j}\\)\u3001\u5df2\u7ecf\u88ab\u5206\u914d\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(allocated_{i,j}\\)\uff0c\u4ee5\u53ca\u8d44\u6e90 \\(R_j\\) \u4e2d\u8fd8\u7a7a\u95f2\u7684\u8d44\u6e90\u7684\u91cf \\(available_{j}\\)\uff0c\u5219\u5e94\u5f53\u6709\uff1a

\\[ \\begin{aligned} \\forall i \\in \\{1, 2, \\dots, n\\},\\quad \\forall j \\in \\{1, 2, \\dots, m\\}, \\\\ available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j} \\geq need_{i,j} \\end{aligned} \\]

\u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6765\u8bf4\uff0c\u5b9e\u9645\u8fd0\u884c\u65f6\u7684\u7a7a\u95f2\u8d44\u6e90\u53ef\u80fd\u6765\u81ea\u4e8e \\(allocated_{k,j}\\)\uff0c\u4f46\u8fd9\u91cc\u662f\u7528\u6765\u505a\u5224\u65ad\u7684\uff0c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5728\u7ebf\u7684\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u7528 \\(available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j}\\) \u8fd9\u4e2a\u5f0f\u5b50\u6765\u7ef4\u62a4\u6b64\u65f6 \\(T_i\\) \u7684\u6700\u5927\u53ef\u7528\u8d44\u6e90\u3002

\u601d\u8003\u5982\u4f55\u5bfb\u627e\u4e00\u4e2a safe sequence

\u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728\u4e4b\u540e\u6b7b\u9501\u68c0\u6d4b\u7684\u90e8\u5206\u4f1a\u7ed9\u51fa\u7b54\u6848\uff0c\u4f46\u4e0d\u59a8\u7b80\u5355\u601d\u8003\u4e00\u4e0b\u600e\u6837\u5bfb\u627e\u4e00\u4e2a safe sequence \u5462\uff1f\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\uff1f

\u4f46\u662f\uff0csafe state \u662f\u4e00\u4e2a\u76f8\u5bf9\u8f83\u5f3a\u7684\u7ea6\u675f\uff0c\u4e0d\u5b89\u5168\u72b6\u6001\u4e0d\u4ee3\u8868\u6b7b\u9501\u4e00\u5b9a\u4f1a\u53d1\u751f\uff0c\u7528\u97e6\u6069\u56fe\u6765\u8868\u793a\u5b83\u4eec\u7684\u5173\u7cfb\u5c31\u662f\uff1a

\u5982\u679c\u6211\u4eec\u80fd\u4fdd\u8bc1\u7cfb\u7edf\u53ea\u8fd0\u884c\u5728 safe state\uff0c\u4e5f\u5c31\u80fd\u5145\u5206\u5730\u907f\u514d\u6b7b\u9501\u7684\u53d1\u751f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u6761\u4ef6","title":"\u6b7b\u9501\u7684\u6761\u4ef6","text":"

\u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u4e0b\u9762\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\uff1a

  1. \u4e92\u65a5(mutual exclusion)\uff1a\u6b7b\u9501\u4e2d\u81f3\u5c11\u6709\u4e00\u4e2a\u8d44\u6e90\u5fc5\u987b\u662f\u975e\u5171\u4eab\u7684\uff0c\u5373\u4e00\u6b21\u53ea\u80fd\u88ab\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u4f7f\u7528\uff1b
    • \u6b63\u56e0\u4e3a\u4e92\u65a5\u8d44\u6e90\u65e0\u6cd5\u88ab\u540c\u65f6\u4f7f\u7528\uff0c\u6240\u4ee5\u9700\u8981\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u7b49\u5f85\u6301\u6709\u76ee\u6807\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u91ca\u653e\u8be5\u8d44\u6e90\u4ee5\u540e\u624d\u80fd\u4f7f\u7528\u76ee\u6807\u8d44\u6e90\uff1b
  2. \u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5728\u7b49\u5f85\u8d44\u6e90\u7684\u540c\u65f6\uff0c\u4e5f\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff1b
    • \u4e3a\u4e86\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\uff0c\u4e00\u4e2a\u7b49\u5f85\u5176\u5b83\u8d44\u6e90\uff08\u6709\u51fa\u8fb9\uff09\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff0c\u8fd9\u6837\u624d\u80fd\u8ba9\u5176\u5b83\u8d44\u6e90\u4e5f\u7b49\u5f85\u5b83\uff08\u6709\u5165\u8fb9\uff09\uff1b
    • \u8bf4\u767d\u4e86\u5c31\u662f\uff1a\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85
  3. \u975e\u62a2\u5360(no preemption)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u5728\u4f7f\u7528\u5b8c\u8d44\u6e90\u540e\u4e3b\u52a8\u91ca\u653e\u8d44\u6e90\uff0c\u5176\u6301\u6709\u7684\u8d44\u6e90\u65e0\u6cd5\u88ab\u5176\u5b83\u8fdb\u7a0b/\u7ebf\u7a0b\u62a2\u5360\uff1b
    • \u4e3a\u4e86\u4fdd\u8bc1\u7b49\u5f85\u5173\u7cfb\u4e0d\u4f1a\u88ab\u5f3a\u884c\u7834\u574f\uff1b
  4. \u5faa\u73af\u7b49\u5f85(circular wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b\u5b58\u5728\u73af\u72b6\u7684\u7b49\u5f85\u8d44\u6e90\u5173\u7cfb\uff0c\u5373 wait for graph \u4e2d\u5b58\u5728\u73af\uff1b
    • \u903b\u8f91\u4e0a\u5bfc\u81f4\u6b7b\u9501\u51fa\u73b0\u7684\u76f4\u63a5\u539f\u56e0\uff0c\u4e92\u76f8\u7b49\u5f85\u5bfc\u81f4\u6ca1\u6709\u8d44\u6e90\u4f1a\u88ab\u91ca\u653e\uff0c\u5bfc\u81f4\u6b7b\u9501\u72b6\u6001\u65e0\u6cd5\u88ab\u6253\u7834\uff1b

\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u56db\u4e2a\u5173\u7cfb\u5e76\u4e0d\u5b8c\u5168\u72ec\u7acb\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u5904\u7406","title":"\u6b7b\u9501\u7684\u5904\u7406","text":"

\u5f88\u5bb9\u6613\u8ba4\u8bc6\u5230\uff0c\u6b7b\u9501\u7684\u5371\u5bb3\u662f\u5de8\u5927\u7684\uff0c\u90a3\u4e48\u5982\u4f55\u5904\u7406\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u5462\uff1f\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\u601d\u8def\uff1a

  1. \u4e0d\u505a\u989d\u5916\u5904\u7406\uff0c\u8981\u6c42\u7a0b\u5e8f\u5458\u4fdd\u8bc1\u903b\u8f91\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b
  2. \u6b7b\u9501\u9884\u9632(deadlock prevention)\uff1a\u4f7f\u7528\u67d0\u79cd\u89c4\u8303\u6216\u534f\u8bae\u6765\u4fdd\u8bc1\u6b7b\u9501\u4e0d\u4f1a\u51fa\u73b0\uff1b
  3. \u6b7b\u9501\u907f\u514d(deadlock avoidance)\uff1a\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u7684\u53d1\u751f\uff1b
    • \u4e0e 2. \u7684\u6700\u4e3b\u8981\u7684\u533a\u522b\u662f\uff0c2. \u5728\u89c4\u8303\u4e0b\u7684\u6240\u6709\u884c\u4e3a\u90fd\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\u95ee\u9898\uff1b\u800c 3. \u5219\u662f\u4e0d\u7ea6\u675f\u884c\u4e3a\uff0c\u4f46\u662f\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u6267\u884c\uff0c\u5728\u7a0d\u5019\u4ecb\u7ecd\u5177\u4f53\u5185\u5bb9\u540e\u4f1a\u66f4\u5bb9\u6613\u7406\u89e3\uff1b
  4. \u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u5141\u8bb8\u6b7b\u9501\u7684\u51fa\u73b0\uff0c\u4f46\u662f\u5f53\u68c0\u6d4b\u5230\u6b7b\u9501\u65f6\uff0c\u9700\u8981\u53bb\u6d88\u9664\u6b7b\u9501\u95ee\u9898\uff1b

\u4e8b\u5b9e\u4e0a\uff0c\u5728\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u4e00\u822c\u9009\u62e9\u4f7f\u7528\u7b2c\u4e00\u79cd\uff0c\u5373\u5c06\u95ee\u9898\u4ea4\u7ed9\u5f00\u53d1\u8005\u53bb\u89e3\u51b3\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u4ecb\u7ecd\u4e0a\u9762\u63d0\u5230\u7684\u540e\u4e09\u4e2a\u65b9\u6cd5\u4e2d\u7684\u56db\u5757\u5185\u5bb9\u3002\u5176\u4e2d\u6709\u90e8\u5206\u5185\u5bb9\u6709\u8f83\u5927\u4ea4\u96c6\uff0c\u5b83\u4eec\u53ef\u80fd\u5c5e\u4e8e\u540c\u4e00\u7eb2\u9886\u4e0b\u5728\u4e0d\u540c\u65f6\u523b\u505a\u7684\u5904\u7406\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u9884\u9632","title":"\u6b7b\u9501\u9884\u9632","text":"

\u6b7b\u9501\u9884\u9632(deadlock prevention)\u7684\u6838\u5fc3\u601d\u8def\u662f\u7834\u574f\u6b7b\u9501\u4ea7\u751f\u7684\u5fc5\u8981\u6761\u4ef6\u3002\u7531\u4e8e\u300c\u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\u300d\uff0c\u6240\u4ee5\u6211\u4eec\u5982\u679c\u80fd\u4fdd\u8bc1\u56db\u4e2a\u6761\u4ef6\u4e2d\u67d0\u4e00\u4e2a\u4e00\u76f4\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u6b7b\u9501\u5c06\u6c38\u8fdc\u4e0d\u4f1a\u4ea7\u751f\uff0c\u800c\u65e2\u7136\u6b7b\u9501\u4e0d\u4f1a\u4ea7\u751f\uff0c\u90a3\u4e5f\u5c31\u4e0d\u9700\u8981\u53bb\u5904\u7406\u6b7b\u9501\u95ee\u9898\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5bf9\u56db\u4e2a\u5fc5\u8981\u6761\u4ef6\u9010\u4e00\u5206\u6790\uff1a

  1. \u7834\u574f\u4e92\u65a5(mutual exclusion)\uff1a
    • \u8fd9\u4e2a\u6761\u4ef6\u51e0\u4e4e\u662f\u65e0\u6cd5\u7834\u574f\u7684\uff0c\u5f88\u591a\u8d44\u6e90\u5929\u7136\u662f\u4e92\u65a5\u7684\uff1b
    • \u6709\u4e9b\u8d44\u6599\u91cc\u4e5f\u6709\u5199\u4e00\u4e9b\u65b9\u6cd5\u6765\u7834\u574f\u8fd9\u4e2a\u6761\u4ef62\uff0c\u4f46\u662f\u6211\u611f\u89c9\u8fd8\u662f\u6709\u5c40\u9650\u6027\u7684\uff0c\u53cd\u6b63\u4e66\u672c\u91cc\u8bf4\u7684\u662f\u6ca1\u6cd5\u7834\u574f\uff1b
  2. \u7834\u574f\u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a
    • \u5728\u6211\u4eec\u524d\u9762\u7684\u5206\u6790\u4e2d\u77e5\u9053\uff1a\u300c\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\u300d\uff1b
    • \u4f46\u662f\uff0c\u5982\u679c\u6211\u4eec\u53ea\u5141\u8bb8\u4e00\u4e2a\u8282\u70b9\u53ea\u80fd\u5728\u201c\u88ab\u7b49\u5f85\u201d\u548c\u201c\u7b49\u5f85\u201d\u4e2d\u4e8c\u9009\u4e00\uff0c\u4e5f\u5c31\u662f\u8bf4\u8ba9\u4e00\u4e2a\u7ebf\u7a0b/\u8fdb\u7a0b\u4e00\u65e6\u7533\u8bf7\u8d44\u6e90\u5c31\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\uff0c\u5982\u679c\u6ca1\u6cd5\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\u5c31\u91ca\u653e\u5df2\u7ecf\u7533\u8bf7\u5230\u7684\u8d44\u6e90\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\u907f\u514d\u4e86\u5faa\u73af\u7b49\u5f85\u7684\u4ea7\u751f\uff1b
  3. \u7834\u574f\u975e\u62a2\u5360(no preemption)\uff1a
    • \u901a\u8fc7\u5141\u8bb8\u8fdb\u7a0b/\u7ebf\u7a0b\u5f3a\u884c\u62a2\u5360\u53e6\u5916\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6301\u6709\u7684\u8d44\u6e90\uff0c\u53ef\u4ee5\u7834\u574f\u88ab\u52a8\u7684\u7b49\u5f85\u5173\u7cfb\uff0c\u4ece\u800c\u907f\u514d\u6b7b\u9501\uff1b
    • \u4f46\u662f\u548c\u4e92\u65a5\u5176\u5b9e\u662f\u7c7b\u4f3c\u7684\uff0c\u975e\u62a2\u5360\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u5929\u7136\u6027\uff0c\u5f3a\u884c\u62a2\u5360\u4e00\u90e8\u5206\u8d44\u6e90\u53ef\u80fd\u5bfc\u81f4\u8fdb\u884c\u5230\u4e00\u534a\u7684\u4efb\u52a1\u5931\u8d25\uff0c\u751a\u81f3\u4e00\u4e9b\u66f4\u4e25\u91cd\u7684\u540e\u679c\uff0c\u6240\u4ee5\u8fd9\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u529e\u6cd5\uff1b
    • \u800c\u4e14\uff0c\u5141\u8bb8\u201c\u62a2\u5360\u201d\u4e5f\u4f1a\u5e26\u6765\u9965\u997f\u95ee\u9898\uff0c\u603b\u4f53\u6765\u8bf4\u96be\u4ee5\u5b9e\u73b0\u800c\u4e14\u6548\u7387\u4e0d\u9ad8\uff1b
  4. \u7834\u574f\u5faa\u73af\u7b49\u5f85(circular wait)\uff1a
    • \u901a\u8fc7\u7ed9\u8d44\u6e90\u7f16\u53f7\uff0c\u89c4\u5b9a\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7279\u5b9a\u7684\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u5faa\u73af\u7b49\u5f85\u7684\u60c5\u51b5\uff1b
    • \u7531\u4e8e\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u800c\u8d44\u6e90\u7684\u7533\u8bf7\u5e94\u5f53\u662f\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u300c\u8fdb\u7a0b\u5927\u534a\u90e8\u5206\u53ea\u9700\u8981\u7528\u5230 \\(R_3\\)\uff0c\u4f46\u662f\u7531\u4e8e\u6700\u540e\u9700\u8981\u7528\u4e00\u4e0b \\(R_1\\)\uff0c\u6240\u4ee5\u5fc5\u987b\u5148\u7533\u8bf7 \\(R_1\\) \u518d\u7533\u8bf7 \\(R_3\\)\uff0c\u5bfc\u81f4\u8fc7\u7a0b\u4e2d \\(R_1\\) \u4e00\u76f4\u88ab\u6301\u6709\u4f46\u4e00\u76f4\u672a\u88ab\u4f7f\u7528\u300d\u7684\u60c5\u51b5\uff0c\u6548\u7387\u582a\u5fe7\uff1b
    • \u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u5728\u8bbe\u8ba1\u7f16\u53f7\u65f6\u5c06\u8d44\u6e90\u4f7f\u7528\u7684\u5e38\u89c4\u987a\u5e8f\u7b49\u56e0\u7d20\u7eb3\u5165\u8003\u8651\uff0c\u4f46\u7cbe\u5fc3\u8bbe\u8ba1\u7684\u8d44\u6e90\u5e8f\u53f7\u9047\u5230\u65e0\u7a77\u65e0\u5c3d\u7684\u8d44\u6e90\u7c7b\u578b\u65f6\uff0c\u53c8\u5f53\u5982\u4f55\u5462\uff1f\u7531\u4e8e\u9700\u8981\u5927\u91cf\u8bbe\u8ba1\uff0c\u6240\u4ee5\u5e26\u6765\u4e86\u8d44\u6e90\u7684\u6269\u5c55\u6027\u8f83\u5dee\u7684\u95ee\u9898\uff1b
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u907f\u514d","title":"\u6b7b\u9501\u907f\u514d","text":"

\u6b7b\u9501\u907f\u514d(deadlock avoidance)\u901a\u8fc7\u963b\u6b62\u53ef\u80fd\u8ba9\u7cfb\u7edf\u8fdb\u5165\u6b7b\u9501\u72b6\u6001\u7684\u884c\u4e3a\uff0c\u6765\u89e3\u51b3\u6b7b\u9501\u95ee\u9898\u3002\u5373\uff1a\u5982\u679c\u8fd9\u4e48\u505a\u53ef\u80fd\u5bfc\u81f4\u6b7b\u9501\uff0c\u90a3\u6211\u5c31\u4e0d\u8fd9\u4e48\u505a\uff0c\u4ee5\u6b64\u6765\u907f\u514d\u6b7b\u9501\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","title":"\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","text":"

\u524d\u7f6e\uff1a\u8d44\u6e90\u5206\u914d\u56fe\uff01

\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u8f83\u4e3a\u76f4\u63a5\uff0c\u5b83\u4e0e\u5b89\u5168\u72b6\u6001\u7684\u6982\u5ff5\u65e0\u5173\uff0c\u76f4\u63a5\u68c0\u6d4b\u67d0\u79cd\u5206\u914d\u662f\u5426\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5982\u679c\u8be5\u5206\u914d\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5219\u4e0d\u8fdb\u884c\u8be5\u5206\u914d\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002\uff08\u56e0\u4e3a\u5b83\u4ee5\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u7684\u90a3\u4e2a\u7279\u4f8b\u4e3a\u539f\u7406\uff01\uff09

\u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u5f15\u5165\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u8fd9\u4e2a\u5de5\u5177\uff0c\u73b0\u5728\u6211\u4eec\u8981\u5728\u8d44\u6e90\u5206\u914d\u56fe\u7684\u57fa\u7840\u4e0a\uff0c\u5f15\u5165\u4e00\u6761\u8bc9\u6c42\u8fb9(claim edge)\uff0c\u7528\u865a\u7ebf\u8868\u793a\uff0c\u5b83\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6307\u5411\u8d44\u6e90 \\(R_j\\)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u4f1a\u5728\u672a\u6765\u7533\u8bf7\u8d44\u6e90 \\(R_j\\)\u3002

\u4e8e\u662f\uff0c\u5728\u52a8\u6001\u8fc7\u7a0b\u4e2d\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u6309\u7167\u5982\u4e0b\u89c4\u5219\u53cd\u5e94\u5206\u914d\u8fc7\u7a0b\uff1a

  1. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u88ab\u6dfb\u52a0\u5230\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u65f6\u5019\uff0c\u9700\u8981\u8fde\u597d\u6240\u6709\u76f8\u5173\u7684 claim edge\uff1b
    • \u8981\u6c42\u6700\u521d\u5c31\u77e5\u9053\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\uff0c\u8fd9\u4e5f\u6784\u6210\u8fd9\u7c7b\u65b9\u6cd5\u7684\u4e00\u4e2a\u5c40\u9650\u6027\uff1b

  2. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u7533\u8bf7\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5982\u679c\u8fd9\u6761\u8fb9\u53d8\u4e3a assignment edge \u4e0d\u4f1a\u5bfc\u81f4\u6210\u73af\uff0c\u5219\u5c06 claim edge \u8f6c\u5316\u4e3a\u4e00\u6761 request edge \\(T_i \\rightarrow R_j\\)\uff1b
    • \u8bf7\u6ce8\u610f\uff0c\u8fd9\u91cc\u9700\u8981\u5224\u65ad\u7684\u662f assignment edge\uff0c\u800c\u8f6c\u5316\u7684\u662f request edge\uff1b

  3. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u83b7\u5f97\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 request edge \u8f6c\u5316\u4e3a\u4e00\u6761 allocation edge \\(R_j \\rightarrow T_i\\)\uff1b
  4. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u91ca\u653e\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 allocation 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\u6ca1\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7ed9\u51fa\u6267\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u8981\u7684\u5404\u7c7b\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff0c\u540c\u65f6\u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u4ee5\u52a8\u6001\u5730\u8ba1\u7b97\u5b89\u5168\u72b6\u6001\u3002High level \u5730\u6765\u8bb2\uff0c\u5c31\u662f\u9700\u8981\u52a8\u6001\u5730\u68c0\u6d4b\u67d0\u4e2a\u8d44\u6e90\u7533\u8bf7\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5982\u679c\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5219\u7b49\u5f85\u8d44\u6e90\u8db3\u591f\u518d\u5206\u914d\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u9700\u8981\u7ef4\u62a4\u8fd9\u4e9b\u4e1c\u897f\uff08\u5047\u8bbe\u95ee\u9898\u4e2d\u6709 n \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u548c m \u79cd\u8d44\u6e90\uff09\uff1a

data structure

\u94f6\u884c\u5bb6\u7b97\u6cd5\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u662f\u5b89\u5168\u7b97\u6cd5(safety algorithm)\u548c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5(resource request algorithm)\u3002\u524d\u8005\u68c0\u6d4b\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u540e\u8005\u4ee5\u524d\u8005\u4e3a\u57fa\u7840\uff0c\u5224\u65ad\u662f\u5426\u5141\u8bb8\u5f53\u524d\u8d44\u6e90\u8bf7\u6c42\u53d1\u751f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u7b97\u6cd5","title":"\u5b89\u5168\u7b97\u6cd5","text":"

\u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u5bfb\u627e\u662f\u5426\u5b58\u5728\u4e00\u4e2a\u5b89\u5168\u5e8f\u5217\u6765\u5224\u65ad\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u5b89\u5168\u72b6\u6001\u3002\u5148\u524d\u5728\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u4e00\u8282\u4e2d\u6211\u7559\u4e0b\u8fc7\u4e00\u4e2a\u95ee\u9898\uff1a\u300c\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\u300d\uff0c\u7b54\u6848\u662f\u53ef\u4ee5\uff0c\u6211\u4eec\u4ee5\u4e00\u79cd\u8fd1\u4f3c\u8d2a\u5fc3\u5730\u7b56\u7565\u53bb\u6a21\u62df\u5b89\u5168\u5e8f\u5217\u7684\u8d44\u6e90\u5206\u914d\u8fc7\u7a0b\uff0c\u5c31\u53ef\u4ee5\u5224\u65ad\u662f\u5426\u5b58\u5728\u5b89\u5168\u7b56\u7565\u3002

\u56e0\u4e3a\u5bf9\u4e8e\u6240\u6709\u53ef\u4ee5\u4f5c\u4e3a\u5b89\u5168\u72b6\u6001\u4e0b\u4e00\u9879\u7684 \\(T_{i_k}\\)\uff0c\u7531\u4e8e\u6267\u884c\u5b83\u4eec\u540e\uff0c\u7b49\u5230\u8fdb\u7a0b/\u7ebf\u7a0b\u8fd0\u884c\u7ed3\u675f\uff0c\u4f59\u4e0b\u7684\u8d44\u6e90\u53ea\u4f1a\u66f4\u591a\u4e0d\u4f1a\u66f4\u5c11\uff08\u5bf9\u6bd4\u8fd0\u884c\u524d\u540e\uff0c\u4f1a\u591a\u51fa\u6765\u539f\u672c\u5206\u914d\u7ed9\u8fd9\u4e9b\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u90a3\u4e9b\u8d44\u6e90\uff09\uff0c\u56e0\u800c\u53ea\u8981\u7b26\u5408\u6761\u4ef6\uff0c\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e0b\u4e00\u9879\uff0c\u6b65\u6b65\u53ef\u884c\u6700\u7ec8\u4e5f\u53ef\u884c\u3002

\u8bf7\u4ed4\u7ec6\u601d\u8003\u8fd9\u4e2a\u8fc7\u7a0b\u7684\u5408\u7406\u6027\uff0c\u5c24\u5176\u662f\u6211\u4e3a\u4ec0\u4e48\u5728\u8fd9\u91cc\u63d0\u5230\u4e86\u201c\u8d2a\u5fc3\u201d\uff0c\u6211\u611f\u89c9\u6211\u67e5\u5230\u7684\u8d44\u6599\u51e0\u4e4e\u90fd\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5b89\u5168\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

algorithm

  1. \u521d\u59cb\u5316\uff1a
  2. Work[m] <- Available[m]\uff0cWork[m] \u8868\u793a\u5f53\u524d\u72b6\u6001\u7684\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
  3. Finish[n] <- false\uff0c\u8868\u793a\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u8fd8\u6ca1\u8fd0\u884c\uff1b
  4. \u627e\u5230\u4e00\u4e2a i \u4f7f\u5f97\uff1a
  5. (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
  6. \u5982\u679c\u6ca1\u6709\u8fd9\u4e2a i\uff0c\u5219 goto 3.\uff1b
  7. \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
  8. \u5982\u679c\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u6ee1\u8db3 Finish[i] == true\uff0c\u5219\u7cfb\u7edf\u5904\u4e8e\u5b89\u5168\u72b6\u6001\uff0c\u5426\u5219\u7cfb\u7edf\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff1b
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","title":"\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","text":"

\u6709\u4e86\u5b89\u5168\u7b97\u6cd5\u4f5c\u4e3a\u57fa\u7840\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5728\u5b83\u7684\u57fa\u7840\u4e0a\uff0c\u5224\u65ad\u67d0\u4e2a\u8d44\u6e90\u8bf7\u6c42\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u8fdb\u800c\u5f97\u5230\u5b8c\u6574\u7684\u94f6\u884c\u5bb6\u7b97\u6cd5\u4e86\u3002

\u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u6a21\u62df\u7684\u65b9\u5f0f\u5224\u65ad\u4e00\u4e2a\u72b6\u6001\u662f\u4e0d\u662f\u5b89\u5168\u72b6\u6001\uff0c\u800c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u5219\u662f\u8d1f\u8d23\u7ef4\u62a4\u8fd9\u4e2a\u201c\u72b6\u6001\u201d\uff0c\u5e76\u6839\u636e\u5b89\u5168\u7b97\u6cd5\u8fd4\u56de\u7684\u7ed3\u679c\u6765\u5224\u65ad\u67d0\u4e2a\u8bf7\u6c42\u662f\u5426\u5e94\u5f53\u88ab\u63a5\u53d7\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

algorithm

  1. \u7528 Request[n][m] \u6765\u7ef4\u62a4\u8fdb\u7a0b/\u7ebf\u7a0b\u60f3\u8981\u8bf7\u6c42\u7684\u8d44\u6e90\u7684\u6570\u91cf\uff1b
  2. \u5728\u6bcf\u4e2a\u8bf7\u6c42\u4e2d\uff0c\u5982\u679c Request[i] <= Need[i]\uff08\u6ce8\u610f\u5411\u91cf\u6bd4\u8f83\uff09\uff0c\u5219\u7ee7\u7eed\uff1b\u5426\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u56e0\u4e3a\u6b64\u65f6\u5b83\u8bf7\u6c42\u7684\u91cf\u8d85\u8fc7\u4e86\u5b83\u9884\u671f\u9700\u8981\u7684\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff1b
  3. \u5982\u679c Request[i] <= Available\uff0c\u8bf4\u660e\u8d44\u6e90\u8db3\u591f\uff0c\u7ee7\u7eed\uff1b\u5426\u5219\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u7b49\u5f85\u8db3\u591f\u7684\u8d44\u6e90\uff1b
  4. \u5047\u8bbe\u7cfb\u7edf\u5206\u914d\u4e86\u8d44\u6e90\uff0c\u5219\u9700\u8981\u66f4\u65b0\u6a21\u62df\u72b6\u6001\uff08\u6b64\u65f6\u8d44\u6e90\u8fd8\u672a\u5b9e\u9645\u5206\u914d\uff01\u53ea\u662f\u4e3a\u4e86\u4ece\u6570\u503c\u4e0a\u6d4b\u8bd5\u662f\u5426\u5b89\u5168\u800c\u4e34\u65f6\u6784\u9020\u7684\u865a\u62df\u5c40\u9762\uff01\uff09\uff1a
    • Available <- Available - Request[i]\uff0c\u5373\u6a21\u62df\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
    • Allocation[i] <- Allocation[i] + Request[i]\uff0c\u5373\u6a21\u62df\u5206\u914d\u5f97\u5230\u7684\u8d44\u6e90\uff1b
    • Need[i] <- Need[i] - Request[i]\uff0c\u5373\u6a21\u62df\u9884\u671f\u9700\u6c42\u91cf\uff1b
  5. \u4f7f\u7528\u5b89\u5168\u7b97\u6cd5\u5224\u65ad\uff1a
    • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u5b89\u5168\u7684\uff0c\u5219\u8bf7\u6c42\u88ab\u63a5\u53d7\uff1b
    • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u4e0d\u5b89\u5168\u7684\uff0c\u8bf7\u6c42\u4e0d\u88ab\u5141\u8bb8\uff0c\u540c\u65f6\u9700\u8981\u5c06\u8fd9\u4e9b\u77e9\u9635\u56de\u6eda\u5230\u6a21\u62df\u4e4b\u524d\u7684\u72b6\u60013\uff1b

limitations

Like the other algorithms, the Banker's algorithm has some limitations when implemented.

Specifically, it needs to know how much of each resource a process could possibly request. In most systems, this information is unavailable, making it impossible to implement the Banker's algorithm.

Also, it is unrealistic to assume that the number of processes is static since in most systems the number of processes varies dynamically.

Moreover, the requirement that a process will eventually release all its resources (when the process terminates) is sufficient for the correctness of the algorithm, however it is not sufficient for a practical system. Waiting for hours (or even days) for resources to be released is usually not acceptable.

From Banker's algorithm | Wikipedia.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u68c0\u6d4b","title":"\u6b7b\u9501\u68c0\u6d4b","text":"

\u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u642d\u914d\u4f7f\u7528\uff0c\u5176\u6838\u5fc3\u601d\u8def\u662f\u4e0d\u5bf9\u8d44\u6e90\u8bf7\u6c42\u505a\u8fc7\u591a\u7ea6\u675f\uff0c\u800c\u662f\u5728\u68c0\u6d4b\u5230\u7cfb\u7edf\u4e2d\u5b58\u5728\u6b7b\u9501\u65f6\uff0c\u53bb\u5904\u7406\u6b7b\u9501\u3002\u5176\u4e2d\u7684\u7b2c\u4e00\u6b65\u5c31\u662f\u68c0\u6d4b\u5230\u6b7b\u9501\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","text":"

\u7b49\u5f85\u56fe(wait-for graph)\u662f\u8d44\u6e90\u5206\u914d\u56fe\u7684\u5316\u7b80\uff0c\u8be5\u7b97\u6cd5\u53ea\u80fd\u89e3\u51b3\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002

\u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\uff0c\u53ea\u8981\u6709\u73af\u5c31\u4f1a\u6709\u6b7b\u9501\uff0c\u800c\u53ea\u8981\u80fd\u68c0\u6d4b\u8fd9\u4e2a\u73af\uff0c\u5c31\u80fd\u68c0\u6d4b\u6b7b\u9501\u3002\u800c\u5b9e\u9645\u7684\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u8d44\u6e90\u548c\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\u4ece\u662f\u6210\u5bf9\u51fa\u73b0\u5728\u73af\u4e2d\uff0c\u800c wait-for graph \u5219\u662f\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\uff08\u8bf7\u8bfb\u8005\u601d\u8003\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u8fd9\u6837\uff09\u4ee5\u51cf\u5c0f\u70b9\u7684\u6570\u91cf\uff0c\u63d0\u9ad8\u6548\u7387\u3002

\u6211\u4eec\u5c06\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u7684\u8d44\u6e90\u5206\u914d\u56fe\u6539\u4e3a\u7b49\u5f85\u56fe\uff0c\u5373\u4e3a\uff1a

<center> ![](img/26.png) </center>\nWait-for graph.\n

\u901a\u8fc7\u52a8\u6001\u5730\u7ef4\u62a4\u8fd9\u4e2a wait-for graph \u548c\u5b9a\u671f\u8c03\u7528\u4e00\u4e2a\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u6765\u5b9e\u73b0\u6b7b\u9501\u68c0\u6d4b\u3002

\u663e\u800c\u6613\u89c1\u7684\uff0c\u5c31\u7b97\u629b\u5f00\u5b83\u53ea\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4ec5\u80fd\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u7f3a\u70b9\uff0c\u9891\u7e41\u5730\u7ef4\u62a4\u56fe\u548c\u5b9a\u671f\u8c03\u7528\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u90fd\u4f1a\u5e26\u6765\u8f83\u5927\u7684\u5f00\u9500\u3002\u6240\u4ee5\uff0c\u8be5\u65b9\u6cd5\u5176\u5b9e\u8868\u73b0\u5e76\u4e0d\u7406\u60f3\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","text":"

\u4ece\u5355\u5b9e\u4f8b\u5411\u591a\u5b9e\u4f8b\u7684\u8fc1\u79fb\u601d\u8def\u548c\u6b7b\u9501\u907f\u514d\u4e2d\u4f7f\u7528\u7684\u8fc1\u79fb\u601d\u8def\u662f\u7c7b\u4f3c\u7684\uff0c\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u6765\u5224\u65ad\u800c\u975e\u627e\u73af\u3002\u56e0\u800c\u8fd9\u4e2a\u7b97\u6cd5\u7684\u5b9e\u73b0\u548c\u94f6\u884c\u5bb6\u7b97\u6cd5\u7684\u5b9e\u73b0\u4e5f\u662f\u7c7b\u4f3c\u7684\uff08\u4f46\u662f\u6709\u4e00\u5b9a\u533a\u522b\uff0c\u53c2\u8003\u4e66\u672c P339\uff09\uff0cjjm \u8868\u793a\u4e00\u822c\u53ea\u8003\u94f6\u884c\u5bb6\u7b97\u6cd5\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u4e5f\u4e0d\u8bb2\u8fd9\u4e2a\u7b97\u6cd5\u4e86\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u89e3\u9664","title":"\u6b7b\u9501\u89e3\u9664","text":"

\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u867d\u7136\u662f \"recovery\"\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u7834\u574f\u6b7b\u9501\u800c\u5e76\u6ca1\u6709\u6062\u590d\u5230\u4e00\u4e2a\u6b7b\u9501\u4e0d\u5b58\u5728\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u7ffb\u8bd1\u4e3a\u89e3\u9664\u3002\u5bf9\u4e8e\u5df2\u7ecf\u4ea7\u751f\u7684\u6b7b\u9501\uff0c\u81f3\u5c11\u5f97\u6b7b\u4e00\u4e2a\uff0c\u6211\u4eec\u9700\u8981\u4f5c\u51fa\u51b3\u65ad\u3002\u4e66\u672c\u4e2d\u63d0\u5230\u4e86\u7ec8\u6b62\u548c\u8d44\u6e90\u62a2\u5360\u4e24\u79cd\u65b9\u6cd5\uff0c\u4f46\u6211\u8ba4\u4e3a\u672c\u8d28\u4e0a\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u5e76\u5217\u5730\u7ed9\u51fa\uff1a

  1. \u90fd\u522b\u6d3b\uff0c\u6740\u6b7b\u6240\u6709\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\uff1b
    • \u5f00\u9500\u5f88\u5927\uff0c\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u5de5\u4f5c\u90fd\u76f8\u5f53\u4e8e\u767d\u8d39\u4e86\uff0c\u800c\u4e14\u5e76\u4e0d\u662f\u968f\u968f\u4fbf\u4fbf\u5c31\u80fd\u6740\u7684\uff1b
  2. \u4e00\u4e2a\u4e00\u4e2a\u6740\uff0c\u6740\u5230\u6ca1\u6709\u6b7b\u9501\uff1b
    • \u4ee5\u7279\u5b9a\u987a\u5e8f\u6740\u8fd9\u4e9b\u8fdb\u7a0b\uff0c\u53ef\u4ee5\u4f18\u5316\u8868\u73b0\uff0c\u4f8b\u5982\u6309\u7167\u4f18\u5148\u7ea7\u4ece\u4f4e\u5230\u9ad8\u6740\uff1b
  3. \u7559\u6d3b\u547d\uff0c\u4f46\u662f\u9700\u8981\u56de\u6eda\u90e8\u5206\u8fdb\u7a0b\uff0c\u5f3a\u884c\u62a2\u5360\u5360\u6709\u7684\u8d44\u6e90\uff1b
    • \u5f88\u96be\u754c\u5b9a\u5e94\u8be5\u56de\u6eda\u5230\u54ea\u91cc\uff0c\u56de\u6eda\u4e5f\u96be\u5b9e\u73b0\uff0c\u4e3a\u4e86\u56de\u6eda\u4e5f\u9700\u8981\u5b58\u50a8\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u5f00\u9500\u5f88\u5927\uff1b
    • \u53c8\u770b\u5230\u62a2\u5360\u8fd9\u4e24\u4e2a\u5b57\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e5f\u4f1a\u6709\u9965\u997f\u95ee\u9898\uff0c\u89e3\u51b3\u65b9\u6cd5\u4e5f\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u901a\u8fc7\u8003\u8651\u4f18\u5148\u7ea7\uff0c\u5e76\u5c06\u88ab\u62a2\u5360\uff08\u88ab\u8feb\u56de\u6eda\uff09\u7684\u6b21\u6570\u7eb3\u5165\u4f18\u5148\u7ea7\u7684\u8003\u8651\u8303\u7574\u3002
  1. What's the difference between deadlock and livelock? \u21a9

  2. Deadlock Prevention \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u4f7f\u7528\u5047\u8131\u673a(spooling)\u7684\u65b9\u6cd5\u6765\u89e3\u9664\u6253\u5370\u673a\u8d44\u6e90\u7684\u4e92\u65a5\u6027\u3002\u00a0\u21a9

  3. Banker's Algorithm in Operating System (OS) \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u8981\u6062\u590d\u77e9\u9635\u72b6\u6001\uff0c\u4e66\u4e0a\u8c8c\u4f3c\u6ca1\u5199\u8fd9\u4e2a\u3002\u00a0\u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/","title":"U3 Part 1: \u4e3b\u5b58 | Main Memory [\u672a\u5b8c\u6210]","text":"

\u7ea6 10 \u4e2a\u5b57

"},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/","title":"U3 Part 2: \u865a\u62df\u5185\u5b58 | Virtual Memory [\u672a\u5b8c\u6210]","text":"

\u7ea6 12 \u4e2a\u5b57

"},{"location":"cour_note/D3QD_OperatingSystem/Unit4/","title":"Unit 4: \u5b58\u50a8\u7ba1\u7406 | Storage Management [\u672a\u5b8c\u6210]","text":"

\u7ea6 11 \u4e2a\u5b57

"},{"location":"cour_note/D3QD_OperatingSystem/Unit5/","title":"Unit 5: \u6587\u4ef6\u7cfb\u7edf | File System [\u672a\u5b8c\u6210]","text":"

\u7ea6 11 \u4e2a\u5b57

"},{"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 16 \u5206\u949f

\u524d\u8a00

"},{"location":"others/reveal-md2Slides/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

reveal-md \u662f reveal.js \u7684\u4e00\u4e2a\u6269\u5c55\u5de5\u5177\uff0c\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9884\u7f16\u8bd1\u5de5\u5177\u3002\u5229\u7528 reveal-md\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u4e00\u4e2a Markdown \u6587\u4ef6\u6765\u5feb\u901f\u7b80\u4fbf\u5730\u751f\u6210\u4e00\u4e2a\u57fa\u4e8e\u7f51\u9875\u7684 Slides\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5c06\u5b83\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u5e76\u90e8\u7f72\u5728\u7c7b\u4f3c github pages \u7b49\u5e73\u53f0\u6765\u5206\u4eab\u9759\u6001\u9875\u9762\u3002

"},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528-ppt-\u548c\u8bed\u96c0\u6587\u6863\u6f14\u793a\u6a21\u5f0f","title":"\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528 PPT \u548c\u8bed\u96c0\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d","text":"

\u5728\u8fd9\u7bc7\u6587\u7ae0\u548c\u8bed\u5883\u4e2d\uff0c\u6211\u60f3\u5927\u6982\u5c06\u300c\u6f14\u793a\u300d\u6240\u4f7f\u7528\u7684\u5f62\u5f0f\u5206\u4e3a\u4e09\u79cd\uff1a

\u6070\u597d\uff0c\u8bed\u96c0\u63a8\u51fa\u6f14\u793a\u6587\u7a3f\u7684\u65f6\u5019\u6709\u8bf4\u660e\u4e3a\u4ec0\u4e48\u4ed6\u4eec\u8981\u5f00\u53d1\u8fd9\u6837\u4e00\u4e2a\u4e1c\u897f\u3002

\u518d\u89c1PPT\uff0c\u4f60\u597d\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d

\u6211\u975e\u5e38\u8d5e\u540c\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u5bf9\u4e8e PPT \u7684\u53d9\u8ff0\uff0c\u6211\u4e5f\u5f88\u8ba8\u538c PPT \uff0c\u5b83\u786e\u5b9e\u53ef\u4ee5\u505a\u5f88\u591a\u4e8b\uff0c\u4f46\u662f\u5bf9\u6211\u6765\u8bf4\u6ca1\u5fc5\u8981\uff0c\u6211\u4e5f\u7528\u4e0d\u5230\u3002\u800c\u4e14\u8eab\u4e3a\u7834\u5199\u4ee3\u7801\u7684\uff0c\u6211\u5bf9\u90a3\u79cd\u6240\u8c13\u7684\u9ad8\u7ea7\u611f\u5e76\u6ca1\u6709\u4ec0\u4e48\u611f\u89c9\u3002\u800c\u4e14 PPT \u6709\u4e00\u4e2a\u81f4\u547d\u7684\u7f3a\u70b9\u5c31\u662f\u5b83\u7684\u5206\u4eab\u975e\u5e38\u4e0d\u65b9\u4fbf\uff0c\u4f60\u5fc5\u987b\u8981\u901a\u8fc7\u300c\u6587\u4ef6\u300d\u6765\u4f20\u9012\u4f60\u7684\u6750\u6599\uff0c\u800c\u4e14\u8fd8\u6536\u5230\u5c55\u793a\u8bbe\u5907\u7684\u73af\u5883\u9650\u5236\uff0c\u800c\u5176\u4ed6\u4e24\u79cd\u65b9\u6cd5\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u56de\u5230\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bda\u7136\uff0c\u5728\u67d0\u4e9b\u7279\u5b9a\u7684\u65f6\u95f4\uff0c\u6587\u6863\u6f14\u793a\u786e\u5b9e\u80fd\u4fbf\u6377\u7684\u89e3\u51b3\u8bb8\u591a\u95ee\u9898\uff0c\u4f46\u662f\u6211\u4e0d\u89c9\u5f97\u76ee\u524d\u7684\u6587\u7a3f\u6f14\u793a\u80fd\u6210\u4e3a Slides \u7684\u66ff\u4ee3\u54c1\u3002\u5b83\u786e\u5b9e\u4fbf\u6377\u4e14\u9ad8\u6548\uff0c\u4f46\u662f\u5e76\u4e0d\u597d\u770b\uff0c\u4e5f\u5e76\u4e0d\u6e05\u6670\u2014\u2014\u800c\u4e14\u8bf4\u56de\u6765\uff0c\u5176\u5b9e\u4e5f\u4e0d\u65b9\u4fbf\uff08\u4e3a\u4ec0\u4e48\u6211\u4e4b\u540e\u4f1a\u8bb2\uff09\u3002 \u7b80\u5355\u8bb2\u4e86\u4e00\u4e0b\u6211\u5bf9\u5176\u4ed6\u4e24\u79cd\u9014\u5f84\u7684\u770b\u6cd5\uff0c\u5173\u4e8e\u901a\u8fc7\u4ee3\u7801\u9014\u5f84\u7f16\u5199\u300c\u6f14\u793a\u300d\u6587\u6863\u6211\u5f53\u7136\u4e5f\u6709\u8bdd\u8bf4\uff0c\u4f46\u662f\u6211\u60f3\u628a\u4ed6\u4eec\u653e\u5728\u540e\u9762\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u60f3\u4ece\u300c\u4f7f\u7528\u4f53\u9a8c\u300d\u7684\u89d2\u5ea6\u6765\u8bc4\u4ef7\u4e00\u4e0b\u4e0a\u9762\u5df2\u7ecf\u63d0\u8fc7\u7684\u4e24\u4e2a\u9014\u5f84\u3002

\u5728\u6211\u770b\u6765\uff0cPPT \u4e4b\u6240\u4ee5\u7d2f\u8d58\u4e14\u4f4e\u6548\uff0c\u662f\u56e0\u4e3a\u5927\u90e8\u5206\u4eba\u6d6a\u8d39\u65f6\u95f4\u5728\u4e8e\u4e0e\u6838\u5fc3\u5185\u5bb9\u5e76\u4e0d\u76f4\u63a5\u76f8\u5173\u7684\u7f8e\u5de5\u4e0a\u3002\u800c\u4ece\u5de5\u4f5c\u6d41\u7a0b\u4e0a\u6765\u8bb2\uff0c\u9664\u975e\u6211\u7cbe\u901a PPT \u4e14\u6709\u65f6\u95f4\uff0c\u5426\u5219\u6211\u4e0d\u4f1a\u4eb2\u81ea\u53bb\u505a PPT\uff0c\u800c\u662f\u548c\u7f8e\u5de5\u5bf9\u63a5\uff0c\u8ba9\u4ed6\u4eec\u6765\u505a\u3002\u53ef\u8fd9\u6837\u4e00\u6765\u95ee\u9898\u5c31\u51fa\u73b0\u4e86\uff0c\u201c\u5bf9\u63a5\u201d\u8fd9\u4ef6\u4e8b\u672a\u5fc5\u6bd4\u505a PPT \u8f7b\u677e\u3002\u53c8\u6216\u8005\u6211\u8fd9\u4e2a PPT \u662f\u6211\u81ea\u5df1\u9700\u8981\u7684\uff0c\u90a3\u6211\u5c31\u5f97\u786c\u7740\u5934\u76ae\u82b1\u8d39\u65f6\u95f4\u53bb\u94bb\u7814\u5982\u4f55\u505a\u4e00\u4e2a\u597d\u770b\u7684 PPT\uff0c\u7ed3\u679c\u6d6a\u8d39\u5927\u628a\u65f6\u95f4\u505a\u51fa\u6765\u7684\u53ef\u80fd\u8fd8\u662f\u4e2a\u8fde\u6cb9\u817b\u90fd\u8bf4\u4e0d\u4e0a\u7684\u4e1c\u897f\u3002

\u800c\u56de\u5230\u8bed\u96c0\u7684\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bf4\u6765\u53ef\u7b11\uff0c\u6211\u5199\u8fd9\u4e00\u884c\u7684\u65f6\u5019\u5c31\u53c8\u51fa\u4e86 bug\u3002\u8bda\u7136\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\u662f\u4e00\u4e2a\u5f88\u597d\u7684 Idea\uff0c\u4f46\u662f\u8bed\u96c0\u81ea\u8eab\u5927\u5927\u5c0f\u5c0f\u7684\u95ee\u9898\u5230\u5904\u90fd\u662f\uff0c\u672c\u6765\u4f5c\u4e3a\u4e00\u4e2a\u6548\u7387\u5de5\u5177\u5374\u603b\u662f\u5728\u610f\u6599\u4e4b\u5916\u7684\u5730\u65b9\u9047\u5230\u5f88\u7cdf\u5fc3\u7684 Bug \uff0c\u8fd9\u7740\u5b9e\u5f88\u5f71\u54cd\u6548\u7387\uff08\u5173\u4e8e\u8fd9\u65b9\u9762\u7684\u5410\u69fd\u6211\u5c31\u4e0d\u653e\u5728\u8fd9\u91cc\u8bf4\u4e86\uff0c\u4ee5\u9632\u504f\u9898\uff09\u3002

\u5728\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\u4e0b\uff0c\u51fa\u73b0\u4e86\u95ee\u9898\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\uff0c\u6216\u8005\u8bf4\u5feb\u901f\u6392\u67e5\uff0c\u6216\u8005\u8bf4\u662f\u9000\u800c\u6c42\u5176\u6b21\u5bfb\u627e\u522b\u7684\u5b9e\u73b0\u529e\u6cd5\uff0c\u90fd\u662f\u4e0d\u65b9\u4fbf\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u8fd9\u4e2a\u529f\u80fd\u81ea\u8eab\u7684\u7a33\u5b9a\u6027\u5c31\u4e0d\u80fd\u4fdd\u8bc1\uff0c\u800c\u5176\u5b9e\u73b0\u5bf9\u4f7f\u7528\u8005\u6765\u8bf4\u4e5f\u5e76\u4e0d\u8db3\u591f\u7b80\u5355\u900f\u660e\uff0c\u5bfc\u81f4\u4f7f\u7528\u8d77\u6765\u4f1a\u9700\u8981\u627f\u62c5\u5f88\u591a\u4e0d\u786e\u5b9a\u7684\u98ce\u9669\u3002\uff08\u987a\u4fbf\u5410\u69fd\u4e00\u53e5\uff0c\u4f7f\u7528\u8bed\u96c0\u7684\u8fd9\u4e00\u5e74\u6211\u4f53\u611f\u4e0a\u5f71\u54cd\u4f53\u9a8c\u7684 Bug \u662f\u8d8a\u6765\u8d8a\u591a\u4e86\u2026\u2026\uff09

"},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u7528-reveal","title":"\u4e3a\u4ec0\u4e48\u6211\u7528 reveal*","text":"

\u90a3\u4e48\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5236\u4f5c\u300c\u6f14\u793a\u300d\u6750\u6599\u53c8\u600e\u4e48\u6837\u5462\uff1f\u9996\u5148\u662f Beamer\uff0c\u5927\u6982\u4e5f\u662f\u6700\u6709\u540d\u7684\uff0c\u5176\u57fa\u4e8e \\(\\LaTeX\\) \u5b9e\u73b0\uff0c\u5176\u5728\u6392\u7248\u4e0a\u7684\u53ef\u63a7\u6027\u4e0d\u8a00\u800c\u55bb\uff0c\u4f46\u662f\u5199\u8fc7\u7684\u4eba\u90fd\u77e5\u9053 \\(\\LaTeX\\) \u5199\u8d77\u6765\u591a\u8d39\u5fc3\uff1b\u800creveal.js \u4ee5\u53ca nodeppt \u662f\u6211\u627e\u5230\u8fc7\u7684\u4e24\u4e2a\u6bd4\u8f83\u6ee1\u610f\u7684\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5199 Slides \u7684\u5de5\u5177\u3002\u6211\u5e76\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u628a\u4ed6\u4eec\u4e24\u4e2a\u90fd\u8be6\u7ec6\u7684\u4ecb\u7ecd\u4e00\u904d\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u7b80\u5355\u8868\u8fbe\u4e00\u4e0b\u6211\u5bf9\u8fd9\u4e24\u4e2a\u4e1c\u897f\u7684\u770b\u6cd5\u3002

\u9996\u5148\uff0c\u5728\u6211\u7684\u7406\u89e3\u4e2d\uff0cnodeppt \u5bf9\u7f8e\u5316\u662f\u6bd4 reveal.js \u8981\u597d\u4e00\u4e9b\u7684\uff0c\u5373\uff0c\u629b\u5f00\u82b1\u8d39\u5728\u91cc\u9762\u7684\u65f6\u95f4\u4e0d\u8bf4\uff0c\u5c31\u7ed3\u679c\u800c\u8a00\uff0c\u4f7f\u7528 nodeppt \u4f1a\u6bd4 reveal.js \u597d\u770b\u4e00\u4e9b\uff0c\u6392\u7248\u66f4\u81ea\u7531\u4e00\u4e9b\u3002\u4f46\u662f\u4ece\u300c\u6548\u7387\u300d\u6765\u8bf4\uff0c\u6211\u503e\u5411\u4e8e reveal.js\u3002 \u7406\u7531\u5f88\u7b80\u5355\uff0creveal.js \u7684\u5206\u9875\u903b\u8f91\u6df1\u5f97\u6211\u5fc3\uff1a

\u6211\u81ea\u5df1\u5199\u7684\u67d0\u4e2a Slides \u7684\u7ed3\u6784\u901f\u89c8

\u53ef\u4ee5\u53d1\u73b0\uff0c\u9875\u9762\u6709\u7eb5\u5411\u548c\u6a2a\u5411\u4e24\u4e2a\u6269\u5c55\u65b9\u5411\uff0c\u8fd9\u975e\u5e38\u7b26\u5408\u5c42\u6b21\u5316\u7684\u601d\u7ef4\u903b\u8f91\uff0c\u4e5f\u5f88\u7b26\u5408\u6587\u6863\u7684\u7f16\u5199\u903b\u8f91\uff0c\u5e76\u4e14\u603b\u4f53\u800c\u8a00 \u6ca1\u6709\u4ec0\u4e48\u82b1\u91cc\u80e1\u54e8\u4f46\u662f\u6ca1\u5565\u7528\u7684\u4e1c\u897f\uff0c\u5177\u6709\u4e00\u79cd\u5965\u5361\u59c6\u5243\u5200\u7684\u7f8e\u611f\u3002\u7136\u800c\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u5b83\u7684\u7f8e\u5de5\u4e0a\u9650\u5f88\u4f4e\uff0c\u6070\u6070\u76f8\u53cd\uff0c\u4e0d\u4ec5 reveal.js \u7684\u5185\u7f6e\u52a8\u753b\u548c\u98ce\u683c\u5c31\u5f88\u8212\u9002\uff0c\u800c\u4e14\u65e0\u8bba\u662f reveal.js \u8fd8\u662f nodeppt\uff0c\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u9759\u6001\u7f51\u9875\uff0c\u4f60\u5927\u53ef\u4ee5\u7528\u4f60\u7684\u524d\u7aef\u6280\u80fd\u6765\u7f8e\u5316\u5b83\u2014\u2014\u5f53\u7136\uff0c \u5bf9\u6211\u6765\u8bf4\u8fd9\u4e9b\u4e1c\u897f\u5c31\u6ca1\u5565\u5fc5\u8981\u4e86\u3002 \u4ee5\u4e0a\u90fd\u662f\u5173\u4e8e\u6548\u679c\u7684\u53d9\u8ff0\uff0c\u90a3\u5b83\u662f\u5426\u771f\u7684\u5199\u8d77\u6765\u5f88\u65b9\u4fbf\u5462\uff1f\u5176\u5b9e\u6211\u611f\u89c9\u539f\u751f\u7684 reveal.js \u5199\u8d77\u6765\u5e76\u4e0d\u65b9\u4fbf\uff0c\u6211\u4e00\u5f00\u59cb\u751a\u81f3\u4e0d\u77e5\u9053\u8981\u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u6863\u3002\u4f46\u662f\u6211\u540e\u6765\u53d1\u73b0\u4e86[reveal-md](https://github.com/webpro/reveal-md)\u8fd9\u4e2a\u5de5\u5177\u3002\u5229\u7528reveal-md\uff0c\u4f60\u53ef\u4ee5\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5b9e\u73b0\u4f7f\u7528markdown\u8bed\u6cd5\u6765\u5199\u4e00\u4e2a Slides\u3002

"},{"location":"others/reveal-md2Slides/#\u5b89\u88c5\u4e0e\u6f14\u793a","title":"\u5b89\u88c5\u4e0e\u6f14\u793a","text":"

\u786e\u4fdd\u60a8\u7684[npm](https://www.npmjs.com/)\u80fd\u591f\u6b63\u5e38\u4f7f\u7528\uff0c\u63a5\u4e0b\u6765\u5b89\u88c5reveal-md\u4f60\u53ea\u9700\u8981\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5373\u53ef\u3002

npm install -g reveal-md\n

\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f60\u5c31\u53ef\u4ee5\u5c06 reveal-md \u5f53\u4f5c\u4e00\u4e2a console app \u6765\u4f7f\u7528\uff0c\u8f93\u5165 reveal-md --help \u6765\u67e5\u770b\u547d\u4ee4\u8be6\u7ec6\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

help list
Puppeteer unavailable, unable to create featured slide image for OpenGraph metadata.\nPuppeteer unavailable, unable to generate PDF file.\nUsage: cli <slides.md> [options]\n\nSee https://github.com/webpro/reveal-md for more details.\n\nOptions:\n  -V, --version                               output the version number\n      --title <title>                         Title of the presentation\n  -s, --separator <separator>                 Slide separator [default: 3 dashes (---) surrounded by two blank lines]\n-S, --vertical-separator <separator>        Vertical slide separator [default: 4 dashes (----) surrounded by two blank lines]\n-t, --theme <theme>                         Theme [default: black]\n--highlight-theme <theme>               Highlight theme [default: zenburn]\n--css <files>                           CSS files to inject into the page\n      --scripts <files>                       Scripts to inject into the page\n      --assets-dir <dirname>                  Defines assets directory name [default: _assets]\n--preprocessor <script>                 Markdown preprocessor script\n      --template <filename>                   Template file for reveal.js\n      --listing-template <filename>           Template file for listing\n      --glob <pattern>                        Glob pattern to select markdown files for listing and conversion [default: **/*.md]\n--print [filename]                      Print to PDF file\n      --static [dir]                          Export static html to directory [_static]. Incompatible with --print.\n      --static-dirs <dirs>                    Extra directories to copy into static directory. Only used in conjunction with --static.\n  -w, --watch                                 Watch for changes in markdown file and livereload presentation\n      --disable-auto-open                     Disable auto-opening your web browser\n      --host <host>                           Host [default: localhost]\n--port <port>                           Port [default: 1948]\n--featured-slide <num>                  Capture snapshot from this slide (numbering starts from 1) and use it as og:image for static build. Defaults to first slide. Only used with --static.\n      --absolute-url <url>                    Define url used for hosting static build. This is included in OpenGraph metadata. Only used with --static.\n      --print-size                            Paper size to use in exported PDF files\n      --puppeteer-launch-args <args>          Customize how Puppeteer launches Chromium. The arguments are specified as a space separated list (for example --puppeteer-launch-args=\"--no-sandbox --disable-dev-shm-usage\"). Needed for some CI setups.\n      --puppeteer-chromium-executable <path>  Customize which Chromium executable puppeteer will launch. Allows to use a globally installed version of Chromium.\n  -h, --help                                  output usage information\n

\u5728\u6211\u81ea\u5df1\u7684\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ba4\u4e3a\u6bd4\u8f83\u6838\u5fc3\u7684\u4e24\u6761\u547d\u4ee4\u5982\u4e0b\uff1a

## \u6700\u57fa\u7840\u7684\u547d\u4ee4\uff0c\u6839\u636e Markdown \u6587\u4ef6\u5728\u672c\u5730 1948 \u7aef\u53e3\u751f\u6210 Slides \u670d\u52a1\u3002\n$ reveal-md your-md-file.md\n\n## \u4e3a\u4e86\u5b9e\u73b0\u5728\u7ebf\u90e8\u7f72\uff0c\u9700\u8981\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u3002\n$ reveal-md your-md-file.md --static your-static-dir\n

\u4e5f\u5c31\u662f\u8bf4\uff0c\u4f60\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2amd\u6587\u4ef6\uff0c\u5e76\u4f7f\u7528\u8fd9\u4e9b\u6307\u4ee4\u5c31\u80fd\u751f\u6210 reveal.js Slides\u3002 \u63a5\u4e0b\u6765\u4ee5\u5b98\u65b9 demo \u4e3a\u4f8b\u4ecb\u7ecd\u4e00\u4e0b\u4f7f\u7528\u3002\u8fd0\u884c\u6307\u4ee4\u4ee5\u540e\u4f1a\u5728 1948 \u7aef\u53e3\u542f\u52a8\u670d\u52a1\uff0c\u4e00\u822c\u4f1a\u76f4\u63a5\u901a\u8fc7\u6d4f\u89c8\u5668\u6253\u5f00\u3002 \u5728 PC \u7aef\u53e3\uff1a

\u6309 f \u4e4b\u524d\u3002 \u5168\u5c4f\u663e\u793a\u3002

\u800c\u5728\u79fb\u52a8\u7aef\uff08\u6bd4\u5982\u8bbf\u95ee\u67d0\u4e2a\u5b9e\u4f8b\u7684\u5728\u7ebf\u90e8\u7f72\u65f6\uff09\uff0c\u57fa\u672c\u7684\u70b9\u51fb\u64cd\u4f5c\u662f\u4e00\u6837\u7684\uff0c\u6b64\u5916\uff0c\u5e26\u6709\u65b9\u5411\u7684\u6ed1\u52a8\u53ef\u4ee5\u5bf9\u5e94\u65b9\u5411\u952e\u529f\u80fd\u3002

"},{"location":"others/reveal-md2Slides/#\u6587\u6863\u7f16\u5199","title":"\u6587\u6863\u7f16\u5199","text":"

\u5728\u8fd9\u90e8\u5206\uff0c\u6211\u5e76\u4e0d\u6253\u7b97\u6309\u7167\u6a21\u5757\u5316\u3001\u7cfb\u7edf\u5316\u7684\u6d41\u7a0b\u6765\u7f16\u5199\u6559\u7a0b\uff0c\u8fd9\u4e9b\u4f60\u5728\u5b98\u65b9\u6587\u6863\u4e2d\u90fd\u80fd\u627e\u5230\u2014\u2014\u6211\u5e76\u4e0d\u89c9\u5f97\u201c\u5b57\u5178\u201d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u5b66\u4e60\u9014\u5f84\uff0c\u5c31\u50cf\u6211\u4eec\u4e00\u822c\u4e0d\u5efa\u8bae\u7528\u300aC++ Primer\u300b\u5165\u95e8 C++\uff0c\u66f4\u4e0d\u4f1a\u5efa\u8bae\u5916\u56fd\u53cb\u4eba\u901a\u8fc7\u300a\u65b0\u534e\u5b57\u5178\u300b\u6765\u5b66\u4e60\u6c49\u8bed\u3002 \u6211\u5c06\u6309\u7167\u6211\u5bf9\u8fd9\u4e2a\u5de5\u5177\u7684\u7406\u89e3\uff0c\u6309\u7167\u7531\u6d45\u5165\u6df1\uff0c\u6309\u7167\u5fc5\u8981\u7a0b\u5ea6\u6765\u4ecb\u7ecd\u5185\u5bb9\u3002\u5b83\u53ef\u80fd\u770b\u8d77\u6765\u4f1a\u53c8\u4e9b\u6df7\u4e71\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b83\u662f\u7b26\u5408\u5b9e\u8df5\u987a\u5e8f\u7684\uff0c\u5982\u679c\u8ba9\u4f60\u89c9\u5f97\u770b\u8d77\u6765\u5f88\u8d39\u52b2\uff0c\u53ef\u4ee5\u642d\u914d\u5b98\u65b9\u6587\u6863\u6765\u4f7f\u7528\uff0c\u6216\u8005\u76f4\u63a5\u544a\u8bc9\u6211\u3002 \u6b64\u5916\uff0c\u5176\u4e2d\u53ef\u80fd\u4e0d\u4f1a\u6d89\u53ca\u4e00\u90e8\u5206\u6211\u4e2a\u4eba\u4e0d\u592a\u559c\u6b22\u7684\u4e1c\u897f\uff0c\u6bd4\u5982\u540c\u6837\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u548c\u547d\u4ee4\u53c2\u6570\u7684\u884c\u4e3a\uff0c\u6211\u4f1a\u9009\u62e9\u53ea\u4ecb\u7ecd\u914d\u7f6e\u6587\u4ef6\u7684\u65b9\u6848\u3002\u5982\u679c\u4f60\u5bf9\u53e6\u5916\u4e00\u79cd\u65b9\u6848\u611f\u5174\u8da3\uff0c\u53ef\u4ee5\u8be6\u7ec6\u9605\u8bfb\u6587\u6863\u6216\u8005\u5e2e\u52a9\u83dc\u5355\u3002\u6b64\u5916\uff0c\u672c\u6587\u7ae0\u4e5f\u4e0d\u4f1a\u6d89\u53ca reveal-md \u7684\u6240\u6709\u5185\u5bb9\uff0c\u800c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u629b\u7816\u5f15\u7389\u6216\u8005\u8bf4\u57fa\u7840\u4f7f\u7528\u7684\u6559\u7a0b\u3002\u90e8\u5206\u9700\u6c42\u53ef\u80fd\u662f\u9762\u5411\u7279\u6b8a\u7528\u6237\u7fa4\u4f53\u7684\uff0c\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u67e5\u770b\u5b98\u65b9\u6587\u6863\u3002

"},{"location":"others/reveal-md2Slides/#\u5206\u9875","title":"\u5206\u9875","text":"

\u9996\u5148\uff0c\u5982\u679c\u4f60\u7528\u4e00\u4e2a\u518d\u666e\u901a\u4e0d\u8fc7\u7684 Markdown \u6587\u4ef6\u6765\u521b\u5efa Slides\uff0c\u6bd4\u5982\uff1a

## Part 1\n\n### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n### Part 1.2\n\n{code block here}\n\n### Part 1.3\n\n> Everthings seems ok!\n

\u90a3\u4e48\u8fd0\u884c\u4ee5\u540e\u6211\u4eec\u4f1a\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u9875\u9762\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u5e76\u4e0d\u50cf\u6211\u4eec\u60f3\u7684\u90a3\u6837\uff0c\u5411\u6a2a\u5411\u548c\u7eb5\u5411\u6269\u5c55\u3002\u4f46\u662f\u8fd9\u6070\u597d\u8bf4\u660e\u6240\u6709\u4e1c\u897f\u90fd\u662f\u53ef\u63a7\u7684\uff0c\u800c\u4e0d\u662f\u83ab\u540d\u5176\u5999\u7684\u6839\u636e\u67d0\u4e2a\u6807\u9898\u5c31\u81ea\u52a8\u6362\u6389\uff0c\u8fdb\u800c\u5bfc\u81f4\u4e00\u7cfb\u5217\u8be1\u5f02\u7684\u95ee\u9898\u3002

\u5728 reveal-md \u4e2d\uff0c\u6709\u4e24\u79cd separator \u548c vertical separator \u4e24\u79cd\uff0c\u987e\u540d\u601d\u4e49\uff0c\u5206\u522b\u5bf9\u5e94\u7740\u5de6\u53f3\u5206\u9875\u548c\u4e0a\u4e0b\u5206\u9875\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cseparator \u662f \\n---\\n\uff0c\u800c vertical separator \u662f \\n----\\n\u3002\u6240\u4ee5\u7a0d\u5fae\u5bf9\u4e0a\u9762\u7684\u6587\u6863\u8fdb\u884c\u4e00\u4e9b\u4fee\u6539\uff1a

### Part 1\n\n---\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n----\n\n#### Part 1.2\n\n{code block here}\n\n----\n\n#### Part 1.3\n\n> Everthings seems ok!\n

\u518d\u6b21\u8fd0\u884c\u5c31\u80fd\u53d1\u73b0\u6211\u4eec\u7684 Slides \u5df2\u7ecf\u6709\u4e86\u4e8c\u7ef4\u7684\u5c42\u7ea7\u7ed3\u6784\uff1a

\u867d\u7136\u8fd9\u91cc\u7684\u9884\u89c8\u56fe\u91cc\u770b\u8d77\u6765\u6392\u7248\u5f88\u4e11\uff0c\u4f46\u662f\u5b9e\u9645\u5c55\u793a\u7684\u65f6\u5019\u90fd\u662f\u9ed8\u8ba4\u5c45\u4e2d\uff0c\u4e0d\u559c\u6b22\u7684\u8bdd\u53ef\u4ee5\u6539\u76f8\u5173\u8bbe\u7f6e\u6216\u8005\u7528 html \u6807\u7b7e\u4fee\u6539\u3002

\u90a3\u4e48\u5176\u5b9e\u5230\u6b64\u4e3a\u6b62\uff0c\u4f60\u5df2\u7ecf\u80fd\u591f\u901a\u8fc7reveal-md\u6765\u5b9e\u73b0\u975e\u5e38\u5feb\u901f\u7684 Slides \u7f16\u5199\u4e86\u3002\u4f46\u662f\u4e3a\u4e86\u5b9a\u5236\u4e3b\u9898\uff0c\u6216\u8005\u662f\u4f7f\u7528\u4e00\u4e9b\u66f4\u9ad8\u7ea7\u7684\u4e1c\u897f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4ecb\u7ecd\u4e00\u4e9b\u522b\u7684\u4e1c\u897f\uff0c\u5305\u62ec\u5bf9\u67d0\u4e9b\u4e1c\u897f\u7684\u81ea\u5b9a\u4e49\u3001\u67d0\u4e9b\u6a21\u5757\u7684\u6269\u5c55\u529f\u80fd\u3001\u4e0e\u539f\u751freveal.js\u8bed\u6cd5\u7684\u6df7\u7528\u3002 \u5728\u6b63\u5f0f\u8fdb\u5165\u4e0b\u4e00\u4e2a\u90e8\u5206\u4e4b\u524d\uff0c\u6211\u60f3\u8865\u5145\u4ecb\u7ecd\u4e00\u4e0b\u5982\u4f55\u4fee\u6539\u9ed8\u8ba4\u7684 separator\uff1a \u6709\u4e24\u79cd\u65b9\u6848\u80fd\u5b9e\u73b0 seperator \u7684\u81ea\u5b9a\u4e49\uff0c\u4e00\u79cd\u662f\u901a\u8fc7\u5728\u547d\u4ee4\u884c\u4e2d\u7684\u9644\u52a0\u53c2\u6570\u5b9e\u73b0\uff0c\u53e6\u4e00\u79cd\u5219\u662f\u5728md\u6587\u4ef6\u5f00\u5934\u5199\u597d\u914d\u7f6e\u6587\u4ef6\u5b9e\u73b0\u3002

---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n

\u8fd9\u91cc\u6211\u624d\u7528\u7b2c\u4e8c\u79cd\u65b9\u6848\u6765\u6539\u88c5\u6211\u4eec\u7684 md \u6587\u4ef6\u73b0\u5728\u5f97\u5230\uff1a

---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n{code block here}\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n

\u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u9664\u4e86\u5f00\u5934\u914d\u7f6e\u6587\u4ef6\u7684\u90e8\u5206\uff0c\u5176\u4ed6\u7684 --- \u5219\u4f1a\u88ab\u8ba4\u4e3a\u662f md \u7684\u8bed\u6cd5\uff0c\u6e32\u67d3\u4e3a\u6b63\u5e38\u7684\u5206\u5272\u7ebf\u3002

"},{"location":"others/reveal-md2Slides/#\u4ee3\u7801\u6846","title":"\u4ee3\u7801\u6846","text":"

\u9996\u5148\uff0c\u5728 reveal-md \u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u548c\u5728 markdown \u4e2d\u4f7f\u7528\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7 reveal.js \u5bf9\u4ee3\u7801\u6846\u6709\u66f4\u591a\u7684\u652f\u6301\uff0c\u800c reveal-md \u5c06\u8fd9\u79cd\u652f\u6301\u878d\u5408\u8fdb\u4e86 markdown \u7684\u8bed\u6cd5\u3002\u6211\u5728\u8fd9\u91cc\u4e3b\u8981\u60f3\u4ecb\u7ecd\u7684\u662f\u4ee3\u7801\u6846\u9ad8\u4eae\u884c\u52a8\u753b\u3002

\u4e0d\u77e5\u9053\u4f60\u6709\u6ca1\u6709\u9047\u5230\u8fc7\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u9700\u8981\u8d34\u51fa\u4e00\u6bb5\u4ee3\u7801\uff0c\u4f46\u662f\u6709\u4e9b\u90e8\u5206\u5e76\u4e0d\u662f\u91cd\u70b9\uff0c\u4f46\u662f\u4e0d\u653e\u4e0a\u53bb\u53c8\u89c9\u5f97\u602a\u602a\u7684\uff1b\u53c8\u6216\u8005\u4f60\u7684\u4ee3\u7801\u91cc\u6709\u591a\u4e2a\u91cd\u70b9\uff0c\u4f60\u9700\u8981\u5728\u5c55\u793a\u65f6\u624b\u52a8\u544a\u8bc9\u5927\u5bb6\u54ea\u91cc\u662f\u91cd\u70b9\uff1freveal* \u53ef\u4ee5\u505a\u5230\u6309\u884c\u9ad8\u4eae\u4ee3\u7801\uff0c\u5e76\u4e14\u80fd\u591f\u5b9e\u73b0\u52a8\u753b\u3002\u8fd9\u4e48\u8bf4\u6709\u70b9\u62bd\u8c61\uff0c\u53ef\u4ee5\u4f53\u9a8c\u4e00\u4e0b\u8fd9\u4e00\u9875 Slide\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u4ec5\u9ad8\u4eae\u4e86\uff0c\u800c\u4e14\u8fd8\u6709\u81ea\u52a8\u6eda\u52a8\u5230\u4e2d\u5fc3\u3002

\u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u77e5\u9053\uff0c\u5728Markdown\u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u7684\u8bed\u6cd5\u5982\u4e0b\uff1a

- \u524d\u9762\u7684\u6570\u5b57\u662f\u4e3a\u4e86\u6807\u8bb0\u5b83\u4eec\u5c5e\u4e8e\u4ee3\u7801\u6846\u7684\u7b2c\u51e0\u884c\u800c\u5199\u7684\uff0c\u5b9e\u9645\u4e0d\u9700\u8981\u5199\u8fd9\u4e9b\u6570\u5b57\uff08\u5e9f\u8bdd\uff09\n- \u53cd\u659c\u6760\u662f\u4e3a\u4e86\u9632\u6b62md\u6e32\u67d3\u9519\u8bef\uff0c\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u52a0\n\n\\```cpp\n1       #include <iostream>\n2       int main(){\n3           std::cout << \"Hello World!\\n\";\n4       return 0;\n5       }\n\\```\n

\u90a3\u4e48\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9ad8\u4eae\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u8bed\u8a00\u540e\u9762\u52a0\u4e0a\u4e00\u4e2a\u65b9\u62ec\u53f7 [...] \u6765\u6807\u8bb0\u9ad8\u4eae\u884c\u5373\u53ef\uff0c\u6bd4\u5982 [2-5] \u5c31\u662f\u6807\u8bb0 2\uff5e5 \u884c\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a main() \u51fd\u6570\u3002\u6b64\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u7528|\u6765\u5206\u9694\u591a\u4e2a\u9ad8\u4eae\u5757\uff0c\u6765\u5b9e\u73b0\u52a8\u753b\u7684\u6548\u679c\uff0c\u4f8b\u5982 [1|2-5] \u5c31\u662f\u5148\u9ad8\u4eae\u9884\u7f16\u8bd1\uff0c\u518d\u9ad8\u4eae main() \u51fd\u6570\u3002

---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n\\```cpp[1|2-5]\n#include <iostream>\nint main(){\n    std::cout << \"Hello World!\\n\";\n    return 0;\n}\n\\```\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n
"},{"location":"others/reveal-md2Slides/#\u683c\u5f0f\u652f\u6301","title":"\u683c\u5f0f\u652f\u6301","text":"

\u5728\u6587\u672c\u683c\u5f0f\u6392\u7248\u65b9\u9762\uff0cMarkdown \u7684\u539f\u751f\u8bed\u6cd5\u90fd\u662f\u652f\u6301\u7684\uff0c\u6b64\u5916\u4f60\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 html \u6807\u7b7e\u6765\u7f16\u8f91\u4f60\u7684\u6587\u5b57\uff0c\u4f8b\u5982\u4fee\u6539\u989c\u8272\u3001\u8bbe\u7f6e\u5c45\u4e2d/\u9760\u5de6/\u9760\u53f3\u3001\u4fee\u6539\u5927\u5c0f\u2026\u2026 \u4f8b\u5982\uff0c\u4e0a\u9762\u5c55\u793a\u7684\u90a3\u5f20\u5c55\u793a\u4ee3\u7801\u9ad8\u4eae\u7684 Slide \u7684\u521d\u59cb\u4ee3\u7801\u5982\u4e0b\uff1a

### \u8f93\u51fa\u6d41\n\n\\```c[1-19|13-16]\n#ifndef __C_NEWBIE_HELPER__\n#define __C_NEWBIE_HELPER__\n/****************************************************\n * C Newbie Helper 1.0                              *\n * ------------------------------------------------ *\n * Github Repository Address:                       *\n * - https://github.com/IsshikiHugh/C-Newbie-Helper *\n ****************************************************/\n/*** Config Part ************************************/\n// MODE 0 : Logs will be write to 'CNH_log.txt' file.\n// MODE 1 : Logs will be print to console (colorful for normal terminal).\n// MODE 2 : Logs will be print to console (colorless but fine for CMD).\n#define CNH_MODE 2\n...\n\\```\n\n<font size=\"6\">\n\n- \u5982\u679c\u4f60\u5bf9\u547d\u4ee4\u884c<font color=\"orange\">\u6beb\u65e0\u4e86\u89e3</font>\uff0c\u90a3\u4e48\u8bf7\u68c0\u67e5 <font color=\"cyan\">CNH_MODE</font> \u88ab\u8bbe\u7f6e\u4e3a <font color=\"cyan\">2</font> \uff1b\n- \u5982\u679c\u4f60\u7684\u65e5\u5fd7\u5c06\u4f1a\u88ab\u6253\u5370\u5728\u5e38\u89c4\u7684 <font color=\"orange\">Terminal</font> \u4e0a\uff0c\u90a3\u4e48\u6211\u4eec\u63a8\u8350\u4f60\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">1</font> \uff1b\n- \u5982\u679c\u4f60\u5e0c\u671b\u4f60\u7684\u65e5\u5fd7\u5185\u5bb9\u4e0d\u88ab\u6253\u5370\uff0c\u800c\u662f\u8f93\u51fa\u5230<font color=\"orange\">\u6587\u4ef6</font>\u4e2d\uff0c\u5219\u53ef\u4ee5\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">0</font> \uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0cCNH \u65e0\u6cd5\u6e05\u7a7a\u8f93\u51fa\u6587\u4ef6\uff0c\u8bf7\u5728\u6bcf\u6b21\u8f93\u51fa\u7684\u65f6\u5019\u624b\u52a8\u6e05\u7406 <font color=\"yellow\">CNH_log.txt</font> \uff1b\n\n</font>\n

\u6839\u636e\u6211\u7684\u89c2\u5bdf\uff0c\u5982\u679c\u9700\u8981\u5728html\u6807\u7b7e\u91cc\u4f7f\u7528Markdown\u8bed\u6cd5\uff0c\u6700\u597d\u5728\u6807\u7b7e\u548c\u8bed\u6cd5\u4e4b\u95f4\u52a0\u7a7a\u884c\u3002

"},{"location":"others/reveal-md2Slides/#\u5b9a\u5236\u4e0e\u7f8e\u5316","title":"\u5b9a\u5236\u4e0e\u7f8e\u5316","text":"

\u8fd9\u91cc\u6211\u63d0\u4f9b\u4e00\u4e2a\u6211\u81ea\u5df1\u7684\u6e90md\u6587\u4ef6\u5f00\u5934\u914d\u7f6e\u7684\u6a21\u677f\uff1a

---\ntitle: Title\nseparator: <!--s-->\nverticalSeparator: <!--v-->\ntheme: league\nhighlightTheme: tomorrow-night-bright\nrevealOptions:\n  width: 1520\nheight: 950\nmargin: 0.04\n  transition: 'convex'\nslideNumber: true\n---\n

\u6211\u8fd9\u91cc\u586b\u5199\u7684\u662f\u6211\u81ea\u5df1\u8ba4\u4e3a\u6bd4\u8f83\u8212\u670d\u800c\u4e14\u597d\u770b\u7684\u3002\u5f53\u7136\uff0c\u5982\u679c\u672c\u5730\u5bf9\u5e94\u8d44\u6e90\u6587\u4ef6\u91cc\u6709\u60a8\u81ea\u5df1\u7f16\u5199\u7684\u8d44\u6e90\u4e5f\u662f\u53ef\u4ee5\u7528\u7684\u3002\u4f46\u662f\u8fd9\u4e00\u5757\u6211\u7684\u94bb\u7814\u4e5f\u4e0d\u662f\u7279\u522b\u6df1\uff0c\u6211\u672c\u8eab\u4e5f\u4e0d\u662f\u524d\u7aef\u4eba\uff0c\u6240\u4ee5\u53ea\u80fd\u4ecb\u7ecd\u5230\u8fd9\u91cc\u4e86\u3002

"},{"location":"others/reveal-md2Slides/#\u901a\u8fc7-github-pages-\u5b9e\u73b0\u9759\u6001\u90e8\u7f72","title":"\u901a\u8fc7 GitHub Pages \u5b9e\u73b0\u9759\u6001\u90e8\u7f72","text":"

\u5728\u8fd9\u4e2a\u7ae0\u8282\u4e2d\uff0c\u6211\u5c06\u4ecb\u7ecd\u5982\u4f55\u5229\u7528 GitHub Pages \u5b9e\u73b0 Slides \u7684\u90e8\u7f72\uff0c\u5728\u8bf8\u5982 Gitee Pages \u7684\u5e73\u53f0\u5b9e\u73b0\u8fd9\u4e9b\u529f\u80fd\u7684\u6d41\u7a0b\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002 \u9996\u5148\u4f60\u9700\u8981\u521b\u5efa\u4e00\u4e2a Repo \u6765\u5b58\u653e\u4f60\u7684\u9759\u6001\u8d44\u6e90\uff0c\u4f8b\u5982\u3002\u6211\u4e2a\u4eba\u7684\u505a\u6cd5\u662f\u76f4\u63a5\u628a\u521d\u59cb\u7684 md \u6587\u672c\u548c\u9759\u6001\u8d44\u6e90\u6587\u672c\u90fd\u653e\u5728\u4e00\u4e2a\u5730\u65b9\u4e86\u3002 \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5bfc\u51fa\u9759\u6001\u8d44\u6e90\uff0c\u4f7f\u7528\u7684\u662f\u8fd9\u6761\u6307\u4ee4\uff1a

reveal-md your-md-file.md --static your-static-dir\n

\u63a5\u4e0b\u6765\uff0c\u4f60\u4f1a\u5f97\u5230\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5305\u542b\u8fd9\u4e2a Slides \u6240\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\u3002\u4f60\u53ea\u9700\u8981\u5c06\u5b83\u4f20\u5230\u4f60\u7684 Repo \u91cc\u5373\u53ef\u3002 \u4f8b\u5982\u6211\u7684\u4ed3\u5e93\u4e2d\uff1a

\u8fdb\u5165repo/.../static-dir\uff0c\u4e5f\u5c31\u662f\u4e0a\u56fe\u7684slides\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u4e00\u4e9b\u6587\u4ef6\uff1a

\u5176\u4e2d\u7684 index.html \u548c slides.html \u90fd\u662f Slides \u7684 html \u6587\u4ef6\u3002\u533a\u522b\u8c8c\u4f3c\u662f index.html\u4f1a \u6709\u4e00\u4e2a\u5f39\u7a97\u544a\u8bc9\u4f60\u4f7f\u7528\u7684\u662f reveal.js\u3002

\u63a5\u4e0b\u6765\uff0c\u8bbe\u7f6e pages \u670d\u52a1\u4ee5\u540e\u901a\u8fc7 https://<github_id>.github.io/<repo_name>/.../slides.html \u5373\u53ef\u8bbf\u95ee\u5230\u9875\u9762\u5566\uff01 \u4f8b\u5982\u4e0a\u65b9\u8fd9\u4e2a\u4ed3\u5e93\u5bf9\u5e94\u7684 URL \u662f https://isshikihugh.github.io/myReveal-md/projectsTutorial_CNewbieHelper/slides/slides.html\u3002

\u5229\u7528 Pages \u670d\u52a1\uff0c\u5c31\u53ef\u4ee5\u5feb\u901f\u4fbf\u6377\u5730\u5206\u4eab\u4f60\u7684 Slides\uff0c\u5bf9\u4e8e\u4e0d\u61c2\u6280\u672f\u7684\u4eba\u6765\u8bf4\u4e0d\u4ec5\u8868\u73b0\u6548\u679c\u4e0d\u5dee\uff0c\u800c\u4e14\u8fd8\u6709\u4e00\u4e1d\u903c\u683c\u3002\u4e0d\u8fc7\u5728\u56fd\u5185\u6216\u8bb8\u8bbf\u95ee\u4e0d\u592a\u7a33\u5b9a\uff0c\u6240\u4ee5\u53ef\u4ee5\u8003\u8651\u4f7f\u7528 Gitee Pages \u6765\u5b9e\u73b0\u3002\u4e0d\u8fc7 Gitee Pages \u670d\u52a1\u6bcf\u4e00\u6b21\u90fd\u9700\u8981\u4f60\u81ea\u5df1\u53bb\u66f4\u65b0\u4e00\u4e0b\uff0c\u8fd8\u6709\u4e00\u4e9b\u5ba1\u6838\u673a\u5236\u3002

"},{"location":"others/reveal-md2Slides/#\u4e00\u4e9b\u5751","title":"\u4e00\u4e9b\u5751","text":"

reveal-md \u5df2\u7ecf\u6709\u5927\u6982\u4e00\u5e74\u7684\u65f6\u95f4\u6ca1\u6709\u7ef4\u62a4\u4e86\uff0c\u5176\u4e2d\u4e5f\u9047\u5230\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u9047\u5230\u4e86\u4e00\u4e9b\u5c31\u8bb0\u4e0b\u6765\u3002

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

\u7ea6 31 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u4f60\u4eec\u8981\u52aa\u529b\u8fdb\u7a84\u95e8\uff0c\u56e0\u4e3a\u5bbd\u95e8\u548c\u9614\u8def\u5f15\u5411\u6c89\u6ca6\u3002 \u2014\u2014\u5b89\u5fb7\u70c8\u00b7\u7eaa\u5fb7\u300a\u7a84\u95e8\u300b

"},{"location":"pape_read/ACTOR/","title":"[ACTOR] Action-Conditioned 3D Human Motion Synthesis with Transformer VAE","text":"

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

3DV Human-Motion Action-Control

\u6587\u7ae0\u4fe1\u606f

\u76f8\u5173\u5185\u5bb9

"},{"location":"pape_read/ACTOR/#introduction","title":"Introduction","text":"

In this work, our goal is to take a semantic action label like \u201cThrow\u201d and generate an infinite number of realistic 3D human motion sequences, of varying length, that look like realistic throwing (Figure 1).

\u5e76\u4e14\u53d7\u4f7f\u7528\u573a\u666f\u9650\u5236\uff0c\u5b83\u9700\u8981\u6709\u5f3a\u7ea6\u675f\u4ee5\u53ca\u76f8\u5bf9\u7684\u9ad8\u6548\u6027\u3002

\u6d89\u53ca\u4eba\u4f53\u76ae\u80a4\u8868\u9762\u4e0e\u4e3b\u5ba2\u4f53\u7684\u4ea4\u4e92\uff0c\u6240\u4ee5\u4f7f\u7528 SMPL \u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u9009\u62e9\u3002

noisy 3D body poses

\u540c\u6837\u91c7\u7528 Positional Encoding\uff0c\u8fd9\u4e0e NeRF \u8054\u7cfb\u8d77\u6765\u3002

"},{"location":"pape_read/ACTOR/#related-work","title":"Related Work","text":" \u7591\u60d1

his allows the generation of variable length sequences without the problem of the motions regressing to the mean pose. \u8fd9\u53e5\u8bdd\u662f\u4ec0\u4e48\u610f\u601d\uff1f

Translate

\u7ffb\u8bd1\u5185\u5bb9

"},{"location":"pape_read/ACTOR/trans/","title":"Translate","text":"

\u7ea6 4848 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 16 \u5206\u949f

"},{"location":"pape_read/ACTOR/trans/#abstract","title":"Abstract","text":"

\u6211\u4eec\u89e3\u51b3\u4e86\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u751f\u6210\u903c\u771f\u591a\u6837\u7684\u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\u7684\u95ee\u9898\u3002 \u4e0e\u5b8c\u6210\u6216\u6269\u5c55\u8fd0\u52a8\u5e8f\u5217\u7684\u65b9\u6cd5\u76f8\u6bd4\uff0c\u6b64\u4efb\u52a1\u4e0d\u9700\u8981\u521d\u59cb\u59ff\u52bf\u6216\u5e8f\u5217\u3002 \u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u901a\u8fc7\u8bad\u7ec3\u751f\u6210\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668 (VAE) \u6765\u5b66\u4e60\u4eba\u4f53\u52a8\u4f5c\u7684\u52a8\u4f5c\u611f\u77e5\u6f5c\u5728\u8868\u793a\u3002 \u901a\u8fc7\u4ece\u8fd9\u4e2a\u6f5c\u5728\u7a7a\u95f4\u4e2d\u91c7\u6837\u5e76\u901a\u8fc7\u4e00\u7cfb\u5217\u4f4d\u7f6e\u7f16\u7801\u67e5\u8be2\u67d0\u4e2a\u6301\u7eed\u65f6\u95f4\uff0c\u6211\u4eec\u5408\u6210\u4e86\u4ee5\u5206\u7c7b\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u53ef\u53d8\u957f\u5ea6\u8fd0\u52a8\u5e8f\u5217\u3002 \u5177\u4f53\u6765\u8bf4\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u67b6\u6784 ACTOR\uff0c\u7528\u4e8e\u7f16\u7801\u548c\u89e3\u7801\u4ece\u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6\u4f30\u8ba1\u7684\u4e00\u7cfb\u5217\u53c2\u6570\u5316 SMPL \u4eba\u4f53\u6a21\u578b\u3002 \u6211\u4eec\u5728 NTU RGB+D\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bc4\u4f30\u4e86\u6211\u4eec\u7684\u65b9\u6cd5\uff0c\u5e76\u5c55\u793a\u4e86\u5bf9\u73b0\u6709\u6280\u672f\u7684\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c55\u793a\u4e86\u4e24\u4e2a\u7528\u4f8b\uff1a\u901a\u8fc7\u5c06\u6211\u4eec\u7684\u5408\u6210\u6570\u636e\u6dfb\u52a0\u5230\u8bad\u7ec3\u4e2d\u6765\u6539\u8fdb\u52a8\u4f5c\u8bc6\u522b\uff0c\u4ee5\u53ca\u8fd0\u52a8\u53bb\u566a\u3002 \u4ee3\u7801\u548c\u6a21\u578b\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

"},{"location":"pape_read/ACTOR/trans/#introduction","title":"Introduction","text":"

\u5c3d\u7ba1\u5bf9\u4eba\u4f53\u8fd0\u52a8\u5efa\u6a21\u8fdb\u884c\u4e86\u6570\u5341\u5e74\u7684\u7814\u7a76 [4\u30015]\uff0c\u4f46\u5408\u6210\u903c\u771f\u4e14\u53ef\u63a7\u7684\u5e8f\u5217\u4ecd\u7136\u6781\u5177\u6311\u6218\u6027\u3002 \u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u91c7\u7528\u50cf\u201c\u6295\u63b7\u201d\u8fd9\u6837\u7684\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff0c\u5e76\u751f\u6210\u65e0\u9650\u6570\u91cf\u7684\u903c\u771f 3D \u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\uff0c\u957f\u5ea6\u5404\u4e0d\u76f8\u540c\uff0c\u770b\u8d77\u6765\u50cf\u771f\u5b9e\u7684\u6295\u63b7\uff08\u56fe 1\uff09\u3002\u5927\u91cf\u5148\u524d\u7684\u5de5\u4f5c\u90fd\u96c6\u4e2d\u5728\u91c7\u53d6\u4e00\u4e2a\u59ff\u52bf\u6216\u4e00\u7cfb\u5217\u59ff\u52bf\uff0c\u7136\u540e\u9884\u6d4b\u672a\u6765\u7684\u8fd0\u52a8 [3\u30016\u300122\u300171\u300174]\u3002 \u8fd9\u662f\u4e00\u4e2a\u8fc7\u4e8e\u53d7\u9650\u7684\u573a\u666f\uff0c\u56e0\u4e3a\u5b83\u5047\u8bbe\u5df2\u7ecf\u6709\u4e00\u4e2a\u8fd0\u52a8\u5e8f\u5217\u5e76\u4e14\u53ea\u9700\u8981\u66f4\u591a\u3002 \u53e6\u4e00\u65b9\u9762\uff0c\u8bb8\u591a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u865a\u62df\u73b0\u5b9e\u548c\u89d2\u8272\u63a7\u5236 [28\u300161] \u9700\u8981\u751f\u6210\u5177\u6709\u6307\u5b9a\u6301\u7eed\u65f6\u95f4\u7684\u7ed9\u5b9a\u7c7b\u578b\uff08\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff09\u7684\u52a8\u4f5c\u3002

\u56fe1\uff1a\u76ee\u6807\uff1a\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684 Transformer VAE\uff08ACTOR\uff09\u5b66\u4e60\u5408\u6210\u4ee5\u5206\u7c7b\u52a8\u4f5c\u548c\u6301\u7eed\u65f6\u95f4T\u4e3a\u6761\u4ef6\u7684\u4eba\u7c7b\u8fd0\u52a8\u5e8f\u5217\u3002\u5e8f\u5217\u662f\u901a\u8fc7\u4ece\u5355\u4e00\u7684\u8fd0\u52a8\u8868\u5f81\u6f5c\u4f0f\u5411\u91cfz\u4e2d\u53d6\u6837\u4ea7\u751f\u7684\uff0c\u800c\u4e0d\u662f\u5148\u524d\u5de5\u4f5c\u4e2d\u7684\u6846\u67b6\u7ea7\u5d4c\u5165\u7a7a\u95f4\u3002

\u6211\u4eec\u901a\u8fc7\u4f7f\u7528\u5177\u6709\u76f8\u5e94\u52a8\u4f5c\u6807\u7b7e\u7684 3D \u4eba\u4f53\u8fd0\u52a8\u6570\u636e\u8bad\u7ec3\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u7279\u522b\u662f\uff0c\u6211\u4eec\u6784\u5efa\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u7f16\u7801\u5668-\u89e3\u7801\u5668\u67b6\u6784\uff0c\u5e76\u4f7f\u7528 VAE \u76ee\u6807\u5bf9\u5176\u8fdb\u884c\u8bad\u7ec3\u3002 \u6211\u4eec\u4f7f\u7528 SMPL [46] \u5bf9\u4eba\u4f53\u8fdb\u884c\u53c2\u6570\u5316\uff0c\u56e0\u4e3a\u5b83\u53ef\u4ee5\u8f93\u51fa\u5173\u8282\u4f4d\u7f6e\u6216\u8eab\u4f53\u8868\u9762\u3002 \u8fd9\u4e3a\u66f4\u597d\u5730\u6a21\u62df\u4e0e\u73af\u5883\u7684\u76f8\u4e92\u4f5c\u7528\u94fa\u5e73\u4e86\u9053\u8def\uff0c\u56e0\u4e3a\u8868\u9762\u662f\u6a21\u62df\u63a5\u89e6\u6240\u5fc5\u9700\u7684\u3002 \u6b64\u5916\uff0c\u8fd9\u79cd\u8868\u793a\u5141\u8bb8\u4f7f\u7528\u591a\u79cd\u91cd\u5efa\u635f\u5931\uff1a\u7ea6\u675f\u8fd0\u52a8\u6811\u4e2d\u7684\u96f6\u4ef6\u65cb\u8f6c\u3001\u5173\u8282\u4f4d\u7f6e\u6216\u8868\u9762\u70b9\u3002\u6587\u732e [40] \u548c\u6211\u4eec\u7684\u7ed3\u679c\u8868\u660e\uff0c\u635f\u5931\u7684\u7ec4\u5408\u7ed9\u51fa\u4e86\u6700\u771f\u5b9e\u7684\u751f\u6210\u8fd0\u52a8\u3002

\u8fd0\u52a8\u5408\u6210\u7684\u5173\u952e\u6311\u6218\u662f\u751f\u6210\u5728\u611f\u77e5\u4e0a\u903c\u771f\u7684\u540c\u65f6\u5177\u6709\u591a\u6837\u6027\u7684\u5e8f\u5217\u3002\u8bb8\u591a\u8fd0\u52a8\u751f\u6210\u65b9\u6cd5\u90fd\u91c7\u7528\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u4f8b\u5982 LSTM [16] \u548c GRU [49]\u3002\u7136\u800c\uff0c\u8fd9\u4e9b\u65b9\u6cd5\u901a\u5e38\u4f1a\u5728\u4e00\u6bb5\u65f6\u95f4\u540e\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf [49] \u5e76\u4e14\u5bb9\u6613\u6f02\u79fb\u3002 \u6211\u4eec\u7684 Transformer \u6a21\u578b\u7684\u5173\u952e\u521b\u65b0\u662f\u4e3a\u89e3\u7801\u5668\u63d0\u4f9b\u4f4d\u7f6e\u7f16\u7801\u5e76\u7acb\u5373\u8f93\u51fa\u5b8c\u6574\u5e8f\u5217\u3002 \u6700\u8fd1\u5173\u4e8e\u795e\u7ecf\u8f90\u5c04\u573a\u7684\u5de5\u4f5c\u5df2\u7ecf\u666e\u53ca\u4e86\u4f4d\u7f6e\u7f16\u7801 [50]\uff1b \u6211\u4eec\u8fd8\u6ca1\u6709\u770b\u5230\u5b83\u50cf\u6211\u4eec\u4e00\u6837\u7528\u4e8e\u8fd0\u52a8\u751f\u6210\u3002 \u8fd9\u5141\u8bb8\u751f\u6210\u53ef\u53d8\u957f\u5ea6\u5e8f\u5217\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u8fd0\u52a8\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf\u7684\u95ee\u9898\u3002 \u6b64\u5916\uff0c\u636e\u6211\u4eec\u6240\u77e5\uff0c\u6211\u4eec\u7684\u65b9\u6cd5\u662f\u7b2c\u4e00\u4e2a\u521b\u5efa\u52a8\u4f5c\u6761\u4ef6\u5e8f\u5217\u7ea7\u5d4c\u5165\u7684\u65b9\u6cd5\u3002 \u6700\u63a5\u8fd1\u7684\u5de5\u4f5c\u662f Action2Motion [21]\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5b83\u63d0\u51fa\u4e86\u4e00\u79cd\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u5176\u4e2d\u6f5c\u5728\u8868\u793a\u5904\u4e8e\u5e27\u7ea7\u522b\u3002 \u83b7\u5f97\u5e8f\u5217\u7ea7\u5d4c\u5165\u9700\u8981\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\uff1a\u6211\u4eec\u4e3a\u6b64\u76ee\u7684\u5f15\u5165\u4e86\u4e00\u79cd\u7ed3\u5408 Transformers \u548c VAE \u7684\u65b0\u65b9\u6cd5\uff0c\u8fd9\u4e5f\u663e\u7740\u63d0\u9ad8\u4e86\u57fa\u7ebf\u7684\u6027\u80fd\u3002

\u6211\u4eec\u7684\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u95ee\u9898\u7684\u4e00\u4e2a\u7279\u5b9a\u6311\u6218\u662f\u5b58\u5728\u4e0e\u4e0d\u540c\u52a8\u4f5c\u6807\u7b7e\u914d\u5bf9\u7684\u6709\u9650\u52a8\u4f5c\u6355\u6349 (MoCap) \u6570\u636e\uff0c\u901a\u5e38\u5728 10 \u4e2a\u7c7b\u522b\u4e2d [31\u300163]\u3002 \u76f8\u53cd\uff0c\u6211\u4eec\u4f9d\u9760\u5355\u76ee\u8fd0\u52a8\u4f30\u8ba1\u65b9\u6cd5 [38] \u6765\u83b7\u5f97 3D \u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u5728 UESTC \u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6 [32] \u7684 40 \u4e2a\u7ec6\u7c92\u5ea6\u7c7b\u522b\u4e0a\u5448\u73b0\u6709\u5e0c\u671b\u7684\u7ed3\u679c\u3002 \u4e0e[21]\u76f8\u53cd\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u591a\u89c6\u89d2\u76f8\u673a\u6765\u8fdb\u884c\u5355\u76ee\u8f68\u8ff9\u4f30\u8ba1\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u7684\u6a21\u578b\u53ef\u80fd\u9002\u7528\u4e8e\u66f4\u5927\u7684\u5c3a\u5ea6\u3002 \u5c3d\u7ba1\u6709\u566a\u97f3\uff0c\u5355\u773c\u4f30\u8ba1\u88ab\u8bc1\u660e\u8db3\u4ee5\u7528\u4e8e\u8bad\u7ec3\uff0c\u5e76\u4e14\u4f5c\u4e3a\u6211\u4eec\u6a21\u578b\u7684\u989d\u5916\u597d\u5904\uff0c\u6211\u4eec\u80fd\u591f\u901a\u8fc7\u6211\u4eec\u5b66\u4e60\u7684\u8fd0\u52a8\u8868\u793a\u6765\u7f16\u7801\u89e3\u7801\u53bb\u566a\u4f30\u8ba1\u5e8f\u5217\u3002

\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u53ef\u4ee5\u589e\u5f3a\u73b0\u6709\u7684 MoCap \u6570\u636e\u96c6\uff0c\u8fd9\u4e9b\u6570\u636e\u96c6\u6602\u8d35\u4e14\u5927\u5c0f\u6709\u9650 [48,63]\u3002 \u6700\u8fd1\u7684\u7814\u7a76\u63d0\u4f9b\u4e86\u7528\u4e8e\u8bad\u7ec3\u52a8\u4f5c\u8bc6\u522b\u6a21\u578b\u7684\u5408\u6210\u4eba\u7c7b\u52a8\u4f5c\u89c6\u9891 [65]\uff0c\u663e\u793a\u4e86\u52a8\u4f5c\u591a\u6837\u6027\u548c\u6bcf\u4e2a\u52a8\u4f5c\u7684\u5927\u91cf\u6570\u636e\u7684\u91cd\u8981\u6027\u3002 \u8fd9\u79cd\u65b9\u6cd5\u53ef\u4ee5\u53d7\u76ca\u4e8e\u65e0\u9650\u6e90\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u5408\u6210\u3002 \u6211\u4eec\u901a\u8fc7\u52a8\u4f5c\u8bc6\u522b\u5b9e\u9a8c\u6765\u63a2\u8ba8\u8fd9\u4e2a\u95ee\u9898\u3002 \u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u5c3d\u7ba1\u5b58\u5728 domain gap\uff0c\u4f46\u751f\u6210\u7684\u8fd0\u52a8\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\uff0c\u5c24\u5176\u662f\u5728\u4f4e\u6570\u636e\u8bbe\u7f6e\u4e2d\u3002 \u6700\u540e\uff0c\u7d27\u51d1\u7684\u52a8\u4f5c\u611f\u77e5\u4eba\u4f53\u8fd0\u52a8\u6f5c\u5728\u7a7a\u95f4\u53ef\u4ee5\u7528\u4f5c\u5176\u4ed6\u4efb\u52a1\u7684\u5148\u51b3\u6761\u4ef6\uff0c\u4f8b\u5982\u89c6\u9891\u4e2d\u7684\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002

\u6211\u4eec\u7684\u8d21\u732e\u6709\u56db\u65b9\u9762\uff1a(i) \u6211\u4eec\u4ecb\u7ecd\u4e86 ACTOR\uff0c\u8fd9\u662f\u4e00\u79cd\u65b0\u578b\u7684\u57fa\u4e8e Transformer \u7684\u6761\u4ef6 VAE\uff0c\u5e76\u8bad\u7ec3\u5b83\u901a\u8fc7\u4ece\u5e8f\u5217\u7ea7\u6f5c\u5728\u5411\u91cf\u4e2d\u91c7\u6837\u6765\u751f\u6210\u52a8\u4f5c\u6761\u4ef6\u4eba\u4f53\u8fd0\u52a8\u3002 (ii) \u6211\u4eec\u8bc1\u660e\u53ef\u4ee5\u4f7f\u7528\u4ece\u5355\u773c\u89c6\u9891\u4f30\u8ba1\u7684\u5608\u6742 3D \u4eba\u4f53\u59ff\u52bf\u6765\u5b66\u4e60\u751f\u6210\u903c\u771f\u7684 3D \u4eba\u4f53\u8fd0\u52a8\uff1b (iii) \u6211\u4eec\u5bf9\u67b6\u6784\u548c\u635f\u5931\u7ec4\u4ef6\u8fdb\u884c\u5168\u9762\u7684\u6d88\u878d\u7814\u7a76\uff0c\u5728\u591a\u4e2a\u6570\u636e\u96c6\u4e0a\u83b7\u5f97\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff1b (iv) \u6211\u4eec\u4e3a\u52a8\u4f5c\u8bc6\u522b\u548c MoCap \u53bb\u566a\u6a21\u578b\u8bf4\u660e\u4e86\u4e24\u4e2a\u7528\u4f8b\u3002 \u8be5\u4ee3\u7801\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

"},{"location":"pape_read/ACTOR/trans/#related-work","title":"Related Work","text":"

\u6211\u4eec\u7b80\u8981\u56de\u987e\u4e86\u6709\u5173\u8fd0\u52a8\u9884\u6d4b\u3001\u8fd0\u52a8\u5408\u6210\u3001\u5355\u773c\u8fd0\u52a8\u4f30\u8ba1\u4ee5\u53ca VAE \u80cc\u666f\u4e0b\u7684 Transformers \u7684\u76f8\u5173\u6587\u732e\u3002

\u672a\u6765\u4eba\u4f53\u8fd0\u52a8\u9884\u6d4b\u3002\u4eba\u4f53\u8fd0\u52a8\u5206\u6790\u7684\u7814\u7a76\u5386\u53f2\u60a0\u4e45\uff0c\u53ef\u4ee5\u8ffd\u6eaf\u5230 20 \u4e16\u7eaa 80 \u5e74\u4ee3 [5,17,19,52]\u3002 \u7ed9\u5b9a\u8fc7\u53bb\u7684\u8fd0\u52a8\u6216\u521d\u59cb\u59ff\u52bf\uff0c\u9884\u6d4b\u672a\u6765\u7684\u5e27\u88ab\u79f0\u4e3a\u8fd0\u52a8\u9884\u6d4b\u3002 \u65e9\u671f\u7814\u7a76\u4e2d\u5df2\u7ecf\u91c7\u7528\u4e86\u7edf\u8ba1\u6a21\u578b [7, 18]\u3002 \u6700\u8fd1\uff0c\u968f\u7740 GANs [20] \u6216 VAEs [37] \u7b49\u795e\u7ecf\u7f51\u7edc\u751f\u6210\u6a21\u578b\u7684\u8fdb\u5c55\uff0c\u4e00\u4e9b\u5de5\u4f5c\u663e\u793a\u51fa\u53ef\u559c\u7684\u7ed3\u679c\u3002 \u793a\u4f8b\u5305\u62ec\u7528\u4e8e\u672a\u6765\u8fd0\u52a8\u9884\u6d4b\u7684 HP-GAN [6] \u548c\u5faa\u73af VAE [22]\u3002 \u5927\u591a\u6570\u5de5\u4f5c\u5c06\u8eab\u4f53\u89c6\u4e3a\u9aa8\u67b6\uff0c\u5c3d\u7ba1\u6700\u8fd1\u7684\u5de5\u4f5c\u5229\u7528\u4e86\u5b8c\u6574\u7684 3D \u8eab\u4f53\u5f62\u72b6\u6a21\u578b [3, 74]\u3002 \u4e0e [74] \u7c7b\u4f3c\uff0c\u6211\u4eec\u4e5f\u8d85\u8d8a\u4e86\u7a00\u758f\u5173\u8282\u5e76\u5c06\u9876\u70b9\u5408\u5e76\u5230\u8eab\u4f53\u8868\u9762\u3002 DLow [71] \u4fa7\u91cd\u4e8e\u4ece\u9884\u8bad\u7ec3\u6a21\u578b\u4e2d\u591a\u6837\u5316\u672a\u6765\u8fd0\u52a8\u7684\u91c7\u6837\u3002 [11] \u4f7f\u7528\u5173\u4e8e\u5bf9\u8c61\u4ea4\u4e92\u7684\u4e0a\u4e0b\u6587\u7ebf\u7d22\u6267\u884c\u6709\u6761\u4ef6\u7684\u672a\u6765\u9884\u6d4b\u3002 \u6700\u8fd1\uff0c[42] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e Transformer \u7684\u821e\u8e48\u751f\u6210\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u4ee5\u97f3\u4e50\u548c\u8fc7\u53bb\u7684\u52a8\u4f5c\u4e3a\u6761\u4ef6\u3002 \u6bb5\u7b49\u3002 [14] \u4f7f\u7528\u53d8\u5f62\u91d1\u521a\u5b8c\u6210\u8fd0\u52a8\u3002 \u6709\u4e00\u4e2a\u5173\u4e8e\u8fd0\u52a8\u201c\u4e2d\u95f4\u201d\u7684\u76f8\u5173\u5de5\u4f5c\uff0c\u5b83\u91c7\u7528\u8fc7\u53bb\u548c\u672a\u6765\u7684\u59ff\u52bf\uff0c\u5e76\u201c\u4fee\u590d\u201d\u5b83\u4eec\u4e4b\u95f4\u7684\u5408\u7406\u8fd0\u52a8\uff1b \u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 [23]\u3002 \u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5728\u6ca1\u6709\u4efb\u4f55\u8fc7\u53bb\u89c2\u5bdf\u7684\u60c5\u51b5\u4e0b\u5408\u6210\u8fd0\u52a8\u3002 \u4eba\u4f53\u8fd0\u52a8\u5408\u6210\u3002 \u867d\u7136\u6709\u5927\u91cf\u5173\u4e8e\u672a\u6765\u9884\u6d4b\u7684\u6587\u732e\uff0c\u4f46\u4ece\u5934\u5f00\u59cb\u7efc\u5408\u53d7\u5230\u7684\u5173\u6ce8\u76f8\u5bf9\u8f83\u5c11\u3002 \u975e\u5e38\u65e9\u671f\u7684\u5de5\u4f5c\u4f7f\u7528 PCA [51] \u548c GPLVM [64] \u6765\u5b66\u4e60\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u5faa\u73af\u8fd0\u52a8\u7684\u7edf\u8ba1\u6a21\u578b\u3002 \u5bf9\u591a\u79cd\u591a\u6837\u7684\u52a8\u4f5c\u8fdb\u884c\u6761\u4ef6\u7efc\u5408\u8981\u56f0\u96be\u5f97\u591a\u3002 DVGAN [43] \u8bad\u7ec3\u4e00\u4e2a\u751f\u6210\u6a21\u578b\uff0c\u8be5\u6a21\u578b\u4ee5\u8868\u793a MoCap \u6570\u636e\u96c6\u4e2d\u52a8\u4f5c\u7684\u77ed\u6587\u672c\u4e3a\u6761\u4ef6\uff0c\u4f8b\u5982 Human3.6M [30\u300131] \u548c CMU [63]\u3002 Text2Action [1] \u548c Language2Pose [2] \u540c\u6837\u63a2\u7d22\u4e86\u6839\u636e\u6587\u672c\u63cf\u8ff0\u8c03\u8282\u52a8\u4f5c\u751f\u6210\u3002 Music-to-Dance [39] \u548c [41] \u7814\u7a76\u97f3\u4e50\u6761\u4ef6\u751f\u6210\u3002 QuaterNet [56] \u4fa7\u91cd\u4e8e\u5728\u7ed9\u5b9a\u5730\u9762\u8f68\u8ff9\u548c\u5e73\u5747\u901f\u5ea6\u7684\u60c5\u51b5\u4e0b\u751f\u6210\u884c\u8d70\u548c\u8dd1\u6b65\u7b49\u8fd0\u52a8\u52a8\u4f5c\u3002 [69] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e\u5377\u79ef\u7684\u751f\u6210\u6a21\u578b\uff0c\u7528\u4e8e\u5728\u4e0d\u6307\u5b9a\u52a8\u4f5c\u7684\u60c5\u51b5\u4e0b\u5b9e\u73b0\u903c\u771f\u7684\u4f46\u4e0d\u53d7\u7ea6\u675f\u7684\u8fd0\u52a8\u3002 \u7c7b\u4f3c\u5730\uff0c[73] \u5408\u6210\u4efb\u610f\u5e8f\u5217\uff0c\u5173\u6ce8\u65f6\u95f4\u4e0a\u7684\u65e0\u754c\u8fd0\u52a8\u3002

\u65e0\u7ea6\u675f\u8fd0\u52a8\u5408\u6210\u7684\u8bb8\u591a\u65b9\u6cd5\u5f80\u5f80\u4ee5\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u52a8\u4f5c\u4e3a\u4e3b\u5bfc\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u6211\u4eec\u7684\u6a21\u578b\u80fd\u591f\u4ece\u66f4\u4e00\u822c\u7684\uff0c\u65e0\u5468\u671f\u7684\uff0c\u9884\u5b9a\u4e49\u7684\u884c\u52a8\u7c7b\u522b\uff0c\u4e0e\u884c\u52a8\u8bc6\u522b\u6570\u636e\u96c6\u517c\u5bb9\u7684\u6837\u672c\u3002\u5728\u8fd9\u65b9\u9762\uff0c[75]\u5f15\u5165\u4e86\u8d1d\u53f6\u65af\u65b9\u6cd5\uff0c\u5176\u4e2d\u9690\u85cf\u534a\u9a6c\u5c14\u53ef\u592b\u6a21\u578b\u7528\u4e8e\u8054\u5408\u8bad\u7ec3\u751f\u6210\u6a21\u578b\u548c\u5224\u522b\u6a21\u578b\u3002\u4e0e\u6211\u4eec\u7c7b\u4f3c\uff0c[75]\u8868\u660e\uff0c\u4ed6\u4eec\u751f\u6210\u7684\u52a8\u4f5c\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\u7684\u884c\u52a8\u8bc6\u522b\u3002\u7136\u800c\uff0c\u6839\u636e\u5224\u522b\u5668\u5206\u7c7b\u7ed3\u679c\uff0c\u5b83\u4eec\u751f\u6210\u7684\u5e8f\u5217\u662f\u4f2a\u6807\u8bb0\u7684\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u6211\u4eec\u7684\u6761\u4ef6\u6a21\u578b\u80fd\u591f\u4ee5\u4e00\u79cd\u53d7\u63a7\u7684\u65b9\u5f0f\u5408\u6210\u8fd0\u52a8\uff0c\u4f8b\u5982\u5e73\u8861\u8bad\u7ec3\u96c6\u3002\u4e0e\u6211\u4eec\u7684\u5de5\u4f5c\u6700\u76f8\u4f3c\u7684\u662f Action2Motion [21] \uff0c\u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e GRU \u67b6\u6784\u7684\u6bcf\u5e27\u64cd\u4f5c VAE\u3002\u6211\u4eec\u7684\u5e8f\u5217\u7ea7 VAE \u6f5c\u5728\u7a7a\u95f4\uff0c\u7ed3\u5408\u57fa\u4e8e\u53d8\u538b\u5668\u7684\u8bbe\u8ba1\u63d0\u4f9b\u4e86\u663e\u8457\u7684\u4f18\u52bf\uff0c\u5982\u6211\u4eec\u7684\u5b9e\u9a8c\u6240\u793a\u3002

\u5176\u4ed6\u6700\u8fd1\u7684\u5de5\u4f5c[25,72]\u4f7f\u7528\u89c4\u8303\u5316\u6d41\u6765\u89e3\u51b3\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u548c\u751f\u6210\u95ee\u9898\u3002\u51e0\u4e2a\u4f5c\u54c1[29,36,67]\u5b66\u4e60\u4e00\u4e2a\u8fd0\u52a8\u6d41\u5f62\uff0c\u5e76\u4f7f\u7528\u5b83\u7684\u8fd0\u52a8\u53bb\u566a\uff0c\u8fd9\u662f\u6211\u4eec\u7684\u7528\u4f8b\u4e4b\u4e00\u3002\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u56fe\u5f62\u6587\u732e\u7684\u4e3b\u9898\uff0c\u8fd9\u5f80\u5f80\u96c6\u4e2d\u5728\u52a8\u753b\u5e08\u63a7\u5236\u3002\u770b\uff0c\u4f8b\u5982\uff0c[27]\u5b66\u4e60\u52a8\u4f5c\u5339\u914d\u548c[40]\u89d2\u8272\u52a8\u753b\u3002\u8fd9\u91cc\u6700\u76f8\u5173\u7684\u662f\u76f8\u51fd\u6570\u795e\u7ecf\u7f51\u7edc[28]\u548c\u795e\u7ecf\u72b6\u6001\u673a[61]\u3002\u4e24\u8005\u90fd\u5229\u7528\u4e86\u7531\u6b63\u5f26\u51fd\u6570\u76f8\u4f4d\u9a71\u52a8\u7684\u52a8\u4f5c\u7684\u6982\u5ff5\u3002\u8fd9\u4e0e\u4f4d\u7f6e\u7f16\u7801\u7684\u601d\u60f3\u6709\u5173\uff0c\u4f46\u4e0e\u6211\u4eec\u7684\u65b9\u6cd5\u4e0d\u540c\uff0c\u5b83\u4eec\u7684\u65b9\u6cd5\u9700\u8981\u4eba\u5de5\u5206\u5272\u64cd\u4f5c\u5e76\u6784\u5efa\u8fd9\u4e9b\u76f8\u51fd\u6570\u3002

\u5355\u76ee\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002\u6765\u81ea\u89c6\u9891\u7684\u8fd0\u52a8\u4f30\u8ba1[35,38,47]\u6700\u8fd1\u53d6\u5f97\u4e86\u91cd\u5927\u8fdb\u5c55\uff0c\u4f46\u8d85\u51fa\u4e86\u6211\u4eec\u7684\u8303\u56f4\u3002\u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u91c7\u7528 VIBE [38]\u4ece\u52a8\u4f5c\u6807\u8bb0\u7684\u89c6\u9891\u6570\u636e\u96c6\u4e2d\u83b7\u5f97\u8bad\u7ec3\u8fd0\u52a8\u5e8f\u5217\u3002

Transformer VAE\u3002Transformer \u6700\u8fd1\u5728\u8bed\u8a00\u4efb\u52a1\u65b9\u9762\u53d6\u5f97\u7684\u6210\u529f\u589e\u52a0\u4e86\u4eba\u4eec\u5bf9\u57fa\u4e8e\u6ce8\u610f\u529b\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u5174\u8da3\u3002\u4e00\u4e9b\u5de5\u7a0b\u4f7f\u7528\u53d8\u538b\u5668\u7ed3\u5408\u751f\u6210 VAE \u57f9\u8bad\u3002\u5177\u4f53\u7684\u4f8b\u5b50\u5305\u62ec\u6545\u4e8b\u751f\u6210[15] \uff0c\u60c5\u611f\u5206\u6790[10] \uff0c\u53cd\u5e94\u751f\u6210[44]\u548c\u97f3\u4e50\u751f\u6210[33]\u3002[33]\u7684\u5de5\u4f5c\u5b66\u4e60\u6bcf\u4e2a\u65f6\u95f4\u6846\u67b6\u7684\u6f5c\u5728\u5d4c\u5165\uff0c\u800c[10]\u5e73\u5747\u7684\u9690\u85cf\u72b6\u6001\uff0c\u4ee5\u83b7\u5f97\u4e00\u4e2a\u5355\u4e00\u7684\u6f5c\u5728\u4ee3\u7801\u3002\u53e6\u4e00\u65b9\u9762\uff0c[15]\u6267\u884c\u6ce8\u610f\u529b\u5e73\u5747\u6c60\u968f\u7740\u65f6\u95f4\u7684\u63a8\u79fb\u3002\u4e0e\u8fd9\u4e9b\u5de5\u4f5c\u76f8\u53cd\uff0c\u6211\u4eec\u91c7\u7528\u53ef\u5b66\u4e60\u7684\u6807\u8bb0\uff0c\u5982[12,13]\u4e2d\u6240\u793a\uff0c\u5c06\u8f93\u5165\u603b\u7ed3\u4e3a\u5e8f\u5217\u7ea7\u5d4c\u5165\u3002

\u56fe2\uff1a\u65b9\u6cd5\u6982\u8ff0\u3002\u6211\u4eec\u8bf4\u660e\u4e86\u6211\u4eec\u57fa\u4e8eTransformer\u7684VAE\u6a21\u578b\u7684\u7f16\u7801\u5668\uff08\u5de6\uff09\u548c\u89e3\u7801\u5668\uff08\u53f3\uff09\uff0c\u8be5\u6a21\u578b\u751f\u6210\u4e86\u52a8\u4f5c\u6761\u4ef6\u7684\u8fd0\u52a8\u3002\u7ed9\u5b9a\u4e00\u4e32\u8eab\u4f53\u59ff\u52bfP1, ... , PT\u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7ea\uff0c\u7f16\u7801\u5668\u8f93\u51fa\u5206\u5e03\u53c2\u6570\uff0c\u6211\u4eec\u5728\u6b64\u57fa\u7840\u4e0a\u5b9a\u4e49KL\u635f\u5931\uff08LKL\uff09\u3002\u6211\u4eec\u4f7f\u7528\u6bcf\u4e2a\u52a8\u4f5c\u7684\u989d\u5916\u53ef\u5b66\u4e60\u6807\u8bb0\uff08\u00b5 token a \u548c \u03a3 token a \uff09\u4f5c\u4e3a\u4eceTransformer\u7f16\u7801\u5668\u83b7\u5f97\u00b5\u548c\u03a3\u7684\u65b9\u6cd5\u3002\u4f7f\u7528\u00b5\u548c\u03a3\uff0c\u6211\u4eec\u5bf9\u8fd0\u52a8\u7684\u6f5c\u5728\u8868\u5f81z\u2208M\u8fdb\u884c\u91c7\u6837\u3002\u89e3\u7801\u5668\u5c06\u6f5c\u4f0f\u5411\u91cfz\u3001\u52a8\u4f5c\u6807\u7b7ea\u548c\u6301\u7eed\u65f6\u95f4T\u4f5c\u4e3a\u8f93\u5165\u3002\u884c\u52a8\u51b3\u5b9a\u4e86\u53ef\u5b66\u4e60\u7684b\u6807\u8bb0a\u52a0\u6cd5\u6807\u8bb0\uff0c\u6301\u7eed\u65f6\u95f4\u51b3\u5b9a\u4e86\u8f93\u5165\u5230\u89e3\u7801\u5668\u7684\u4f4d\u7f6e\u7f16\u7801\uff08PE\uff09\u7684\u6570\u91cf\u3002\u89e3\u7801\u5668\u8f93\u51fa\u6574\u4e2a\u5e8f\u5217Pb1, . . . , PbT\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8ba1\u7b97\u91cd\u5efa\u635f\u5931LP\u3002\u6b64\u5916\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u53ef\u5fae\u5206\u7684SMPL\u5c42\u8ba1\u7b97\u9876\u70b9\uff0c\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u9876\u70b9\u635f\u5931\uff08LV \uff09\u3002\u5bf9\u4e8e\u8bad\u7ec3\u6765\u8bf4\uff0cz\u662f\u4f5c\u4e3a\u7f16\u7801\u5668\u7684\u8f93\u51fa\u5f97\u5230\u7684\uff1b\u5bf9\u4e8e\u751f\u6210\u6765\u8bf4\uff0c\u5b83\u662f\u4ece\u9ad8\u65af\u5206\u5e03\u4e2d\u968f\u673a\u62bd\u53d6\u7684\u3002

"},{"location":"pape_read/ACTOR/trans/#action-conditioned-motion-generation","title":"Action-Conditioned Motion Generation","text":"

\u95ee\u9898\u5b9a\u4e49\u3002\u8eab\u4f53\u8fd0\u52a8\u6240\u5b9a\u4e49\u7684\u52a8\u4f5c\u53ef\u4ee5\u662f\u8eab\u4f53\u90e8\u4f4d\u7684\u65cb\u8f6c\u62e5\u6709\u5c5e\u6027\uff0c\u4e0e\u8eab\u4efd\u7279\u5b9a\u7684\u8eab\u4f53\u5f62\u72b6\u65e0\u5173\u3002\u4e3a\u4e86\u80fd\u591f\u4ea7\u751f\u4e0e\u4e0d\u540c\u5f62\u6001\u7684\u884c\u4e3a\u8005\u7684\u8fd0\u52a8\uff0c\u8fd9\u662f\u7406\u60f3\u7684\u5206\u79bb\u59ff\u52bf\u548c\u5f62\u72b6\u3002\u56e0\u6b64\uff0c\u4e0d\u5931\u4e00\u822c\u6027\uff0c\u6211\u4eec\u91c7\u7528\u4e86 SMPL \u8eab\u4f53\u6a21\u578b[46] \uff0c\u8fd9\u662f\u4e00\u4e2a\u5206\u79bb\u7684\u8eab\u4f53\u8868\u793a(\u7c7b\u4f3c\u4e8e\u6700\u8fd1\u7684\u6a21\u578b[53,55,58,68])\u3002\u5ffd\u7565\u5f62\u72b6\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u751f\u6210\u4e00\u7cfb\u5217\u7684\u59ff\u6001\u53c2\u6570\u3002\u66f4\u6b63\u5f0f\u5730\u8bf4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a (\u6765\u81ea\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u52a8\u4f5c\u8303\u7574 a \u2208 A)\u548c\u4e00\u4e2a\u6301\u7eed\u65f6\u95f4 T\uff0c\u6211\u4eec\u751f\u6210\u4e00\u4e2a\u4f53\u6784\u6210\u7684\u5e8f\u5217 R1\uff0c... \uff0cRT \u548c\u4e00\u4e2a\u6839\u5173\u8282\u7684\u5e73\u79fb\u5e8f\u5217\u8868\u793a\u4e3a\u4f4d\u79fb\uff0cD1\uff0c... \uff0cDT (\u4e0e DT \u2208 R3\uff0csomething t \u2208{1\uff0c... \uff0cT })

\u52a8\u4f5c\u8868\u73b0\u6cd5\u3002\u6bcf\u5e27 SMPL \u59ff\u6001\u53c2\u6570\u8868\u793a\u8fd0\u52a8\u5b66\u6811\u4e2d\u768423\u4e2a\u5173\u8282\u65cb\u8f6c\u548c\u4e00\u4e2a\u5168\u5c40\u65cb\u8f6c\u3002\u91c7\u7528\u8fde\u7eed6D \u65cb\u8f6c\u8868\u793a\u6cd5\u8fdb\u884c\u8bad\u7ec3[76] \uff0c\u4f7f Rt \u2208 R24 \u00d7 6\u3002\u8bbe Pt \u662f Rt \u548c Dt \u7684\u7ec4\u5408\uff0c\u8868\u793a\u5355\u5e27\u4e2d\u8eab\u4f53\u7684\u59ff\u52bf\u548c\u4f4d\u7f6e t\u3002\u5b8c\u6574\u7684\u52a8\u4f5c\u662f P1\uff0c. . \uff0cPT\u3002\u7ed9\u5b9a\u4e00\u4e2a\u751f\u6210\u5668\u8f93\u51fa\u4f4d\u59ff Pt \u548c\u4efb\u610f\u5f62\u72b6\u53c2\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u7528[46]\u53ef\u5fae\u5730\u5f97\u5230\u4f53\u7f51\u683c\u9876\u70b9(Vt)\u548c\u4f53\u5173\u8282\u5750\u6807(Jt)\u3002

"},{"location":"pape_read/ACTOR/trans/#conditional-transformer-vae-for-motions","title":"Conditional Transformer VAE for Motions","text":"

\u6211\u4eec\u91c7\u7528\u6761\u4ef6\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668(CVAE)\u6a21\u578b[60] \uff0c\u5e76\u5c06\u52a8\u4f5c\u7c7b\u522b\u4fe1\u606f\u8f93\u5165\u5230\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u3002\u66f4\u5177\u4f53\u5730\u8bf4\uff0c\u6211\u4eec\u7684\u6a21\u578b\u662f\u4e00\u4e2a\u52a8\u4f5c\u6761\u4ef6\u53d8\u538b\u5668 VAE (ACTOR) \uff0c\u5176\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u7531\u53d8\u538b\u5668\u5c42\u7ec4\u6210(\u53c2\u89c1\u56fe2\u4ee5\u83b7\u5f97\u6982\u8ff0)\u3002

\u7f16\u7801\u5668\u3002\u8be5\u7f16\u7801\u5668\u91c7\u7528\u4efb\u610f\u957f\u5ea6\u7684\u59ff\u6001\u5e8f\u5217\uff0c\u4ee5\u52a8\u4f5c\u6807\u7b7e a \u4e3a\u8f93\u5165\uff0c\u8f93\u51fa\u8fd0\u52a8\u6f5c\u4f0f\u7a7a\u95f4\u7684\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3\u3002\u5229\u7528\u91cd\u53c2\u6570\u5316\u6280\u5de7[37] \uff0c\u6211\u4eec\u4ece\u8fd9\u4e2a\u5206\u5e03\u4e2d\u62bd\u6837\u51fa\u4e00\u4e2a\u6f5c\u5411\u91cf z \u2208 M\uff0c\u5176\u4e2d MdRd\u3002\u9996\u5148\u5c06\u6240\u6709\u8f93\u5165\u59ff\u6001\u53c2\u6570(R)\u548c\u5e73\u79fb(D)\u7ebf\u6027\u5d4c\u5165\u5230 Rd \u7a7a\u95f4\u4e2d\u3002\u5f53\u6211\u4eec\u5c06\u4efb\u610f\u957f\u5ea6\u7684\u5e8f\u5217\u5d4c\u5165\u5230\u4e00\u4e2a\u6f5c\u5728\u7a7a\u95f4(\u5e8f\u5217\u7ea7\u5d4c\u5165)\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5408\u5e76\u65f6\u95f4\u7ef4\u6570\u3002\u5728\u5176\u4ed6\u9886\u57df\u4e2d\uff0c\u5df2\u7ecf\u5f15\u5165\u4e86[\u7c7b]\u4ee4\u724c\u7528\u4e8e\u6c60\u7684\u76ee\u7684\uff0c\u4f8b\u5982\uff0c\u5728\u5e26\u6709 BERT [12]\u7684 NLP \u4e2d\uff0c\u4ee5\u53ca\u6700\u8fd1\u5728\u5e26\u6709 ViT [13]\u7684\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u3002\u53d7\u6b64\u65b9\u6cd5\u7684\u542f\u53d1\uff0c\u6211\u4eec\u7c7b\u4f3c\u5730\u5728\u8f93\u5165\u524d\u9762\u52a0\u4e0a\u53ef\u5b66\u4e60\u7684\u4ee4\u724c\uff0c\u5e76\u4e14\u53ea\u4f7f\u7528\u76f8\u5e94\u7684\u7f16\u7801\u5668\u8f93\u51fa\u4f5c\u4e3a\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\u7684\u65b9\u6cd5\u3002\u4e3a\u6b64\uff0c\u6211\u4eec\u5728\u6bcf\u4e2a\u64cd\u4f5c\u4e2d\u5305\u62ec\u4e24\u4e2a\u989d\u5916\u7684\u53ef\u5b66\u4e60\u53c2\u6570: \u03bc \u6807\u8bb0 a \u548c \u03a3 \u6807\u8bb0 a\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u201c\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u201d\u3002\u6211\u4eec\u5c06\u5d4c\u5165\u7684\u59ff\u52bf\u5e8f\u5217\u9644\u52a0\u5230\u8fd9\u4e9b\u6807\u8bb0\u3002\u4ea7\u751f\u7684\u53d8\u538b\u5668\u7f16\u7801\u5668\u8f93\u5165\u662f\u4f4d\u7f6e\u7f16\u7801\u7684\u6b63\u5f26\u51fd\u6570\u5f62\u5f0f\u7684\u603b\u548c\u3002\u6211\u4eec\u901a\u8fc7\u53d6\u7f16\u7801\u5668\u7684\u524d\u4e24\u4e2a\u8f93\u51fa\u5bf9\u5e94\u4e8e\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u6765\u83b7\u5f97\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3 (\u5373\u53bb\u6389\u5176\u4f59\u7684\u6807\u8bb0)\u3002\u89e3\u7801\u5668\u3002\u7ed9\u5b9a\u4e00\u4e2a\u6f5c\u5728\u5411\u91cf z \u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a\uff0c\u89e3\u7801\u5668\u5728\u4e00\u6b21\u62cd\u6444\u4e2d\u5728\u7ed9\u5b9a\u7684\u6301\u7eed\u65f6\u95f4\u5185\u751f\u6210\u4e00\u4e2a\u771f\u5b9e\u7684\u4eba\u4f53\u8fd0\u52a8(\u5373\uff0c\u4e0d\u662f\u81ea\u56de\u5f52)\u3002\u6211\u4eec\u4f7f\u7528\u53d8\u538b\u5668\u89e3\u7801\u5668\u6a21\u578b\uff0c\u5176\u4e2d\u6211\u4eec\u63d0\u4f9b\u7684\u65f6\u95f4\u4fe1\u606f\u4f5c\u4e3a\u4e00\u4e2a\u67e5\u8be2(\u5728 T \u6b63\u5f26\u4f4d\u7f6e\u7f16\u7801\u7684\u5f62\u5f0f) \uff0c\u548c\u6f5c\u5728\u7684\u5411\u91cf\u7ed3\u5408\u7684\u884c\u52a8\u4fe1\u606f\uff0c\u4f5c\u4e3a\u5173\u952e\u548c\u503c\u3002\u4e3a\u4e86\u5408\u5e76\u52a8\u4f5c\u4fe1\u606f\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6dfb\u52a0\u4e00\u4e2a\u53ef\u5b66\u4e60\u7684\u504f\u89c1 b \u6807\u8bb0 a \u6765\u5c06\u6f5c\u5728\u8868\u5f81\u8f6c\u79fb\u5230\u4e00\u4e2a\u52a8\u4f5c\u4f9d\u8d56\u7684\u7a7a\u95f4\u3002\u53d8\u538b\u5668\u89e3\u7801\u5668\u8f93\u51fa\u4e00\u7cfb\u5217\u7684 T \u77e2\u91cf\uff0c\u4ece\u4e2d\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684 Pb1\uff0c. . \uff0cPbT \u7684\u7ebf\u6027\u6295\u5f71\u3002\u5229\u7528\u53ef\u5fae SMPL \u5c42\u83b7\u5f97\u7ed9\u5b9a\u7684\u4f4d\u59ff\u53c2\u6570\u4f5c\u4e3a\u89e3\u7801\u5668\u8f93\u51fa\u7684\u9876\u70b9\u548c\u5173\u8282\u3002

"},{"location":"pape_read/ACTOR/trans/#training","title":"Training","text":"

\u6211\u4eec\u5b9a\u4e49\u4e86\u51e0\u4e2a\u635f\u5931\u9879\u6765\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b\uff0c\u5e76\u5728\u7b2c 4.2 \u8282\u4e2d\u8fdb\u884c\u4e86\u6d88\u878d\u7814\u7a76\u3002 \u59ff\u52bf\u53c2\u6570 (LP) \u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5728\u5730\u9762\u5b9e\u51b5\u59ff\u52bf P1,... \u4e4b\u95f4\u4f7f\u7528 L2 \u635f\u5931\u3002 . . , PT \u548c\u6211\u4eec\u7684\u9884\u6d4b Pb1, . . . , PbT \u4f5c\u4e3a LP = PT t=1\u2225Pt \u2212 Pbt\u2225 2 2 \u3002 \u8bf7\u6ce8\u610f\uff0c\u6b64\u635f\u5931\u5305\u542b SMPL \u65cb\u8f6c\u548c\u6839\u5e73\u79fb\u3002 \u5f53\u6211\u4eec\u901a\u8fc7\u4e22\u5f03\u5e73\u79fb\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u672f\u8bed\u5206\u6210\u4e24\u90e8\u5206\uff1aLR \u548c LD\uff0c\u5206\u522b\u7528\u4e8e\u65cb\u8f6c\u548c\u5e73\u79fb\u3002

\u9876\u70b9\u5750\u6807 (LV) \u4e0a\u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5c06 SMPL \u59ff\u52bf Pt \u548c Pbt \u9988\u9001\u5230\u5177\u6709\u5e73\u5747\u5f62\u72b6\uff08\u5373 \u03b2 = \u20d70\uff09\u7684\u53ef\u5fae\u5206 SMPL \u5c42\uff08\u6ca1\u6709\u53ef\u5b66\u4e60\u53c2\u6570\uff09\u4ee5\u83b7\u5f97\u7f51\u683c Vt \u548c Vbt \u7684\u6839\u4e2d\u5fc3\u9876\u70b9\u3002 \u6211\u4eec\u901a\u8fc7\u4e0e\u5730\u9762\u5b9e\u51b5\u9876\u70b9 Vt \u6bd4\u8f83\u6765\u5b9a\u4e49 L2 \u635f\u5931\uff0c\u5373 LV = PT t=1\u2225Vt \u2212 Vbt\u2225 2 2 \u3002 \u6211\u4eec\u8fdb\u4e00\u6b65\u5728\u4e00\u7ec4\u66f4\u7a00\u758f\u7684\u70b9\u4e0a\u4f7f\u7528\u635f\u5931 LJ \u8fdb\u884c\u5b9e\u9a8c\uff0c\u4f8b\u5982\u901a\u8fc7 SMPL \u8054\u5408\u56de\u5f52\u5668\u83b7\u5f97\u7684\u8054\u5408\u4f4d\u7f6e Jbt\u3002 \u7136\u800c\uff0c\u6b63\u5982\u7b2c 4.2 \u8282\u6240\u793a\uff0c\u6211\u4eec\u6ca1\u6709\u5728\u6700\u7ec8\u6a21\u578b\u4e2d\u5305\u542b\u8be5\u672f\u8bed\u3002 KL\u635f\u5931\uff08LKL\uff09\u3002 \u4e0e\u6807\u51c6 VAE \u4e00\u6837\uff0c\u6211\u4eec\u901a\u8fc7\u9f13\u52b1\u6f5c\u5728\u7a7a\u95f4\u7c7b\u4f3c\u4e8e\u9ad8\u65af\u5206\u5e03\u6765\u89c4\u8303\u5316\u6f5c\u5728\u7a7a\u95f4\uff0c\u5176\u4e2d \u00b5 \u662f\u7a7a\u5411\u91cf\uff0c\u03a3 \u662f\u8eab\u4efd\u77e9\u9635\u3002 \u6211\u4eec\u6700\u5c0f\u5316\u7f16\u7801\u5668\u5206\u5e03\u548c\u8be5\u76ee\u6807\u5206\u5e03\u4e4b\u95f4\u7684 Kullback\u2013Leibler (KL) \u6563\u5ea6\u3002 \u7531\u6b64\u4ea7\u751f\u7684\u603b\u635f\u5931\u88ab\u5b9a\u4e49\u4e3a\u4e0d\u540c\u9879\u7684\u603b\u548c\uff1aL = LP + LV + \u03bbKLLKL\u3002 \u6211\u4eec\u51ed\u7ecf\u9a8c\u8bc1\u660e\u4e86\u5728\u6211\u4eec\u7684\u5b9e\u9a8c\u4e2d\u4f7f\u7528 \u03bbKL\uff08\u76f8\u5f53\u4e8e \u03b2-VAE [26] \u4e2d\u7684 \u03b2 \u9879\uff09\u8fdb\u884c\u52a0\u6743\u4ee5\u83b7\u5f97\u591a\u6837\u6027\u548c\u73b0\u5b9e\u4e3b\u4e49\u4e4b\u95f4\u7684\u826f\u597d\u6743\u8861\u7684\u91cd\u8981\u6027\uff08\u53c2\u89c1\u9644\u5f55 A.1 \u8282\uff09 ). \u5269\u4f59\u7684\u635f\u5931\u9879\u53ea\u662f\u7b80\u5355\u5730\u540c\u7b49\u52a0\u6743\uff0c\u901a\u8fc7\u8c03\u6574\u53ef\u80fd\u4f1a\u8fdb\u4e00\u6b65\u6539\u8fdb\u3002 \u6211\u4eec\u4f7f\u7528\u56fa\u5b9a\u5b66\u4e60\u7387\u4e3a 0.0001 \u7684 AdamW \u4f18\u5316\u5668\u3002 \u5c0f\u6279\u91cf\u5927\u5c0f\u8bbe\u7f6e\u4e3a 20\uff0c\u6211\u4eec\u53d1\u73b0\u6027\u80fd\u5bf9\u8fd9\u4e2a\u8d85\u53c2\u6570\u5f88\u654f\u611f\uff08\u53c2\u89c1\u9644\u5f55 A.2 \u8282\uff09\u3002 \u6211\u4eec\u5206\u522b\u5728 NTU-13\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b 2000\u30015000 \u548c 1000 \u4e2a\u65f6\u671f\u3002 \u603b\u7684\u6765\u8bf4\uff0c\u66f4\u591a\u7684\u65f6\u671f\u4f1a\u4ea7\u751f\u66f4\u597d\u7684\u6027\u80fd\uff0c\u4f46\u6211\u4eec\u505c\u6b62\u8bad\u7ec3\u4ee5\u4fdd\u6301\u8f83\u4f4e\u7684\u8ba1\u7b97\u6210\u672c\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e3a\u4e86\u5141\u8bb8\u66f4\u5feb\u7684\u8fed\u4ee3\u3001\u635f\u5931\u548c\u67b6\u6784\u7684\u6d88\u878d\uff0c\u6211\u4eec\u5728 NTU-13 \u4e0a\u8bad\u7ec3\u4e86 1000 \u4e2a epoch\uff0c\u5728 UESTC \u4e0a\u8bad\u7ec3\u4e86 500 \u4e2a epoch\u3002 \u5176\u4f59\u7684\u5b9e\u65bd\u7ec6\u8282\u53ef\u4ee5\u5728\u9644\u5f55\u7684 C \u8282\u4e2d\u627e\u5230\u3002

"},{"location":"pape_read/ACTOR/trans/#experiments","title":"Experiments","text":"

\u6682\u7565

"},{"location":"pape_read/ACTOR/trans/#conclusions","title":"Conclusions","text":"

\u6211\u4eec\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u57fa\u4e8e Transformer \u7684 VAE \u6a21\u578b\u6765\u5408\u6210\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u4eba\u4f53\u8fd0\u52a8\u3002\u6211\u4eec\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u5206\u6790\u6765\u8bc4\u4f30\u6211\u4eec\u63d0\u8bae\u7684\u65b9\u6cd5\u7684\u4e0d\u540c\u7ec4\u6210\u90e8\u5206\u3002 \u6211\u4eec\u5728\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u751f\u6210\u65b9\u9762\u83b7\u5f97\u4e86\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff0c\u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\u6709\u4e86\u663e\u7740\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u63a2\u7d22\u4e86\u8fd0\u52a8\u53bb\u566a\u548c\u52a8\u4f5c\u8bc6\u522b\u4e2d\u7684\u5404\u79cd\u7528\u4f8b\u3002 \u6211\u4eec\u65b9\u6cd5\u7684\u4e00\u4e2a\u7279\u522b\u5438\u5f15\u4eba\u7684\u7279\u6027\u662f\u5b83\u5728\u5e8f\u5217\u7ea7\u6f5c\u5728\u7a7a\u95f4\u4e0a\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u672a\u6765\u7684\u5de5\u4f5c\u53ef\u4ee5\u5229\u7528\u6211\u4eec\u7684\u6a21\u578b\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u6216\u52a8\u4f5c\u8bc6\u522b\u95ee\u9898\u65bd\u52a0\u5148\u9a8c\u3002

"},{"location":"pape_read/EG3D/","title":"[EG3D] Efficient Geometry-aware 3D Generative Adversarial Networks","text":"

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

3DV Generation

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/EG3D/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/EG3D/#tri-plane-hybrid-3d-representation","title":"Tri-plane hybrid 3D representation","text":"

\u8ba8\u8bba\u4e00\u4e0b NeRF \u548c Tri-plane hybrid 3D representation \u7684\u5173\u7cfb\u3002

NeRF \u6309 ray \u4f53\u79ef\u6e32\u67d3\u8fc7\u7a0b\u4e2d\u91c7\u6837\u7684\u70b9\u4ece\u8bad\u7ec3\u597d\u7684 MLP \u91cc\u62ff\uff1b\u800c EG3D \u5219\u662f\u5f97\u5230\u4e09\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\uff0c\u6bcf\u4e00\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\u90fd\u662f\u6cbf\u7740\u6d88\u5931\u7684\u90a3\u4e2a\u7ef4\u5ea6\u805a\u5408\u5f97\u5230\u7684\uff0c\u53ef\u4ee5\u770b\u4f5c\u662f\u62ff\u5230\u4e86\u7a7a\u95f4\u4e2d\u4e09\u6761\u6b63\u4ea4\u7684\u7ebf\u7684\u7279\u5f81\uff0c\u800c\u4e4b\u540e\u7528\u4e00\u4e2a\u8f7b\u91cf MLP \u53bb\u4ece\u8fd9\u4e09\u4e2a\u7279\u5f81\u5411\u91cf\u91cc\u628a\u8fd9\u4e2a\u70b9\u7684\u989c\u8272\u5bc6\u5ea6\u62ff\u51fa\u6765\uff0c\u7c7b\u4f3c\u4e8e\u6c42\u4e09\u6761\u7ebf\u7684\u4ea4\u70b9\u3002

\u76f8\u6bd4\u4e8e NeRF \u5c06\u6570\u636e\u53c2\u6570\u5316\uff0c\u6bcf\u6b21\u67e5\u8be2\u90fd\u9700\u8981\u8d70\u4e00\u8fb9 MLP\uff0cEG3D Sec3 \u5219\u663e\u793a\u7684\u5c06\u7279\u5f81\u5b58\u5728\u4e09\u4e2a\u4e8c\u7ef4\u8868\u91cc\uff0c\u6bcf\u6b21\u67e5\u8be2\u53ea\u9700\u8981 O(1) \u7684\u5f00\u9500\uff0c\u56e0\u6b64\u6548\u7387\u4e3b\u8981\u53d6\u51b3\u4e8e\u540e\u9762\u90a3\u4e2a\u8f7b\u91cf MLP\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6548\u7387\u4e0a\u7684\u63d0\u9ad8\u3002

\u800c\u5b9e\u73b0\u6548\u679c\u4e0a\uff0c\u6211\u80e1\u731c EG3D \u7684\u65b9\u6cd5\u597d\u7684\u539f\u56e0\uff1a

  1. \u7531\u4e8e\u4f7f\u7528\u4e86\u5ea7\u6807\u6295\u5f71\uff0c\u6240\u4ee5\u76f8\u5bf9\u4e8e NeRF \u7684\u53c2\u6570\u8868\u8fbe\uff0cEG3D \u5bf9\u4e8e\u67d0\u4e2a\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e\u5177\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\uff0c\u56e0\u800c\u53ef\u80fd\u5bf9\u7ec6\u8282\u7684\u628a\u63a7\u7ea6\u675f\u66f4\u76f4\u63a5\uff0c\u6216\u8005\u8bf4\u76f4\u89c9\u4e0a\u6211\u611f\u89c9 EG3D \u8fd9\u79cd\u8868\u8fbe\u5bf9\u201c\u7279\u5f81-\u5ea7\u6807\u201d\u7684\u5173\u7cfb\u66f4\u5177\u4f53\uff1b
  2. \u4e09\u4e2a\u6b63\u4ea4\u65b9\u5411\u585e\u8fdb\u5c0f MLP \u91cc\u5b66\uff0c\u53ef\u80fd\u4f1a\u66f4\u5bb9\u6613\u8ba9 MLP \u77e5\u9053\u53bb\u627e\u4ea4\u70b9\u9644\u8fd1\u7684\u90a3\u4e9b\u70b9\u53bb\u5b66\u4e60\uff0c\u611f\u89c9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5728\u4e00\u4e2a\u957f\u5f97\u50cf\u66fc\u54c8\u987f\u8ddd\u79bb\u90a3\u79cd\u7acb\u65b9\u4f53\u4e00\u6837\u7684\u7a7a\u95f4\u91cc\u53bb\u5b66\u4e60\u5468\u56f4\u7684\u4fe1\u606f\uff1b

\u53c2\u8003\u8d44\u6599

"},{"location":"pape_read/MAS/","title":"[MAS] Multi-view Ancestral Sampling for 3D Motion Generation Using 2D Diffusion","text":"

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

3DV Motion Diffusion

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/MAS/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":"

\u5229\u7528\u4e00\u4e2a\u5728 2D \u5355\u76ee\u6570\u636e\u96c6\u4e0a train \u51fa\u6765\u7684 diffusion model \u505a 3D Motion \u7684\u751f\u6210\u3002

"},{"location":"pape_read/NSM/","title":"[NSM] Neural State Machine for Character-Scene Interactions","text":"

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

3DV Human-Motion Scene-Aware

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/NSM/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NSM/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

NSM \u63d0\u51fa\u4e00\u79cd\u65b0\u7684\u76ee\u6807\u5bfc\u5411\u81ea\u56de\u5f52\u6a21\u578b\u6765\u89e3\u51b3\u4eba\u4f53\u52a8\u4f5c\u751f\u6210\u95ee\u9898\uff0c\u80fd\u5b9e\u73b0\u8868\u73b0\u826f\u597d\u7684\u5750\u3001\u6301\u7269\u3001\u907f\u969c\u7684\u884c\u4e3a\u3002\u8be5\u95ee\u9898\u4e3b\u8981\u96be\u70b9\u5728\u4e8e\uff0c\u5b8c\u6210\u4e00\u9879\u4efb\u52a1\u6240\u9700\u8981\u751f\u6210\u7684\u52a8\u4f5c\u5e8f\u5217\u4e2d\u5305\u542b\u5468\u671f\u6027\u548c\u975e\u5468\u671f\u6027\u7684\u90e8\u5206\uff0c\u5e76\u4e14\u9700\u8981\u5bf9\u5468\u56f4\u73af\u5883\u8fdb\u884c\u611f\u77e5\u3002\u901a\u8fc7\u4f7f\u7528\u4e8c\u7ef4\u76f8\u4f4d\u8868\u793a\u7684 Kronecker \u4e58\u79ef\u3001\u4e00\u79cd\u53cc\u5411\u63a7\u5236\uff08\u76ee\u6807\u4e2d\u5fc3\u548c\u81ea\u6211\u4e2d\u5fc3\uff09\u89c4\u5219\u3001\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\u548c\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7b49\u6280\u672f\u6765\u589e\u5f3a\u6548\u679c\uff0c\u66f4\u5b8f\u89c2\u7684\u8bf4\uff0cNSM \u4f7f\u7528\u4e86\u4e00\u79cd\u76ee\u6807\u9a71\u52a8\u7684\u6a21\u578b\u6765\u5b9e\u73b0\u6548\u679c\u826f\u597d\u7684\u52a8\u4f5c\u751f\u6210\u3002

"},{"location":"pape_read/NSM/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u6574\u4e2a\u4efb\u52a1\u53ef\u4ee5\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u7b2c\u4e00\u90e8\u5206\u662f\u5bfb\u8def\u81f3\u76ee\u6807\uff0c\u8981\u6c42\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u89c4\u907f\u969c\u788d\u5e76\u627e\u5230\u76ee\u6807\u5e76\u4e14\u6700\u7ec8\u9762\u671d\u76ee\u6807\uff0c\u8fd9\u4e00\u90e8\u5206\u4e3b\u8981\u7684\u96be\u70b9\u5c31\u662f\u9700\u8981\u80fd\u591f\u5bf9\u73af\u5883\u8fdb\u884c\u611f\u77e5\uff0c\u4e3a\u6b64 NSM \u56e2\u961f\u9009\u62e9\u4e86\u4f53\u7d20\u8868\u8fbe\uff0c\u5e76\u8bbe\u8ba1\u4e86\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u2014\u2014\u5176\u8303\u56f4\u8986\u76d6\u4ee5\u4ee3\u7406\u4eba\u4e3a\u4e2d\u5fc3\u7684\u4e00\u4e2a\u5706\u67f1\u5f62\u533a\u57df\uff0c\u533a\u57df\u5185\u7684\u6240\u6709\u5177\u6709\u4f53\u7d20\u7684\u7269\u4f53\u90fd\u4f1a\u88ab\u7403\u5f62\u91c7\u6837\u4e3a\u4e00\u4e2a 0~1 \u548c\u4e4b\u95f4\u7684\u503c\uff0c\u5982\u8bba\u6587\u4e2d Fig5\u3002\u800c\u8fd9\u4e9b\u503c\u88ab\u79f0\u4e3a\u73af\u5883\u8f93\u5165\uff0c\u5728\u6a21\u578b\u7684 pipeline \u4e2d\u4f5c\u4e3a\u8f93\u5165\u3002\u73af\u5883\u8f93\u5165\u6709\u6548\u589e\u52a0\u4ee3\u7406\u4eba\u5bf9\u73af\u5883\u7684\u7406\u89e3\u80fd\u529b\uff0c\u6539\u5584\u4e86\u8bf8\u5982\u4e0e\u76ee\u6807\u4ea4\u4e92\u65f6\u4ece\u80cc\u540e\u7a7f\u900f\u6905\u5b50\u5750\u4e0b\u7684\u8fd9\u79cd\u95ee\u9898\uff0c\u5982 Fig14\u3002\u6b64\u5916\uff0cNSM \u56e2\u961f\u5b66\u4e60\u4e86 PFNN\uff0c\u4f7f\u7528 phase \u6765\u5b9e\u73b0\u72b6\u6001\u673a\uff0c\u4f46\u521b\u65b0\u6027\u7684\u4f7f\u7528\u4e86\u6807\u6ce8\u79bb\u6563\u7279\u5b9a\u76f8\u4f4d\uff08\u5982\u884c\u8d70\u65f6\u5de6\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\(2k\\pi\\)\uff0c\u53f3\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\((2k+1)\\pi\\)\uff0c\u800c\u4e2d\u95f4\u8fc7\u7a0b\u901a\u8fc7\u63d2\u503c\u8ba1\u7b97\uff09\uff0c\u901a\u8fc7\u7f51\u7edc\u5b66\u4e60\u63d2\u503c\u76f8\u4f4d\u7684\u5f62\u5f0f\uff0c\u89e3\u51b3\u4e86 PFNN \u4e2d\u5148\u9a8c\u76f8\u4f4d\u5e26\u6765\u7684\uff0c\u4ee3\u7406\u4eba\u8d8b\u5411\u4e8e\u4e0d\u884c\u52a8\u7684\u7f3a\u70b9\u3002\u800c\u5728\u5bfb\u627e\u76ee\u6807\u65f6\uff0c\u4f20\u7edf\u7684\u5355\u5411\u8868\u8fbe\u5bb9\u6613\u4ea7\u751f\u8bef\u5dee\u7d2f\u8ba1\uff0c\u5bfc\u81f4\u6700\u7ec8\u76ee\u6807\u5b9a\u4f4d\u504f\u79fb\uff0cNSM \u56e2\u961f\u4f7f\u7528\u76ee\u6807\u4e2d\u5fc3\u3001\u81ea\u6211\u4e2d\u5fc3\u53cc\u5411\u8868\u8fbe\uff0c\u663e\u8457\u6539\u5584\u4e86\u8be5\u95ee\u9898\uff0c\u5b9e\u9a8c\u6548\u679c\u5982 Fig11 \u4e0a\u56fe\u3002

\u7b2c\u4e8c\u90e8\u5206\u9700\u8981\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u7684\u548c\u76ee\u6807\u8fdb\u884c\u4ea4\u4e92\uff0c\u5982\u5728\u6905\u5b50\u4e0a\u5750\u4e0b\u3001\u6253\u5f00\u95e8\u3001\u7a7f\u8fc7\u5899\u4e0a\u7684\u6d1e\u3002\u8fd9\u9700\u8981\u4ee3\u7406\u4eba\u5bf9\u4ea4\u4e92\u76ee\u6807\u5177\u6709\u7cbe\u786e\u7684\u611f\u77e5\uff0c\u4e0e\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7c7b\u4f3c\uff0cNSM \u4e5f\u63d0\u51fa\u4e86\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\uff0c\u4e3a\u4e86\u63d0\u9ad8\u7cbe\u5ea6\uff0c\u4f53\u7d20\u4f20\u611f\u5668\u4ee5 8x8x8 \u7684\u4f53\u7d20\u4e3a\u5355\u4f4d\uff0c\u540c\u6837\u91c7\u6837\u4e3a 0~1 \u4e4b\u95f4\u7684\u503c\uff0c\u88ab\u4f5c\u4e3a\u6a21\u578b\u7684\u4e00\u90e8\u5206\u8f93\u5165\u3002

\u6574\u4f53\u6a21\u578b\u4f7f\u7528\u4e86 MoE \u6280\u672f\uff0c\u5373\u591a\u4e13\u5bb6\u6a21\u578b\uff0c\u901a\u8fc7 Gating Networks \u6765\u8ba1\u7b97\u5176\u6df7\u5408\u6743\u91cd\uff0c\u5176\u8f93\u5165\u4e3b\u8981\u4e3a\u5f53\u524d\u7684\u52a8\u4f5c\u6807\u7b7e\u548c\u4e8c\u7ef4\u76f8\u4f4d\uff08\u4ee5\u89e3\u51b3\u4e00\u7ef4\u76f8\u4f4d\u5e26\u6765\u7684\u4e0d\u53ef\u5fae\u7684\u95ee\u9898\uff09\u3002\u6a21\u578b\u9884\u6d4b\u7f51\u7edc\u5206\u4e3a\u7f16\u7801\u6a21\u5757\u548c\u9884\u6d4b\u6a21\u5757\u4e24\u90e8\u5206\uff0c\u6a21\u578b\u8f93\u5165\u5305\u542b\u56db\u4e2a\u90e8\u5206\uff1a\u5173\u4e8e\u4ee3\u7406\u4eba\u7684\u5f53\u524d\u5e27\uff08\u548c\u7a97\u53e3\u5185\u9644\u8fd1\u5e27\uff09\u7684\u4fe1\u606f\u3001\u76ee\u6807\u4fe1\u606f\uff08\u4f4d\u7f6e\u3001\u671d\u5411\u3001\u4ea4\u4e92\u52a8\u4f5c\u6807\u7b7e\uff09\u4ee5\u53ca\u5148\u524d\u63d0\u5230\u7684\u73af\u5883\u8f93\u5165\u548c\u4ea4\u4e92\u8f93\u5165\u3002\u5c06\u8f93\u51fa\u9884\u6d4b\u540e\u7684\u4ee3\u7406\u4eba\u52a8\u4f5c\u4fe1\u606f\u3001\u884c\u52a8\u8f68\u8ff9\u4fe1\u606f\u3001\u76f8\u4f4d\u4fe1\u606f\u3001\u4ea4\u4e92\u63a5\u89e6\u70b9\u4fe1\u606f\u7b49\u3002\u800c\u8fd9\u6837\u7684\u8bbe\u8ba1\u7ed9\u4e86\u6a21\u578b\u826f\u597d\u7684\u5728\u4e24\u79cd\u7528\u6237\u64cd\u4f5c\u6a21\u5f0f\uff08\u624b\u52a8\u63a7\u5236\u79fb\u52a8\u65b9\u5411\u548c\u53ea\u6307\u5b9a\u4ea4\u4e92\u76ee\u6807\uff09\u4e4b\u95f4\u5207\u6362\u7684\u80fd\u529b\uff0c\u53ea\u9700\u8981\u6539\u53d8\u76ee\u6807\u8f93\u5165\u7684\u5b9a\u4e49\u5373\u53ef\u65e0\u7f1d\u8854\u63a5\u3002

"},{"location":"pape_read/NSM/#\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","title":"\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","text":"

\u8fd9\u79cd\u8bbe\u8ba1\u901a\u8fc7\u4e86\u5b9e\u9a8c\u9a8c\u8bc1\uff0c\u5728 NSM \u56e2\u961f\u8bbe\u8ba1\u7684\u4e00\u79cd\u7279\u6b8a\u60c5\u51b5\u4e0b\u8868\u73b0\u826f\u597d\u2014\u2014\u5750\u4e0a\u4e00\u5f20\u534a\u63d2\u8fdb\u684c\u5b50\u7684\u6905\u5b50\u3002\u5e76\u4e14\u5728\u4e0e\u5176\u4ed6\u6a21\u578b\u7684\u5bf9\u6bd4\u4e2d\uff0c\u5728\u54cd\u5e94\u65f6\u95f4\u3001\u6ed1\u6b65\uff08\u4e0d\u81ea\u7136\u7684\u8d70\u52a8\uff09\u8868\u73b0\u3001\u4f4d\u7f6e\u7cbe\u5ea6\u3001\u65cb\u8f6c\u7cbe\u5ea6\u7b49\u65b9\u9762\u603b\u4f53\u8868\u73b0\u826f\u597d\uff0c\u51e0\u4e4e\u5b8c\u5168\u8d85\u8fc7\u4e86\u4ee5\u5f80\u7684\u540c\u7c7b\u5de5\u4f5c\uff0c\u6587\u7ae0\u4e5f\u5bf9\u8868\u73b0\u826f\u597d\u7684\u539f\u56e0\u8fdb\u884c\u4e86\u4e00\u4e9b\u5206\u6790\u3002

LSTM \u6a21\u578b\u901a\u8fc7\u751f\u6210\u5927\u91cf\u77ed\u7247\u6bb5\u7684\u52a8\u4f5c\u6765\u589e\u5f3a\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e5f\u662f\u901a\u8fc7\u5c06\u8fc7\u7a0b\u4ece\u8fd9\u4e9b\u7247\u6bb5\u4e2d\u5b66\u4e60\u7684\u5185\u5bb9\u8fdb\u884c\u7ec4\u5408\u5b9e\u73b0\uff0c\u56e0\u6b64\u6269\u5c55\u6027\u8f83\u5dee\uff0c\u4e0d\u9002\u5408\u8fd0\u52a8\u6570\u636e\u4e0d\u591f\u5145\u5206\u7684\u60c5\u51b5\u3002

\u800c\u4e0e PFNN \u76f8\u6bd4\uff0cNSM \u9650\u5236\u66f4\u5c11\uff0c\u56e0\u4e3a PFNN \u7684\u5148\u9a8c\u7684\u5916\u90e8 phase \u63a7\u5236\u673a\u5236\u8ba9\u5b83\u65e0\u6cd5\u5f88\u597d\u7684\u89e3\u51b3\u5bf9\u975e\u5468\u671f\u6027\u52a8\u4f5c\u751f\u6210\u3002

\u800c MANN \u867d\u7136\u76f8\u5e94\u901f\u5ea6\u5feb\uff0c\u4f46\u5b58\u5728\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\uff0c\u5e76\u4e14\u5728\u63a7\u5236\u6a21\u5f0f\u53d8\u5316\u7684\u65f6\u5019\u52a8\u4f5c\u5341\u5206\u50f5\u786c\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u52a8\u4f5c\u50f5\u786c\u800c\u4ee3\u7406\u4eba\u7684\u6839\u90e8\u79fb\u52a8\u4ecd\u7136\u5b58\u5728\uff0c\u624d\u51fa\u73b0\u4e86\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\u3002

"},{"location":"pape_read/NSM/#\u6570\u636e\u589e\u5f3a","title":"\u6570\u636e\u589e\u5f3a","text":"

\u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u5f3a\u6a21\u578b\u7684\u53ef\u6269\u5c55\u6027\u548c\u9002\u5e94\u6027\uff0cNSM \u56e2\u961f\u4e5f\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u6570\u636e\u589e\u5f3a\u65b9\u6848\u3002\u6784\u5efa\u573a\u666f\u540e\u91c7\u96c6\u4e00\u7cfb\u5217\u573a\u666f\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u901a\u8fc7\u955c\u50cf\u6765\u589e\u52a0\u6570\u636e\u4f53\u91cf\uff0c\u4eba\u5de5\u6807\u8bb0\u52a8\u4f5c\u6807\u7b7e\u548c\u76f8\u4f4d\u6807\u7b7e\u3002\u63a5\u4e0b\u6765\u901a\u8fc7\u6570\u636e\u589e\u5f3a\u7cfb\u7edf\u6765\u589e\u5f3a\u6570\u636e\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5c31\u662f\u4f7f\u7528 ShapeNet \u6570\u636e\u96c6\u4e2d\u7b26\u5408\u6a21\u578b\u7684\u7269\u4f53\u4e0d\u65ad\u66ff\u6362\u8bad\u7ec3\u7269\u4f53\uff0c\u5e76\u8fdb\u884c\u53d8\u6362\uff0c\u540c\u65f6\u8981\u6ce8\u610f\u66f4\u65b0\u63a5\u89e6\u70b9\u548c\u4ea4\u4e92\u65b9\u5411\u7b49\u3002\u4ee5\u6b64\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u63d0\u9ad8\u6a21\u578b\u8303\u7528\u6027\u3002

"},{"location":"pape_read/NeRF/","title":"[NeRF] Representing Scenes as Neural Radiance Fields for View Synthesis","text":"

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

3DV Reconstruction

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/NeRF/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NeRF/#\u8d21\u732e","title":"\u8d21\u732e","text":"
  1. \u5c06\u590d\u6742\u96c6\u5408\u5f62\u72b6\u548c\u6750\u8d28\u7684\u8fde\u7eed\u573a\u666f\u8868\u8fbe\u4e3a 5D \u795e\u7ecf\u8f90\u5c04\u573a\u7684\u65b9\u6cd5\uff0c\u5c06\u5176\u53c2\u6570\u5316\u4e3a\u57fa\u672c\u7684 MLP \u7f51\u7edc\uff1b
  2. \u57fa\u4e8e\u7ecf\u5178\u4f53\u79ef\u6e32\u67d3\u6280\u672f\u7684\u53ef\u5fae\u5206\u6e32\u67d3\u7a0b\u5e8f\uff0c\u6211\u4eec\u7528\u5b83\u4ece\u6807\u51c6 RGB \u56fe\u50cf\u4e2d\u4f18\u5316\u8fd9\u4e9b\u8868\u793a\u3002\u8fd9\u5305\u62ec\u4e00\u79cd\u5206\u5c42\u91c7\u6837\u7b56\u7565\uff0c\u5c06 MLP \u7684\u5bb9\u91cf\u5206\u914d\u7ed9\u5177\u6709\u53ef\u89c1\u573a\u666f\u5185\u5bb9\u7684\u7a7a\u95f4\uff1b
  3. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\uff0c\u5c06 5D \u5ea7\u6807\u6620\u5c04\u5230\u66f4\u9ad8\u7ef4\u7684\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u9891\u7387\u7684\u573a\u666f\u5185\u5bb9\u7684\u8868\u793a\uff1b

\u63d0\u51fa\u7684\u8868\u793a\u65b9\u6cd5\u6709\u5982\u4e0b\u597d\u5904\uff1a

"},{"location":"pape_read/NeRF/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u4f7f\u7528\u5982\u4e0b\u4e00\u4e2a\u201c\u51fd\u6570\u201d\u6765\u8868\u793a\u4e00\u4e2a\u9759\u6001\u573a\u666f\uff1a

\\[ \\begin{aligned} & F_{\\Theta}:(\\mathrm{x}, \\mathrm{d}) \\rightarrow (\\mathrm{c}, \\sigma) \\\\ & \\text{where } \\mathrm{x} = (x,y,z), \\; \\mathrm{d} \\text{ is a 3D Cartesian unit vector}, \\; \\mathrm{c} = (r,g,b), \\; \\sigma \\text{ is the density}. \\end{aligned} \\]

\u4e3a\u4e86\u4fdd\u8bc1\u591a\u89c6\u89d2\u4e0b\u89c2\u5bdf\u5230\u7684\u5185\u5bb9\u5177\u6709\u4e00\u81f4\u6027\uff0c\u505a\u5982\u4e0b\u7ea6\u675f\uff1a

\u5229\u7528\u5982\u4e0a\u201c\u51fd\u6570\u201d\uff0c\u5177\u4f53\u6765\u8bf4\u64cd\u4f5c\u5982\u4e0b\uff1a

\u4e3a\u4e86\u80fd\u591f\u8ba9 MLP \u8868\u793a\u66f4\u9ad8\u9891\u7387\u7684\u51fd\u6570\uff0c\u5f15\u5165\u4e86\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u3002

\u6b64\u5916\uff0c\u5173\u4e8e\u6e32\u67d3\uff0c\u4f7f\u7528\u7684\u662f\u4f20\u7edf\u7684\u4f53\u79ef\u6e32\u67d3\u65b9\u6cd5\uff0c\u7d2f\u79ef\u4e00\u6761\u5149\u7ebf\u4e0a\u7684\u989c\u8272\u548c\u5bc6\u5ea6\uff0c\u5f97\u5230\u6700\u7ec8\u7684\u989c\u8272\uff0c\u6240\u4f7f\u7528\u7684\u516c\u5f0f\u5982\u4e0b\uff1a

\\[ \\begin{aligned} & \\mathrm{C}(\\mathrm{r})= \\int_{t_n}^{t_f} T(t) \\cdot \\sigma\\left( \\mathrm{r}(t) \\right) \\cdot \\mathrm{c} \\left( \\mathrm{r}(t), \\mathrm{d} \\right) \\cdot \\mathrm{d}t \\end{aligned},\\;\\; \\text{where } T(t) = \\exp\\left( -\\int_{t_n}^t \\sigma\\left(\\mathrm{r}(s)\\right) \\; \\mathrm{d}s \\right) \\]

\u5bf9\u8fd9\u4e2a\u5f0f\u5b50\u7a0d\u4f5c\u89e3\u91ca\uff0c\\(t_n\\) \u548c \\(t_f\\) \u5206\u522b\u8868\u793a near \u548c far \u7684\u5149\u7ebf\u8fb9\u754c(bound)\uff0c\u5149\u7ebf\u7ed3\u679c \\(C(\\mathrm{r})\\) \u901a\u8fc7\u7d2f\u79ef\u8fd9\u4e24\u4e2a\u7aef\u70b9\u4e4b\u95f4\u7684\u6309\u6743\u7d2f\u79ef\u5f97\u5230\uff0c\u5176\u6743\u91cd\u4e3a \\(T(t)\\)\uff0c\u89c2\u5bdf\u5176\u5b9a\u4e49\u5f0f\u53ef\u53d1\u73b0\uff0c\u968f\u7740 \\(t\\) \u7684\u589e\u5927\uff0c\\(T(t) \\rightarrow 0\\)\uff0c\u5373\u7ea6\u5f80\u540e\u7684\u70b9\u7ea6\u4e0d\u5bb9\u6613\u88ab\u770b\u5230\uff0c\u8fd9\u4e5f\u662f\u7b26\u5408\u5e38\u8bc6\u7684\u3002\u800c\u7d2f\u79ef\u7684\u5bf9\u8c61\u4e3a \\(\\sigma(\\mathrm{r}(t)) \\cdot \\mathrm{c}(\\mathrm{r}(t), \\mathrm{d})\\)\uff0c\u5373\u5bc6\u5ea6\u548c\u989c\u8272\u7684\u4e58\u79ef\uff0c\u6ce8\u610f\u4e24\u4e2a\u53c2\u6570\u2014\u2014\u5bc6\u5ea6\u8868\u5f81\u5f62\u72b6\u7279\u5f81\uff0c\u4ec5\u4e0e\u7a7a\u95f4\u4f4d\u7f6e\u6709\u5173\uff1b\u800c\u989c\u8272\u540c\u65f6\u4e0e\u89c2\u5bdf\u89d2\u5ea6\u6709\u5173\uff0c\u8fd9\u6697\u542b\u7740\u5149\u5f71\u4fe1\u606f\u3002

\u7136\u800c\uff0c\u7531\u4e8e\u79ef\u5206\u7684\u64cd\u4f5c\u6027\u5dee\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u79cd\u79bb\u6563\u7684\u62bd\u6837\u7d2f\u79ef\u6765\u5b9e\u73b0\u8fd9\u4ef6\u4e8b\uff0c\u5c06\u5149\u7ebf\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\uff0c\u6309\u5747\u5300\u5206\u5e03\u5728\u6bcf\u4e2a\u70b9\u91c7\u6837\u4e00\u4e2a\u70b9\uff0c\u8fdb\u884c\u7d2f\u79ef\uff0c\u5373\u5bf9\u4e8e\u533a\u95f4 \\(t_i\\)\uff1a

\\[ t_i \\sim U \\left[ t_n + \\frac{i-1}{N} \\left( t_f - t_n \\right), t_n + \\frac{i}{N} \\left( t_f - t_n \\right) \\right] \\]

\u5bf9\u5e94\u7684\u989c\u8272\u8ba1\u7b97\u516c\u5f0f\u6539\u5199\u4e3a\uff1a

\\[ \\begin{aligned} \\hat{C}(\\mathrm{r}) = \\sum_{i=1}^{N} T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\cdot \\mathrm{c}_i, \\;\\; \\text{where } T_i = \\exp\\left( -\\sum_{j=1}^{i-1} \\sigma_j \\delta_j \\right) \\text{ and } \\delta_i = t_{i+1} - t_i \\end{aligned} \\]

\u5176\u4e2d\uff0c\\(\\sigma(\\mathrm{r}(t))\\) \u522b\u66ff\u6362\u4e3a \\((1-\\exp(-\\sigma_i\\delta_i))\\)\uff0c\u5728\u7ed3\u5408\u4e86\u533a\u95f4\u957f\u5ea6\u7684\u60c5\u51b5\u4e0b\u53c8\u91cd\u65b0\u5c06\u5bc6\u5ea6\u6620\u5c04\u56de\u4e86 \\([0,1]\\)\u3002

\u5728\u4e4b\u540e\u7684\u7b56\u7565\u4e2d\uff0c\u8fd8\u4f1a\u5bf9\u91c7\u6837\u89c4\u5219\u505a\u8fdb\u4e00\u6b65\u4f18\u5316\u3002

\u81f3\u6b64\u4e3a\u6b62\u662f NeRF \u4e3b\u8981\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u8fd9\u4e9b\u65b9\u6cd5\u4ecd\u7136\u4e0d\u8db3\u4ee5\u8ba9\u5b83\u8fbe\u5230\u6700\u5148\u8fdb\u7684\u6548\u679c\uff0c\u56e0\u6b64\u8fd9\u91cc\u5f15\u5165\u4e24\u4e2a\u6539\u8fdb\u63aa\u65bd\u3002

  1. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u6765\u4f7f MLP \u80fd\u591f\u652f\u6301\u66f4\u9ad8\u9891\u7684\u56fe\u50cf\u4fe1\u606f\uff1b
  2. \u4f7f\u7528\u7ed3\u6784\u5316\u7684\u91c7\u6837(hierarchical sampling)\u4f7f\u80fd\u591f\u66f4\u6709\u6548\u5730\u5bf9\u8fd9\u79cd\u9ad8\u9891\u8868\u793a\u8fdb\u884c\u91c7\u6837\uff1b

\u4f4d\u7f6e\u7f16\u7801\u4e3a\u4e00\u4e2a \\(\\gamma : \\R \\rightarrow \\R^{2L}\\)\uff1a

\\[ \\gamma(p) = \\left( \\sin(2^0 \\pi p), \\cos(2^0 \\pi p), \\cdots, \\sin(2^{L-1} \\pi p), \\cos(2^{L-1} \\pi p) \\right) \\]

\u5c06 \\(\\gamma(\\cdot)\\) \u5e94\u7528\u4e8e \\(\\mathrm{x}\\) \u7684\u4e09\u4e2a\u5206\u91cf\uff08\u88ab\u6807\u51c6\u5316\u5230 \\([-1,1]\\) \u4e0a\uff09\u548c \\(\\mathrm{d}\\) \u7684\u4e24\u4e2a\u5206\u91cf\u4e0a\uff0c\u5b9e\u73b0\u7ef4\u5ea6\u63d0\u5347\uff0c\u4ee5\u6b64\u4f18\u5316\u5728\u9ad8\u9891\u5185\u5bb9\u4e0a\u7684\u8868\u73b0\u3002\u5728\u6587\u7ae0\u4e2d\u63d0\u5230\uff0c\\(L_\\mathrm{x} = 10, L_\\mathrm{d} = 4\\)\u3002

\u800c\u5206\u5c42\u91c7\u6837\uff0c\u9488\u5bf9\u7684\u662f\u4e4b\u524d\u7684\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\u8fdb\u884c\u5747\u5300\u91c7\u6837\u3002\u663e\u7136\uff0c\u67d0\u4e9b\u201c\u7a7a\u6c14\u201d\u533a\u57df\u548c\u88ab\u906e\u6321\u7684\u533a\u57df\u5bf9\u6e32\u67d3\u7ed3\u679c\u5e76\u4e0d\u4f1a\u6709\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u5728\u7a7a\u95f4\u4e0a\u8fd9\u4e9b\u5185\u5bb9\u53ef\u80fd\u5360\u4e86\u7edd\u5927\u90e8\u5206\uff08\u5c24\u5176\u662f\u6ca1\u6709\u534a\u900f\u660e\u7269\u4f53\u7684\u60c5\u51b5\u4e0b\uff09\uff0c\u5747\u5300\u91c7\u6837\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5c31\u663e\u5f97\u975e\u5e38\u4f4e\u6548\u3002

\u5206\u5c42\u91c7\u6837\u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u9996\u5148\u4f7f\u7528\u4e00\u4e2a\u7c97\u7565(coarse)\u7684\u7f51\u7edc\uff0c\u5229\u7528 \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u7684\u5747\u5300\u91c7\u6837\u70b9\uff0c\u901a\u8fc7\u8ba1\u7b97 \\(\\hat{w}_i = normalize\\left( T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\right)\\) \u5f97\u5230\u6bcf\u4e2a\u70b9\u7684\u6743\u91cd\uff0c\u800c\u8fd9\u4e2a\u6743\u91cd\u5219\u53cd\u5e94\u4e86\u6bcf\u4e00\u4e2a\u91c7\u6837\u70b9\u9644\u8fd1\u6709\u6548\u70b9\u7684\u5206\u5e03\u60c5\u51b5\uff0c\u53ef\u4ee5\u770b\u4f5c\u4e00\u4e2a\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(PDF)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u8fd9\u4e2a\u5206\u5e03\u7684\u57fa\u7840\u4e0a\u518d\u91c7\u6837\u5f97\u5230 \\(N_f\\) \u4e2a\u7cbe\u7ec6(fine)\u91c7\u6837\u70b9\uff0c\u4e0e \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u70b9\u4e00\u8d77\u653e\u5230\u7cbe\u7ec6(fine)\u7f51\u7edc\u4e2d\u8fdb\u884c\u8bad\u7ec3\u3002

\u4f7f\u7528\u7684 loss \u5982\u4e0b\uff1a

\\[ \\mathcal{L} = \\sum_\\mathrm{r\\in \\text{Rays}} \\left[ \\left\\| \\hat{C}_c(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 + \\left\\| \\hat{C}_f(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 \\right] \\] \u53c2\u8003\u8d44\u6599

\u793e\u533a Pytorch \u590d\u73b0\u4ee3\u7801\u7684\u6ce8\u91ca\uff1ahttps://github.com/IsshikiHugh/nerf-pytorch

"},{"location":"pape_read/SA-MHR/","title":"[SA-HMR] Learning Human Mesh Recovery in 3D Scenes","text":"

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

3DV HMR Scene-Aware

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/SA-MHR/#\u7b14\u8bb0","title":"\u7b14\u8bb0","text":""},{"location":"pape_read/SA-MHR/#\u4efb\u52a1\u5b9a\u4e49","title":"\u4efb\u52a1\u5b9a\u4e49","text":""},{"location":"pape_read/SA-MHR/#\u4f18\u52bf\u4e0e\u8d21\u732e","title":"\u4f18\u52bf\u4e0e\u8d21\u732e","text":"

\u6982\u62ec\u8d21\u732e\uff1a

  1. \u975e\u4f18\u5316\u505a\u6cd5\u7684\uff0c\u573a\u666f\u611f\u77e5\u7684\u3001\u5355\u7167\u7247\u3001\u9884\u7ed9\u573a\u666f\u7684\u4eba\u4f53\u7f51\u683c\u6062\u590d\u6846\u67b6\uff1b
  2. \u9884\u8bad\u7ec3\u7684 HMR \u7f51\u7edc\u4e0e\u5e73\u884c\u7f51\u7edc\u7684\u673a\u9047 cross-attention \u7684\u5904\u7406\u8bbe\u8ba1\uff0c\u662f\u897f\u5b89\u4e86\u5bf9\u4eba\u4f53\u59ff\u52bf\u548c\u573a\u666f\u51e0\u4f55\u7279\u5f81\u7684\u8054\u5408\u5b66\u4e60\uff1b
  3. \u5728\u51c6\u786e\u5ea6\u548c\u901f\u5ea6\u4e0a\u90fd\u8584\u7eb1\u4f18\u5316\u505a\u6cd5\u7684\u57fa\u7ebf\uff1b
"},{"location":"pape_read/SA-MHR/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":""},{"location":"pape_read/SA-MHR/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":""},{"location":"pape_read/SA-MHR/#\u6548\u679c\u5ea6\u91cfmetrics","title":"\u6548\u679c\u5ea6\u91cf(metrics)","text":""},{"location":"pape_read/SAMP/","title":"[SAMP] Stochastic Scene-Aware Motion Prediction","text":"

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

3DV Human-Motion Scene-Aware

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/SAMP/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/SAMP/#\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","title":"\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","text":"

\u52a8\u4f5c\u751f\u6210\u7684\u5b9e\u73b0\u5212\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a

  1. \u5bfc\u822a\u81f3\u4ea4\u4e92\u76ee\u6807\uff1b
  2. \u5bfb\u627e\u4ea4\u4e92\u63a5\u89e6\u70b9(contact point)\uff1b
  3. \u751f\u6210\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u4e14\u9700\u8981\u4fdd\u8bc1\u751f\u6210\u7ed3\u679c\u4f1a\u81ea\u7136\u53d8\u5316\uff08\u4ee5\u7b26\u5408\u73b0\u5b9e\u611f\u89c9\uff09\uff1b

\u7531\u4e8e\u8fd9\u4e9b\u52a8\u4f5c\u4e2d\u6709\u4e00\u90e8\u5206\u662f\u201c\u5faa\u73af\u7684(cyclic)\u201d\uff0c\u4e00\u90e8\u5206\u662f\u201c\u4e0d\u5faa\u73af\u7684(acyclic)\u201d\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e2a\u63a8\u7406\u7cfb\u7edf\u6765\u534f\u8c03\u4e24\u8005 -> \u63d0\u51fa SAMP\uff0c\u573a\u666f\u53ef\u611f\u77e5\u7684\u52a8\u4f5c\u9884\u6d4b\u7cfb\u7edf(Scene-Aware Motion Prediction)\uff1a

"},{"location":"pape_read/SAMP/#\u8d21\u732e","title":"\u8d21\u732e","text":"
  1. \u65b0\u9896\u7684\u968f\u673a\u6a21\u578b\u4ee5\u751f\u6210\u5b9e\u65f6\u7684\u3001\u591a\u6837\u7684\u3001goal driven \u7684\u4eba\u7269\u5bf9\u573a\u666f\u7684\u4ea4\u4e92\uff1b
  2. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u7ed9\u5b9a\u76ee\u6807\u51e0\u4f55\u4f53\u540e\u751f\u6210\u53ef\u4fe1\u7684\u3001\u52a8\u4f5c\u76f8\u5173\u7684\u4ea4\u4e92\u4f4d\u7f6e\u548c\u65b9\u5411\u7684\u65b0\u5efa\u6a21\u65b9\u6cd5\uff1b
  3. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u5c06\u5177\u4f53\u8def\u5f84\u89c4\u5212\u7eb3\u5165\u53d8\u5206\u8fd0\u52a8\u5408\u6210\u7f51\u7edc\uff0c\u5b9e\u73b0\u5728\u590d\u6742\u573a\u666f\u4e2d\u7684\u5bfc\u822a\uff1b
  4. \u5305\u542b\u591a\u6837\u4eba\u4f53\u573a\u666f\u4ea4\u4e92\u6570\u636e\u7684\u65b0\u7684 MoCap \u6570\u636e\u96c6\uff1b
"},{"location":"pape_read/SAMP/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u8fd9\u4e9b\u72ec\u7acb\u7ec4\u4ef6\u4f7f SAMP \u79f0\u4e3a\u7b2c\u4e00\u4e2a\u89e3\u51b3\u751f\u6210\u591a\u6837\u52a8\u6001\u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u4e14\u80fd\u771f\u5b9e\u5e94\u7528\u4e8e\u590d\u6742\u573a\u666f\u4e2d\u7684\u3002 - [x] \u95ee\u9898\uff1a\u8fd9\u91cc\u6700\u5173\u952e\u7684\u662f\u54ea\u4e00\u4e2a\u90e8\u5206\uff1f\u4e0e NSM \u76f8\u6bd4\u72ec\u521b\u6027\u7684\u5730\u65b9\u5177\u4f53\u5728\u54ea\u91cc\uff1f\u5230\u5e95\u5982\u4f55\u5b9a\u4e49\u201cdiverse human-scene interactions\u201d\uff0c\u548c Motion VAE \u90a3\u79cd\u751f\u6210\u5206\u5e03\u6a21\u578b\u7684\u6709\u4ec0\u4e48\u533a\u522b\uff1f\uff08Motion VAE \u662f\u5229\u7528\u5206\u5e03\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u5f97\u5230\u7ed3\u679c\u7684\uff0cMoGlow \u8c8c\u4f3c\u548c\u573a\u666f\u6ca1\u5173\u7cfb\uff09

\u56e0\u6b64\uff0c\u8bad\u7ec3 SAMP \u6240\u9700\u7684\u6570\u636e\u96c6\u9700\u8981\u4e30\u5bcc\u4e14\u4e0d\u540c\u7684\u573a\u666f\u4ea4\u4e92\uff0c\u73b0\u6709\u6570\u636e\u96c6\u7f3a\u5c11\u4ea4\u4e92\u884c\u4e3a -> \u81ea\u5df1\u505a\u4e86\u4e00\u4e2a\u3002

\u5982\u4f55\u8861\u91cf\u4eba\u4f53\u52a8\u4f5c\u7684\u968f\u673a\u6027(stochasticity)\u662f\u4e00\u4e2a\u6709\u5f85\u63a2\u7d22\u7684\u9886\u57df\u3002

"},{"location":"pape_read/SAMP/#\u8bad\u7ec3\u7b56\u7565","title":"\u8bad\u7ec3\u7b56\u7565","text":"

\u4f7f\u7528\u6b63\u5e38\u7684\u76d1\u7763\u8bad\u7ec3\u4f1a\u5bfc\u81f4\u9519\u8bef\u7d2f\u79ef(accumulation of error)\uff0c\u56e0\u4e3a\u4e00\u6b21\u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a\u8f93\u5165\u8fdb\u5165\u5230\u4e0b\u4e00\u4e2a\u7f51\u7edc\u3002\u6240\u4ee5 SAMP \u91c7\u7528\u9884\u8ba2\u91c7\u6837(scheduled sampling)\uff0c\u5b83\u80fd\u591f\u7a33\u5b9a\u751f\u6210\u957f\u65f6\u95f4\u7684\u52a8\u4f5c\u9884\u4f30\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u4e0a\u4e00\u6b21\u7684\u9884\u6d4b\u7ed3\u679c\u4ee5 \\(1-P\\) \u7684\u6982\u7387\u4f5c\u4e3a\u4e0b\u4e00\u6b21\u9884\u6d4b\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(P\\) \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

"},{"location":"pape_read/SAMP/#\u5b9e\u9a8c\u548c\u8bc4\u4f30","title":"\u5b9e\u9a8c\u548c\u8bc4\u4f30","text":"

\u5728\u540c\u521d\u59cb\u6761\u4ef6\u4e0b\u591a\u6b21\u6267\u884c\u540c\u4e00\u4efb\u52a1\uff0c\u4f7f\u7528 APD(Average Pairwise Distance) \u6765\u8861\u91cf\u5176\u8fd0\u52a8\u5e45\u5ea6\uff1a

"},{"location":"pape_read/SAMP/#\u4ee3\u7801\u9605\u8bfb","title":"\u4ee3\u7801\u9605\u8bfb","text":""},{"location":"pape_read/SAMP/#motionnet","title":"MotionNet","text":"

\u516c\u5f0f\u63a8\u5bfc\uff1a

\u6b63\u6001\u5206\u5e03\u7684\u71b5\u516c\u5f0f

\u5047\u8bbe \\(x\\sim N(\\mu, \\sigma^2)\\)\uff0c\u4e8e\u662f\u6709\uff1a

\u5e76\u4e14\u6709\u7ed3\u8bba\uff1a

\\[ \\int_{-\\infty}^{\\infty} e^{-x^2} \\mathrm{d}x = \\sqrt{\\pi} \\]

\u90a3\u4e48\u6709\u5176\u71b5\u516c\u5f0f\uff1a

\\[ \\begin{aligned} -\\int_{-\\infty}^{\\infty} p(x)\\ln p(x) \\mathrm{d}x &= -\\int_{-\\infty}^{\\infty}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\\left( -\\frac{(x-\\mu)^2}{\\sqrt{2\\sigma^2}} \\right) \\ln\\left[ \\frac{1}{\\sqrt{2\\pi\\sigma^2}} \\exp\\left( -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right) \\right] \\mathrm{d}x \\\\ &= \\frac{1}{2}\\left( \\ln\\left( 2\\pi\\sigma^2 \\right) + 1 \\right) \\end{aligned} \\]"},{"location":"pape_read/TRACE/","title":"[TRACE] 5D Temporal Regression of Avatars with Dynamic Cameras in 3D Environments","text":"

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

3DV HMR Global-Coordinates Track

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/TRACE/#\u4efb\u52a1--\u6311\u6218","title":"\u4efb\u52a1 & \u6311\u6218","text":""},{"location":"pape_read/TRACE/#\u80cc\u666f","title":"\u80cc\u666f","text":"

\u867d\u7136\u76ee\u524d\u5bf9\u4e8e HPS(Human Pose & Shape) \u7684\u4f30\u8ba1\u5df2\u7ecf\u6709\u5f88\u591a\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u4f46\u662f\u90fd\u662f\u5f97\u5230\u76f8\u673a\u5ea7\u6807\u4e0b\u7684\u7ed3\u679c\uff0c\u65e0\u6cd5\u5f88\u597d\u7684\u5f97\u5230\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u7684\u7ed3\u679c\u3002\u5c24\u5176\u662f\u5728\u76f8\u673a\u79fb\u52a8\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4efb\u52a1\u5c24\u5176\u56f0\u96be\u3002\u800c\u5f97\u5230\u6062\u590d\u51fa\u6765\u7684 Human \u7684\u5168\u5c40\u5ea7\u6807\u5177\u6709\u91cd\u5927\u610f\u4e49\u3002

"},{"location":"pape_read/TRACE/#\u6311\u6218","title":"\u6311\u6218","text":"
  1. \u9700\u8981\u89e3\u5076 human \u7684\u8fd0\u52a8\u548c camera \u7684\u8fd0\u52a8\uff0c\u8fd9\u6837\u624d\u80fd\u5728\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u6062\u590d human \u7684\u8f68\u8ff9\uff1b
    1. \u4e00\u79cd\u65b9\u6cd5\uff1a\u4f7f\u7528 SfM \u6062\u590d\u51fa\u76f8\u673a\u5173\u4e8e rigid scene \u7684\u76f8\u5bf9\u8fd0\u52a8\uff0c\u4f46\u662f\u5728\u7279\u6b8a\u73af\u5883\uff08\u753b\u9762\u7684\u5927\u90e8\u5206\u90fd\u4e0d\u600e\u4e48 rigid\uff0c\u6bd4\u5982\u5927\u91cf\u4eba\u6d41\uff09\u4e0b\u975e\u5e38\u4e0d\u53ef\u9760\uff1b
    2. \u53e6\u5916\u4e00\u79cd\u6765\u81ea GLAMR \u7684\u65b9\u6cd5\uff1a\u901a\u8fc7\u5df2\u6709\u7684\u5c40\u90e8\u59ff\u6001\u6765\u63a8\u65ad\u5168\u5c40\u4f4d\u7f6e\uff0c\u5c31\u7c7b\u4f3c\u4e8e\u770b\u4f60\u8d70\u4e86\u51e0\u6b65\u7136\u540e\u4f30\u8ba1\u4f60\u52a8\u4e86\u51e0\u7c73\uff1b
    3. TRACE \u9009\u62e9\u4e86\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u7684\u53d8\u79cd\uff0c\u901a\u8fc7\u4f7f\u7528\u6574\u4e2a\u753b\u9762\u6765\u9884\u6d4b\u79fb\u52a8\u8ddd\u79bb\uff0c\u6539\u5584\u4e86 GLAMR \u539f\u672c\u4e0d\u600e\u4e48\u597d\u7684\u6548\u679c\u3002\u4e0d\u4ec5\u5982\u6b64\uff0cGLAMR \u662f\u591a\u9636\u6bb5\u7684\uff0c\u9c81\u68d2\u6027\u4e0d\u654c TRACE\uff1b
  2. \u5c24\u5176\u9488\u5bf9\u4e8e\u8ffd\u8e2a\u529f\u80fd\uff0c\u5728\u5bc6\u96c6\u4eba\u7fa4\u573a\u666f\uff0c\u5b58\u5728\u5f88\u4e25\u91cd\u7684\u906e\u6321\u95ee\u9898\uff1b
    1. \u6700\u5e38\u89c1\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4f7f\u7528\u65f6\u5e8f\u5148\u9a8c\u5047\u8bbe\uff0c\u5982 Kalman filter\uff0c\u4f46\u662f\u5728\u590d\u6742\u573a\u666f\u4e0b\u4e5f\u5f88\u5bb9\u6613\u5931\u6548\uff1b
    2. \u95ee\u9898\uff1aKalman filter \u597d\u50cf\u548c\u6ee4\u6ce2\u6709\u5173\uff1f\u4e3a\u4ec0\u4e48\u8bf4\u662f temporal priors\uff1f \u4f7f\u5e73\u6ed1\u3002
    3. PHALP \u662f\u4e3a\u6570\u4e0d\u591a\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u4f46\u662f\u5b83\u5e76\u975e one-stage\uff0c\u800c\u4e14\u5e76\u4e0d\u5bf9\u5e8f\u5217\u8fdb\u884c\u5168\u9762\u7684\u63a8\u7406\uff1b
    4. \u95ee\u9898\uff1a\u9700\u8981\u4e86\u89e3\u8fd9\u4e2a\u5417\uff1f \u8df3\u8fc7\u3002
"},{"location":"pape_read/TRACE/#\u4efb\u52a1\u4e0e\u6210\u679c","title":"\u4efb\u52a1\u4e0e\u6210\u679c","text":"

\u672c\u5de5\u4f5c\u5b9e\u73b0\u4e86\u52a8\u6001\u76f8\u673a\u89c6\u9891\uff08DC-videos\uff09\u4e0b\u5728\uff08\u865a\u62df\u7684\uff09\u7a7a\u95f4\u4e2d\u7684\u65f6\u5e8f\u7684\u5bf9\u4e8e K \u76ee\u6807\u7684\u5b9a\u4f4d\u68c0\u6d4b\u3001\u59ff\u6001\u4f30\u8ba1\u3001\u8ffd\u8e2a\u548c\u51b2\u7a81\u9002\u914d\uff0c\u5e76\u4e14\u80fd\u591f\u5f97\u5230\u5168\u5c40\u7684\u5ea7\u6807\u3002 - \u65f6\u5e8f & \u5168\u5c40\u5ea7\u6807 & \u8ffd\u8e2a\uff1b

\u5bf9 K \u4e2a\u6709\u9650\u76ee\u6807\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5373\u4f7f\u4e2d\u9014\u77ed\u6682\u7684\u5931\u914d\uff0c\u4e5f\u80fd\u5728\u4e4b\u540e\u88ab\u91cd\u65b0\u8bc6\u522b\uff08\u4e00\u5f00\u59cb\u51b3\u5b9a\u4e86\u54ea K \u4e2a\u5c31\u4e00\u76f4\u662f\u54ea K \u4e2a\u4eba\uff09\u3002

"},{"location":"pape_read/TRACE/#\u521b\u65b0\u70b9--\u8d21\u732e","title":"\u521b\u65b0\u70b9 & \u8d21\u732e","text":""},{"location":"pape_read/TRACE/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u53c2\u8003\u6d41\u7a0b\u56fe\u505a\u89e3\u91ca\u3002

"},{"location":"pape_read/TRACE/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":"

\u7565\u3002

"},{"location":"pape_read/TRACE/#loss","title":"Loss","text":"

\u7565\u3002

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

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

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

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/ai/hydra/","title":"Hydra","text":"

\u7ea6 1136 \u4e2a\u5b57 42 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u76f8\u5173\u94fe\u63a5

\u7b80\u4ecb

Hydra \u4ea6\u53ef\u7528\u4e8e\u5176\u5b83 Python APP\uff0c\u4f46\u672c\u6587\u53ea\u4ee5 Research \u7684\u89c6\u89d2\u6765\u8c08\u8fd9\u4e2a\u5de5\u5177\u3002

\u5728\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u53ef\u80fd\u4f1a\u5e0c\u671b\u4e00\u4e2a\u9879\u76ee\u80fd\u652f\u6301\u5207\u6362\u5176\u4e2d\u7684\u82e5\u5e72\u90e8\u4ef6\uff0c\u5c31\u597d\u50cf\u7ed9\u673a\u5668\u4eba\u66f4\u6362\u4e0d\u540c\u7684\u90e8\u4ef6\uff0c\u6765\u6d4b\u8bd5\u5176\u6027\u80fd\u3002\u800c\u6bcf\u4e00\u4e2a\u90e8\u4ef6\u90fd\u6709\u53ef\u80fd\u6709\u81ea\u5df1\u7684\u8d85\u53c2\u6570\u9700\u8981\u8bbe\u7f6e\u3002

\u786c\u7f16\u7801\u8bbe\u7f6e\u5f53\u7136\u4e0d\u53ef\u53d6\uff0c\u8fd9\u592a\u4e0d\u4f18\u96c5\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u901a\u5e38\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u5373 args \u6765\u5b9e\u73b0\u8d85\u53c2\u6570\u7684\u4f20\u5165\u3002\u4f46\u968f\u7740\u6a21\u578b\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u9700\u8981\u7684\u8d85\u53c2\u6570\u8d8a\u6765\u8d8a\u591a\uff0c\u547d\u4ee4\u884c\u5c31\u4f1a\u8d8a\u6765\u8d8a\u957f\uff1b\u800c\u4e14\u4e0d\u540c\u7684\u201c\u90e8\u4ef6\u201d\u53ef\u80fd\u9700\u8981\u4e0d\u540c\u7684\u8d85\u53c2\u6570\uff0c\u56e0\u6b64\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\u7075\u6d3b\u6027\u5c31\u5927\u5927\u4e0b\u964d\u4e86\u3002

\u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u628a\u8fd9\u4e9b\u4e1c\u897f\u653e\u5728\u6587\u4ef6\u91cc\uff0c\u9700\u8981\u4fee\u6539\u65f6\u5c31\u76f4\u63a5\u4fee\u6539\u6587\u4ef6\uff0c\u8fd9\u6837\u4fee\u6539\u53c2\u6570\u76f8\u5bf9\u5c31\u7075\u6d3b\u4e00\u4e9b\u3002\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5c06\u4e0d\u540c\u7684\u7ec4\u5408\u5206\u522b\u4fdd\u5b58\u4e3a\u4e00\u4e2a\u6587\u4ef6\uff0c\u7528\u6307\u5b9a\u7279\u5b9a\u6587\u4ef6\u7684\u65b9\u5f0f\u6765\u9009\u62e9\u4e00\u4e2a\u5df2\u7ecf\u8bbe\u7f6e\u597d\u7684 pipeline\u3002

\u4f46\u662f\u8fd9\u6837\u8fd8\u6709\u4e24\u4e2a\u95ee\u9898\uff0c\u9996\u5148\uff0c\u8fd9\u6837\u5199\u7684\u8bdd\uff0c\u914d\u7f6e\u6587\u4ef6\u7684\u590d\u7528\u7387\u662f\u6bd4\u8f83\u4f4e\u7684\uff0c\u56e0\u4e3a\u5404\u4e2a\u914d\u7f6e\u4e4b\u95f4\u5dee\u522b\u53ef\u80fd\u4e0d\u5927\uff0c\u53ef\u80fd\u4e92\u76f8\u53ea\u6709\u4e00\u5c0f\u90e8\u5206\u7684\u4e0d\u540c\uff0c\u800c\u590d\u7528\u7387\u4f4e\u7684\u574f\u5904\u5c31\u4e0d\u5fc5\u591a\u8bf4\u4e86\uff1b\u5176\u6b21\uff0c\u5c31\u7b97\u6211\u4eec\u7528\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\u6765\u89e3\u51b3\u590d\u7528\u7684\u95ee\u9898\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u4ee3\u7801\u91cc\u4e5f\u9700\u8981\u4f7f\u7528\u7e41\u590d\u7684\u5206\u652f\u8bed\u53e5\u624d\u80fd\u5f88\u597d\u5730\u63a7\u5236\u914d\u7f6e\u7684\u9009\u62e9\u3002

\u4e8e\u662f\uff0cHydra \u5e94\u8fd0\u800c\u751f\u3002Hydra \u4f1a\u4ee5\u7279\u5b9a\u7684\u65b9\u5f0f\u5904\u7406\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5b83\u7684\u884c\u4e3a\u5f88\u50cf Cpp \u7684 #include\uff0c\u4f1a\u628a\u9009\u4e2d\u7684\u540e\u4ee3 Group \u91cc\u7684\u914d\u7f6e\u6587\u4ef6\u5d4c\u5165\u5230\u5f53\u524d\u914d\u7f6e\u6587\u4ef6\u91cc\u3002

\u66f4\u5177\u4f53\u7684\u5173\u4e8e Hydra \u7684\u89c4\u8303\uff0c\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff0c\u672c\u6587\u4e3b\u8981\u5bf9\u5b98\u65b9\u6587\u6863\u505a\u4e00\u4e9b\u8865\u5145\uff0c\u901a\u8fc7\u5b9e\u9a8c\u63a2\u7d22\u4e00\u4e9b Hydra \u6587\u6863\u4e2d\u6ca1\u6709\u63d0\u5230\u7684\u6027\u8d28\u3002

"},{"location":"tech_accu/ai/hydra/#\u5173\u4e8e-ab-\u8bed\u6cd5","title":"\u5173\u4e8e +A=B \u8bed\u6cd5","text":"

\u5728\u6587\u6863\u4e2d\uff0c\u6709\u4e24\u4e2a\u5730\u65b9\u63d0\u5230\u4e86 +A=B \u7684\u8bed\u6cd5\u3002\u7b2c\u4e00\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

You can add config values via the command line. The + indicates that the field is new.

$ python my_app.py +db.driver=mysql +db.user=omry +db.password=secret\ndb:\n  driver: mysql\n  user: omry\n  password: secret\n
files my_app.py
from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

\u7b2c\u4e8c\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

Select an item from a config group with +GROUP=OPTION, e.g:

$ python my_app.py +db=postgresql\ndb:\n  driver: postgresql\n  pass: drowssap\n  timeout: 10\n  user: postgres_user\n
files Directory layout
    \u251c\u2500 conf\n    \u2502  \u2514\u2500 db\n    \u2502      \u251c\u2500 mysql.yaml\n    \u2502      \u2514\u2500 postgresql.yaml\n    \u2514\u2500\u2500 my_app.py\n
db/mysql.yaml
driver: mysql\nuser: omry\npassword: secret\n
db/postgresql.yaml
driver: postgresql\nuser: postgres_user\npassword: drowssap\ntimeout: 10\n
my_app.py
from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

\u524d\u8005\u8868\u793a\u589e\u52a0\u4e00\u4e2a field\uff0c\u540e\u8005\u8868\u793a\u6307\u5b9a\u4e00\u4e2a group\uff0c\u5176\u542b\u4e49\u662f\u4e0d\u540c\u7684\uff0c\u800c\u770b\u8d77\u6765\u662f\u6709\u6b67\u4e49\u7684\u3002

\u6839\u636e\u6211\u7684\u6d4b\u8bd5\uff0c+A=B \u5177\u4f53\u662f\u54ea\u4e00\u79cd\uff0c\u53d6\u51b3\u4e8e\u662f\u5426\u5b58\u5728\u540d\u4e3a A \u7684 folder\u3002\u5373\uff1a

\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ea\u8981\u5f53\u524d\u76ee\u5f55\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u90a3\u4e48\u5728\u5f53\u524d yaml \u6587\u4ef6\u4e2d\u5c31\u65e0\u6cd5\u5c06 A \u4f5c\u4e3a\u4e00\u4e2a field \u7684 key\u3002

\u4e4b\u6240\u4ee5\u5f3a\u8c03\u5f53\u524d\uff0c\u662f\u56e0\u4e3a\u5b83\u53ef\u4ee5\u88ab\u7236\u6bcd\u7684 yaml \u6587\u4ef6\u4e2d\u7684\uff0c\u4ee5 A \u4e3a key \u7684 k-v \u5bf9\u8986\u76d6\u3002

\u4f8b\u5982\uff0c\u867d\u7136\u6dfb\u52a0 A=1 \u66ff\u6362\u4f5c\u4e3a group \u7684 A \u4f1a\u62a5\u9519\uff0c\u4f46\u662f\u6dfb\u52a0 A.B=1 \u5374\u53ef\u4ee5\u8986\u76d6 A \u4e0b\u7684\u4f5c\u4e3a group \u7684 B\uff1b\u4ea6\u6216\u5728\u6700\u7684 config.yaml \u91cc\u6dfb\u52a0\u8fd9\u6837\u4e00\u6bb5\u4e5f\u53ef\u4ee5\u8d77\u5230\u540c\u6837\u7684\u6548\u679c\uff1a

A:\nB: 1\n

\u5373\uff0c\u5bf9\u4e8e\u201c\u65e0\u6cd5\u5c06 group \u8986\u76d6\u4e3a field\u201d\u8fd9\u4ef6\u4e8b\u7684\u4fdd\u62a4\uff0c\u53ea\u6709\u76ee\u5f55\u4e00\u5c42\u5185\u6709\u6548\u3002

"},{"location":"tech_accu/ai/hydra/#\u8986\u76d6\u5173\u7cfb","title":"\u8986\u76d6\u5173\u7cfb","text":"

\u9996\u5148\uff0c\u9664\u4e86\u5728\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u5173\u4e8e field \u548c group \u7684\u8986\u76d6\u5173\u7cfb\uff0c\u66f4\u91cd\u8981\u7684\u662f\u5728\u4e0d\u540c\u5c42\u7684 yaml \u4e4b\u95f4\uff0c\u76f8\u540c\u952e\u7684\u503c\u7684\u8986\u76d6\u5173\u7cfb\u3002

\u9996\u5148\uff0c\u5355\u770b defaults\uff0c\u5b98\u65b9\u5728\u6587\u6863\u4e2d\u6709\u63d0\u5230\u89c4\u5219\uff1a

The defaults are ordered:

\u6b64\u5916\uff0c\u5982\u679c\u5df2\u7ecf\u5728\u5185\u5c42 defaults \u8bbe\u7f6e\u4e86\u952e\u7684\u9ed8\u8ba4\u503c\uff0c\u5c31\u4e0d\u80fd\u5728\u5916\u5c42\u4e3a\u8fd9\u4e2a\u952e\u8bbe\u7f6e\u9ed8\u8ba4\u503c\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

\ud83c\udf30

\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e24\u4e2a\u6587\u4ef6\u4e2d\uff0c- group1/group2: option1_1 \u548c - group2: option1_1 \u8fd9\u4e24\u884c\u662f\u51b2\u7a81\u7684\uff0c\u53ea\u80fd\u9009\u5176\u4e00\u7684\u3002

config.yaml
defaults:\n- group1: option1\n- group1/group2: option1_1\n
group1/option1.yaml
defaults:\n- group2: option1_1\n

\u56e0\u6b64\uff0c\u4e00\u822c\u6765\u8bf4\u5c3d\u91cf\u907f\u514d\u8ba9\u914d\u7f6e\u5c42\u6570\u8d85\u8fc7\u4e24\u5c42\u3002

\u800c\u5173\u4e8e defaults \u4ee5\u5916\u7684\u90e8\u5206\uff0c\u89c4\u5219\u5982\u4e0b\uff1a

  1. \u5f53\u6700\u5916\u5c42\u7684 config.yaml \u548c\u5728 defaults: \u91cc\u6307\u5b9a\u7684 yaml \u914d\u7f6e\u6587\u4ef6\u5b58\u5728\u51b2\u7a81\u7684\u952e\u65f6\uff0c\u4ee5 config.yaml \u91cc\u7684\u4e3a\u51c6\uff0c\uff08\u65e0\u8bba\u662f\u5426\u6709 GROUP=OPTION \u9009\u9879\uff09\uff1b
  2. \u5f53\u952e\u4e0d\u5b58\u5728\u4e8e defaults: \u4e2d\uff0c\u800c\u53ea\u5728\u547d\u4ee4\u884c\u4e2d\u901a\u8fc7 +GROUP=OPTION \u9009\u4e2d\u65f6\uff0c\u4ee5 OPTION.yaml \u91cc\u7684\u4e3a\u51c6\uff1b
"},{"location":"tech_accu/ai/pytorch/","title":"PyTorch","text":"

\u7ea6 565 \u4e2a\u5b57 48 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

\u5f03\u5751\u4e86\uff0c\u611f\u89c9\u6ca1\u5565\u5199\u7684\u5fc5\u8981

\u53c2\u8003\u8d44\u6599 "},{"location":"tech_accu/ai/pytorch/#\u5b89\u88c5","title":"\u5b89\u88c5","text":"

\u6839\u636e \u8fd9\u91cc \u63d0\u4f9b\u7684\u65b9\u6cd5\u83b7\u53d6\u5b89\u88c5\u9014\u5f84\uff0c\u6ce8\u610f\u9009\u62e9\u4e0e\u60a8\u7684\u73af\u5883\u76f8\u7b26\u7684\u6761\u4ef6\u3002

\u4f9d\u8d56\u4e4b\u7c7b\u7684\u90fd\u5df2\u7ecf\u5728\u8be5\u9875\u9762\u5199\u7684\u5f88\u6e05\u695a\u4e86\u3002

\u5b8c\u6210\u5b89\u88c5\u540e\uff0c\u6211\u4eec\u901a\u8fc7\u5982\u4e0b\u65b9\u6cd5\u6765\u68c0\u6d4b\u662f\u5426\u5b89\u88c5\u6210\u529f\uff1a

$ python\n>>> import torch\n>>> x = torch.rand(5, 3)\n>>> print(x)\ntensor([[0.8577, 0.6416, 0.2632],\n        [0.3853, 0.8534, 0.4877],\n        [0.0628, 0.2360, 0.8810],\n        [0.1766, 0.8024, 0.5447],\n        [0.3938, 0.9232, 0.4407]])\n
"},{"location":"tech_accu/ai/pytorch/#\u5f20\u91cf--tensors","title":"\u5f20\u91cf | Tensors","text":"

Tensors \u662f NumPy \u4e2d ndarrys \u7684\u4e00\u79cd\u65e0\u75db\u66ff\u4ee3\uff0c\u53ea\u4e0d\u8fc7 tensors \u80fd\u591f\u6709\u6548\u5229\u7528 GPU \u8fdb\u884c\u52a0\u901f\u3002

"},{"location":"tech_accu/ai/pytorch/#\u521d\u59cb\u5316","title":"\u521d\u59cb\u5316","text":"

\u663e\u7136\uff0c\u521d\u59cb\u5316\u6709\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u63d0\u4f9b\u51e0\u79cd\u3002

\u901a\u8fc7\u6570\u636e\u751f\u6210\u901a\u8fc7 NumPy array \u751f\u6210\u901a\u8fc7\u53e6\u5916\u4e00\u4e2a tensor \u751f\u6210\u4f7f\u7528\u5e38\u6570\u6216\u968f\u673a\u521d\u59cb\u5316

data = [[1, 2], [3, 4]]\nx_data = torch.tensor(data)\nprint(x_data)\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

tensor([[1, 2],\n        [3, 4]])\n

np_array = np.array(data)\nx_np = torch.from_numpy(np_array)\nprint(x_np)\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

tensor([[1, 2],\n        [3, 4]])\n

x_ones = torch.ones_like(x_data) # retains the properties of x_data\nprint(f\"Ones Tensor: \\n {x_ones} \\n\")\n\nx_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data\nprint(f\"Random Tensor: \\n {x_rand} \\n\")\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

Ones Tensor:\ntensor([[1, 1],\n        [1, 1]])\n\nRandom Tensor:\ntensor([[0.4557, 0.7406],\n        [0.5935, 0.1859]])\n

    shape = (2, 3)\n    rand_tensor = torch.rand(shape)\n    ones_tensor = torch.ones(shape)\n    zeros_tensor = torch.zeros(shape)\n\n    print(f\"Random Tensor: \\n {rand_tensor} \\n\")\n    print(f\"Ones Tensor: \\n {ones_tensor} \\n\")\n    print(f\"Zeros Tensor: \\n {zeros_tensor}\")\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

Random Tensor:\n tensor([[0.4434, 0.1717, 0.7331],\n        [0.4211, 0.8945, 0.2239]])\n\nOnes Tensor:\n tensor([[1., 1., 1.],\n        [1., 1., 1.]])\n\nZeros Tensor:\n tensor([[0., 0., 0.],\n        [0., 0., 0.]])\n
"},{"location":"tech_accu/ai/pytorch/#\u5c5e\u6027","title":"\u5c5e\u6027","text":"

\u8fd9\u91cc\u4e3b\u8981\u6d89\u53ca\u7684\u5f20\u91cf\u7684\u5c5e\u6027\u4e3a \u5f62\u72b6(shape)\u3001\u6570\u636e\u7c7b\u578b(dtype) \u548c \u6570\u636e\u6240\u5b58\u50a8\u5728\u7684\u786c\u4ef6\u8bbe\u5907(device)\u3002

tensor = torch.rand(3, 4)\n\nprint(f\"Shape of tensor: {tensor.shape}\")\nprint(f\"Datatype of tensor: {tensor.dtype}\")\nprint(f\"Device tensor is stored on: {tensor.device}\")\n

\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

Shape of tensor: torch.Size([3, 4])\nDatatype of tensor: torch.float32\nDevice tensor is stored on: cpu\n
"},{"location":"tech_accu/ai/pytorch/#\u65b9\u6cd5\u4e0e\u64cd\u4f5c","title":"\u65b9\u6cd5\u4e0e\u64cd\u4f5c","text":"

\u5bf9\u5f20\u91cf\u7684\u64cd\u4f5c\u65b9\u6cd5\u975e\u5e38\u4e4b\u591a\uff0c\u5f88\u96be\u5728\u672c\u6587\u4e2d\u5168\u90e8\u6d89\u53ca\uff0c\u56e0\u800c\u4e5f\u53ea\u662f\u653e\u4e2a \u6587\u6863 \u5728\u8fd9\u8fb9\uff0c\u5728\u6b64\u53ea\u4ecb\u7ecd\u6bd4\u8f83\u57fa\u7840\u7684\u51e0\u4e2a\u3002

"},{"location":"tech_accu/ai/pytorch/#\u4f7f\u7528-gpu-\u52a0\u901f","title":"\u4f7f\u7528 GPU \u52a0\u901f","text":"

\u4ee4\u4eba\u5e78\u559c\u7684\u662f\uff0c\u5bf9\u5f20\u91cf\u7684\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u53ef\u4ee5\u4f7f\u7528 GPU \u6765\u8fdb\u884c\u52a0\u901f\uff0c\u5f53\u7136\u5728\u6b64\u4e4b\u524d\u6211\u4eec\u9700\u8981\u5c06\u5b83\u8f6c\u79fb\u5230 GPU \u4e0a\u2014\u2014\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\u3002

# We move our tensor to the GPU if available\nif torch.cuda.is_available():\n    tensor = tensor.to('cuda')\n    print(f\"Device tensor is stored on: {tensor.device}\")\n

Output

Device tensor is stored on: cuda:0\n
"},{"location":"tech_accu/ai/pytorch/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":"

\u6ce8\u610f

\u5982\u679c\u4e00\u4e2a tensor \u7684\u65b9\u6cd5\u4ee5 _ \u7ed3\u5c3e\uff0c\u90a3\u4e48\u8bf4\u660e\u8fd9\u4e2a\u8fd0\u7b97\u4f1a\u4fee\u6539\u8fd9\u4e2a tensor \u81ea\u8eab\u3002

\u5373\uff0cx.method_(...) \u5c06\u4f1a\u4fee\u6539 x \u672c\u8eab\u3002

PyTorch \u5bf9\u56db\u5219\u8fd0\u7b97\u7b26\u8fdb\u884c\u4e86\u4e00\u4e9b\u91cd\u8f7d\uff0c\u5176\u4e0e\u6b63\u5e38\u65b9\u6cd5\u7684\u6620\u5c04\u5173\u7cfb\u5982\u4e0b\uff1a

\u8fd0\u7b97\u7b26 \u7b49\u4ef7\u65b9\u6cd5 + torch.add() - torch.sub() * torch.mul() / torch.div()"},{"location":"tech_accu/ai/pytorch/#\u7d22\u5f15\u4e0e\u5207\u7247","title":"\u7d22\u5f15\u4e0e\u5207\u7247","text":"

tensor = torch.ones(4, 4)\ntensor[:,1] = 0\nprint(tensor)\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

tensor([[1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.]])\n
"},{"location":"tech_accu/language/cpp/","title":"Cpp about OOP","text":"

\u7ea6 53 \u4e2a\u5b57

\u76f8\u5173\u4fe1\u606f

\u8fd9\u4e2a\u6761\u76ee\u653e\u7684\u4e3b\u8981\u662f Cpp \u5173\u4e8e OOP \u7684\u4e00\u4e9b\u8bed\u6cd5\u3002

\u4e3b\u8981\u8fc1\u79fb\u81ea\u5927\u4e00\u7684 yuque \u6587\u6863\uff0c\u518d\u4e4b\u540e\u4e5f\u4f1a\u6709\u4e00\u4e9b\u4fee\u6539\u3002

\u8fc1\u79fb\u524d\u7684\u6587\u4ef6

"},{"location":"tech_accu/language/cpp/Part0/","title":"[pre] \u524d\u7f6e\u4e0e\u6742\u9879","text":"

\u7ea6 1746 \u4e2a\u5b57 74 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

"},{"location":"tech_accu/language/cpp/Part0/#1x-\u5f15\u7528reference","title":"[1.x] \u5f15\u7528reference","text":"

1.\u521b\u5efabinding\u5173\u7cfb

\u9700\u8981\u7406\u89e3\u7684\u662f\uff0c\u5f15\u7528\u672c\u8d28\u5c31\u662f\u6307\u9488\u3002\u5b83\u662f\u6307\u9488\u7684\u7cd6\u3002

typename & refname = name; \u521b\u5efa\u4e86 (typename)name \u7684\u5f15\u7528 (reference)refname

\u5728bingding\u5173\u7cfb\u5efa\u7acb\u540e\uff0c\u5728 name \u548c refname \u7684\u4f5c\u7528\u57df\u5185 refname \u548c name \u57fa\u672c\u7b49\u6548\uff08\u662f\u53d8\u91cf\u7684\u7ed1\u5b9a\u5173\u7cfb\uff0c\u800c\u975e\u50cf #define \u90a3\u6837\u7684\u5b57\u7b26\u66ff\u6362\u5173\u7cfb

int x = 1, y = 10, *p = &x, &ref = *p;\n// \u6b64\u65f6 x = 1, y = 10, *p = 1, ref = 1\n\n*p = 2;\n// \u6b64\u65f6 x = 2, y = 10, *p = 2, ref = 2\n\np = &y;\n// \u6b64\u65f6 x = 2, y = 10, *p = 10, ref = 2\n

2.\u5229\u7528reference\u4f20\u53c2

\u5229\u7528reference\u53ef\u4ee5\u7c7b\u4f3c\u4f20\u6307\u9488\u4e00\u6837\uff0c\u5728\u53d8\u91cf\u539f\u672c\u7684\u4f5c\u7528\u57df\u5916\u5bf9\u53d8\u91cf\u8fdb\u884c\u4fee\u6539

void f(int &x){\nx = 1;\n}\n\nint main(){\nint p = 0;\n// \u6b64\u65f6 p = 0\nf(p);\n// \u6b64\u65f6 p = 1\n}\n

\u4f46\u6b64\u65f6\uff0c\u4f20\u5165 f(p) \u7684\u5b9e\u53c2 p \u5fc5\u987b\u4e3a\u4e00\u4e2a\u53d8\u91cf\uff0c\u4e0d\u53ef\u4ee5\u662f\u5e38\u91cf\u3001\u8868\u8fbe\u5f0f\u7b49\u3002

3.reference \u4e0e const

\u8fdb\u884c const int &refA = A; \u64cd\u4f5c\u540e\uff0c\u6211\u4eec\u53d1\u73b0 refA \u4e0d\u53ef\u4fee\u6539\uff0c\u4f46 A \u53ef\u4ee5\u4fee\u6539

\u5982\u679c A \u5982\u6b64\u5b9a\u4e49\uff1aconst int A = 1;\uff0c\u90a3\u4e48\uff1a

"},{"location":"tech_accu/language/cpp/Part0/#2x-\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","title":"[2.x] \u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","text":"
#include<iostream>\nusing namespace std;\n\nclass S{\npublic:\nvoid f();\nprivate:\nint a;\n};\n\nint a;\n\nvoid f(){\ncout << \"qwq\\n\";\n}\n\nvoid S::f(){ // \u8fd9\u91cc\u6b63\u5728\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u4e8e\u7c7bS\u7684\u7684\u51fd\u6570\n++a;     // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u7c7bS\u7684\u6210\u5458\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\n::f();   // \u8fd9\u91cc\u8c03\u7528\u4e86\u4e00\u4e2a\u5168\u5c40\u4e0b\u7684\u81ea\u7531\u51fd\u6570\n++::a;   // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u5168\u5c40\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\ncout << a << \" \" << ::a << \"\\n\";\n}\n\nint main(){\nS k;\nk.f(); }\n
"},{"location":"tech_accu/language/cpp/Part0/#3x-\u51fd\u6570\u7684\u91cd\u8f7doverload","title":"[3.x] \u51fd\u6570\u7684\u91cd\u8f7dOverload","text":"

\u53ef\u4ee5\u5b58\u5728\u51fd\u6570\u540d\u76f8\u540c\u4f46\u662f\u53c2\u6570\u8868\u4e0d\u540c\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5373\u51fd\u6570\u7684\u91cd\u8f7d\u3002

\u7c7b\u4f3cGolang\u7684interface\uff0c\u53c2\u6570\u8868\u5b8c\u5168\u7b26\u5408\u54ea\u4e2a\u5c31\u6267\u884c\u54ea\u4e2a(\u51fa\u73b0\u6b67\u4e49\u65f6\u4f1a\u629b\u51fa\u9519\u8bef)

int k(int x){ return x; }\n\nchar k(long x){ return 'a'; }\n\nint main(){\ncout << k(1L);   // \u8f93\u51fa\uff1aa\ncout << k(1);    // \u8f93\u51fa\uff1a1\n}\n
"},{"location":"tech_accu/language/cpp/Part0/#4x-\u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570default-argument","title":"[4.x] \u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570Default Argument","text":"

\u5f62\u5f0f\uff1avoid fun(int a = 0);

// \u5408\u6cd5\nvoid fun(int x,int y);\n\nvoid fun(int x = 1,int y = 2){\n// ...\n}\n
// \u975e\u6cd5\uff0c\u56e0\u4e3ax\u4e0d\u80fd\u5728y\u524d\nvoid fun(int x = 1,int y); void fun(int x,int y = 2){\n// ...\n}\n
// \u5408\u6cd5\nvoid fun(int x = 1,int y = 2);\n\nvoid fun(int x,int y){\n// ...\n}\n
"},{"location":"tech_accu/language/cpp/Part0/#5x-\u5185\u8054\u51fd\u6570inline","title":"[5.x] \u5185\u8054\u51fd\u6570inline","text":"

\u4e3b\u8981\u4f5c\u7528\u662f\u5728\u51fd\u6570\u4f18\u5316\u4e0a\uff0c\u6548\u679c\u662f\u727a\u7272\u7a7a\u95f4\u6362\u6548\u7387\uff0c\u9002\u7528\u4e8e\u77ed\u5c0f\u4e14\u9891\u7e41\u4f7f\u7528\u7684\u51fd\u6570\u4ee3\u7801

\u5b9e\u73b0\u5c31\u662f\u7f16\u8bd1\u5668\u628a\u51fd\u6570\u5185\u5bb9\u8d34\u5230\u8c03\u7528\u51fd\u6570\u7684\u5730\u65b9\u6765\u51cf\u5c11\u6808\u6d88\u8017

"},{"location":"tech_accu/language/cpp/Part0/#6x-const","title":"[6.x] const","text":"

const\u5bf9\u6570\u636e\u7684\u4fdd\u62a4\u51fa\u73b0\u5728\u7f16\u8bd1\u65f6\u523b\uff0c\u5982\u679c\u5f3a\u884c\u901a\u8fc7\u67d0\u79cd\u624b\u6bb5\u83b7\u53d6\u5176\u5730\u5740\uff0c\u4ecd\u7136\u53ef\u4ee5\u4fee\u6539\uff0c\u7f16\u8bd1\u5668\u4ec5\u4ec5\u4fdd\u8bc1const\u4fee\u9970\u8fc7\u7684\u53d8\u91cf\u9664\u4e86\u5b9a\u4e49\u65f6\uff0c\u4e0d\u80fd\u4f5c\u4e3a\u5de6\u503c

"},{"location":"tech_accu/language/cpp/Part0/#7x-static","title":"[7.x] static","text":"

\u867d\u7136\u5728\u5355\u4e2a\u6587\u4ef6\u5185\uff0c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u58f0\u660e\u987a\u5e8f\u53ef\u4ee5\u786e\u8ba4\uff0c\u4f46\u6587\u4ef6\u95f4\u7684\u987a\u5e8f\u65e0\u6cd5\u786e\u8ba4\uff0c\u8fd9\u53ef\u80fd\u9020\u6210\u4f9d\u8d56\u95ee\u9898\uff0c\u6240\u4ee5\u5c3d\u53ef\u80fd\u907f\u514d\u591a\u6587\u4ef6\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f9d\u8d56\u5173\u7cfb

"},{"location":"tech_accu/language/cpp/Part0/#8x-\u547d\u540d\u7a7a\u95f4namespace--using\u5173\u952e\u5b57","title":"[8.x] \u547d\u540d\u7a7a\u95f4namespace & using\u5173\u952e\u5b57","text":"

\u53ef\u4ee5\u7528namespace\u6765\u5c01\u88c5\u4ee3\u7801

namespace <Space Name>{\n// \u5185\u5bb9\n} 

\u5728\u4e4b\u540e\u4f7f\u7528\u91cc\u9762\u7684\u53d8\u91cf/\u51fd\u6570\u9700\u8981\u4f7f\u7528\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26::\uff0c\u5373<Space Name>::<Function Name>();

"},{"location":"tech_accu/language/cpp/Part0/#9x-\u5de6\u503c\u4e0e\u53f3\u503c\u53f3\u503c\u5f15\u7528","title":"[9.x] \u5de6\u503c\u4e0e\u53f3\u503c&\u53f3\u503c\u5f15\u7528","text":""},{"location":"tech_accu/standard/","title":"\u6249\u9875","text":"

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/standard/BVH_format/","title":"BVH \u683c\u5f0f\u8be6\u89e3","text":"

\u7ea6 1312 \u4e2a\u5b57 116 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

"},{"location":"tech_accu/standard/BVH_format/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

BVH \u8868\u793a Biovision Hierarchy Data\uff0c\u662f Biovision \u52a8\u6355\u8bbe\u5907\u7684\u6570\u636e\u8f93\u51fa\u683c\u5f0f\uff0c\u662f BVA \u683c\u5f0f\u7684\u6539\u8fdb\uff0c\u5e7f\u6cdb\u5e94\u7528\u4e8e\u52a8\u753b\u5236\u4f5c\u8f6f\u4ef6\u3002\u800c\u8be5\u683c\u5f0f\u4ee5\u6587\u672c\u5f62\u5f0f\u50a8\u5b58\uff0c\u6240\u4ee5\u4fbf\u4e8e\u5f00\u53d1\u3002 \u4ece\u9700\u6c42\u7684\u89d2\u5ea6\u6765\u8bb2\uff0c\u4e3a\u4e86\u4f18\u96c5\u5730\u89e3\u51b3\u52a8\u753b\u5236\u4f5c\u95ee\u9898\uff0c\u5b83\u88ab\u5206\u4e3a\u4e86\u201c\u8499\u76ae\u201d\u548c\u201c\u9aa8\u9abc\u201d\u4e24\u4e2a\u90e8\u5206\u3002\u800c BVH \u5c31\u8d1f\u8d23\u5b58\u50a8 \u9aa8\u9abc\u67b6\u7ed3\u6784 \u548c \u52a8\u4f5c\u4fe1\u606f\u3002 BVH \u683c\u5f0f\u603b\u4f53\u6765\u8bf4\u6bd4\u8f83\u4f18\u79c0\uff0c\u4f46\u662f\u7f3a\u4e4f\u5bf9\u8fd0\u52a8\u65f6\u7684\u9aa8\u67b6\u59ff\u52bf\u7684\u5b8c\u6574\u89e3\u91ca\u3002\u56e0\u4e3a BVH \u662f\u901a\u8fc7 \u504f\u79fb(Offset) \u6765\u63cf\u8ff0\u8fd0\u52a8\u7684\uff0c\u5373\u4fdd\u5b58\u7684\u662f\u6bcf\u4e00\u5e27\u5173\u952e\u8282\u70b9\u5bf9\u4e8e\u7236\u8282\u70b9\u7684\u76f8\u5bf9\u4f4d\u79fb\u3002

"},{"location":"tech_accu/standard/BVH_format/#\u6587\u4ef6\u89e3\u6790","title":"\u6587\u4ef6\u89e3\u6790","text":"

A BVH file has two parts, a header section which describes the hierarchy and initial pose of the skeleton; and a data section which contains the motion data.

BVH \u6587\u4ef6\u6570\u636e\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

\u5e76\u4e14\u4ee5\u9012\u5f52\u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002 \u4e0b\u9762\u7ed9\u51fa\u4e00\u4e2a\u793a\u4f8b\u6587\u4ef6\uff0c\u7136\u540e\u505a\u8fdb\u4e00\u6b65\u5206\u6790\u3002

Summary
HIERARCHY\nROOT Hips\n{\nOFFSET  0.00    0.00    0.00\nCHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation\nJOINT Chest\n{\nOFFSET   0.00    5.21    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Neck\n{\nOFFSET   0.00    18.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Head\n{\nOFFSET   0.00    5.45    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00    3.87    0.00\n}\n}\n}\nJOINT LeftCollar\n{\nOFFSET   1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftUpArm\n{\nOFFSET   5.54    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowArm\n{\nOFFSET   0.00   -11.96   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftHand\n{\nOFFSET   0.00   -9.93    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\nJOINT RightCollar\n{\nOFFSET  -1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightUpArm\n{\nOFFSET  -6.07    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowArm\n{\nOFFSET   0.00   -11.82   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightHand\n{\nOFFSET   0.00   -10.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\n}\nJOINT LeftUpLeg\n{\nOFFSET   3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowLeg\n{\nOFFSET   0.00   -18.34   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftFoot\n{\nOFFSET   0.00   -17.37   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.46    0.00\n}\n}\n}\n}\nJOINT RightUpLeg\n{\nOFFSET  -3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowLeg\n{\nOFFSET   0.00   -17.63   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightFoot\n{\nOFFSET   0.00   -17.14   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.75    0.00\n}\n}\n}\n}\n}\nMOTION\nFrames:    2\nFrame Time: 0.033333\n8.03     35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.00   7.81     35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00   

\u8be5\u6837\u4f8b\u7ed9\u51fa\u4e86\u8fd9\u6837\u4e00\u4e2a\u9aa8\u67b6\uff1a

\\[ vR = vYXZ\\\\ vM= vM_{child}M_{parent}M_{grandparent}... \\]"},{"location":"tech_accu/standard/BVH_format/#header-section","title":"header section","text":"

HIERARCHY\u5173\u952e\u5b57\u6807\u8bc6header section\u7684\u5f00\u59cb\uff0c\u968f\u540e\u5728\u4e0b\u4e00\u884c\u5b9a\u4e49\u4e86\u6839\u8282\u70b9ROOT\uff0c\u800cHips\u5219\u662f\u8be5\u8282\u70b9\u7684\u540d\u79f0\u3002\u89c2\u5bdf\u4e0a\u65b9\u7ed9\u51fa\u7684\u9aa8\u67b6\u793a\u610f\u56fe\uff0cHips\u8282\u70b9\u4f5c\u4e3a\u6574\u4e2a\u9aa8\u67b6\u7684\u6839\u8282\u70b9\uff0c\u4fdd\u8bc1\u4e86\u6574\u4e2a\u6811\u5f62\u56fe\u7684\u6700\u5927\u6df1\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff0c\u51cf\u5c0f\u8bef\u5dee\u3002

\u5176\u540e\u7ed9\u51fa\u4e86OFFSET\u548cCHANNELS\u4e24\u4e2a\u5c5e\u6027\u3002

\u800c\u5728\u5176\u540e\uff0c\u4ee5JOINT\u4e3a\u5173\u952e\u5b57\u53c8\u8868\u793a\u4e86\u5176\u5b50\u8282\u70b9\u7684\u5b9a\u4e49\uff0c\u5373\u4ee5 \u9012\u5f52 \u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002

\u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a

\u800c\u5728\u9012\u5f52\u5b9a\u4e49\u7684\u672b\u7aef\uff0c\u4f60\u4f1a\u53d1\u73b0\u4e00\u4e2aEnd Site\uff0c\u5b83\u53ea\u6709OFFSET\u5c5e\u6027\u800c\u6ca1\u6709CHANNELS\u5c5e\u6027\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

One last note about the BVH hierarchy, the world space is defined as a right handed coordinate system with the Y axis as the world up vector. Thus you will typically find that BVH skeletal segments are aligned along the Y or negative Y axis (since the characters are often have a zero pose where the character stands straight up with the arms straight down to the side).

\u5373\u4e16\u754c\u5750\u6807\u7cfb\u4e00\u822c\u662f\u4e00\u4e2a\\(y\\)\u8f74\u671d\u4e0a\u7684\u53f3\u624b\u7cfb\uff0c\u5e76\u4e14\u9aa8\u67b6\u7684\u521d\u59cb\u59ff\u52bf\u603b\u662f T-Pose \uff0c\u5373\u4eba\u6253\u5f00\u53cc\u624b\uff0c\u50cf\u5b57\u6bcdT\u4e00\u6837\u7ad9\u5728\u5730\u4e0a\u3002

"},{"location":"tech_accu/standard/BVH_format/#data-section","title":"data section","text":"

MOTION\u5173\u952e\u5b57\u6807\u8bc6data section\u7684\u5f00\u59cb\uff0c\u4e4b\u540e\u4e24\u884c\u5206\u522b\u662fFrames\u548cFrame Time\uff0c\u8868\u793a \u5e27\u6570 \u548c \u5e27\u6570\u957f\u5ea6\uff08\u5373\u5e27\u7387\u5012\u6570\uff0c0.033333\u5c31\u662f30\u5e27\uff09\u3002 \u800c\u518d\u4e4b\u540e\uff0c\u5219\u662f\u771f\u6b63\u7684\u52a8\u753b\u6570\u636e\uff0c\u6839\u636eheader section\u7ed9\u51fa\u7684\u901a\u9053\u5b9a\u4e49\u4f9d\u6b21\u6765\u7ed9\u51fa\u6bcf\u4e00\u5e27\u7684\u76f8\u5bf9\u53d8\u5316\u6570\u636e\u3002

"},{"location":"tech_accu/standard/BVH_format/#\u7406\u89e3","title":"\u7406\u89e3","text":"

\u6839\u636e\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0cheader section\u7c7b\u4f3c\u4e8e\u5c06\u4e00\u6839\u6839\u68d2\u710a\u63a5\u5728\u80fd\u591f\u81ea\u7531\u65cb\u8f6c\u7684\u8282\u70b9\u4e0a\uff0c\u5e76\u89c4\u5b9a\u6570\u636e\u7684\u7ec4\u7ec7\u987a\u5e8f\uff0c\u5373\u89e3\u51b3\u4e86\u9aa8\u67b6\u201c\u957f\u4ec0\u4e48\u6837\u201d\u7684\u95ee\u9898\uff0c\u5e76\u6307\u5bfc\u5982\u4f55\u63cf\u8ff0\u9aa8\u67b6\u201c\u600e\u4e48\u52a8\u201d\uff1b \u800cdata section\u5219\u7c7b\u4f3c\u4e8e\u6309\u7167header section\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0c\u5177\u4f53\u8be5\u5982\u4f55\u6539\u53d8\u5404\u4e2a\u8282\u70b9\u7684\u72b6\u6001\u3002 \u9664\u4e86\u53d1\u9001\u7ed9ROOT\u7684\u4f4d\u7f6e\u5750\u6807\u6765\u8868\u793a\u9aa8\u67b6\u7684\u4f4d\u79fb\uff08\u5e73\u79fb\u77e9\u9635\uff09\uff0c\u4e4b\u540e\u7684\u4e00\u7cfb\u5217\u6570\u636e\u90fd\u8868\u793a\u8be5\u8282\u70b9\u8be5\u5982\u4f55\u65cb\u8f6c\uff08\u65cb\u8f6c\u77e9\u9635\uff09\uff0c\u90a3\u4e48\u7406\u6240\u5f53\u7136\u7684\uff0c\u8fd9\u4e2a\u8282\u70b9\u7684\u6240\u6709\u5b50\u8282\u70b9\u90fd\u4f1a\u4ee5\u8fd9\u4e2a\u8282\u70b9\u4e3a\u4e2d\u5fc3\u8fdb\u884c\u76f8\u5e94\u7684\u65cb\u8f6c\uff1b\u6bcf\u6b21\u9012\u5f52\u90fd\u91cd\u590d\u8fd9\u6837\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u6307\u6325\u6574\u4e2a\u9aa8\u67b6\u7684\u53d8\u6362\u3002 \u90a3\u4e48\uff0c\u5b9e\u9645\u4e0a\uff0c\u6bcf\u4e00\u4e2a\u8282\u70b9\u76f8\u5bf9\u4e8e\u6839\u8282\u70b9\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e9b\u53d8\u6362\u77e9\u9635\u6309\u7167\u987a\u5e8f\u7d2f\u4e58\u5f97\u5230\u3002

"},{"location":"tech_accu/standard/BVH_format/#\u53c2\u8003\u8d44\u6599","title":"\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/","title":"\u6249\u9875","text":"

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/tool/Colab/","title":"Google Colaboratory","text":"

\u7ea6 477 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

\u7b80\u4ecb

Google Colab \u662f\u4e00\u4e2a\u5141\u8bb8\u7f16\u5199\u548c\u6267\u884c\u4ee3\u7801\u7684\u4ea4\u4e92\u5f0f\u73af\u5883\uff0c\u4ee5\u4e0b\u662f\u5206\u522b\u4e3a Colab \u7684\u7f51\u5740\u4ee5\u53ca\u5b98\u65b9 Q&A\u3002

\u5bf9\u6211\u6765\u8bf4\uff0cGolab \u4e3a\u6211\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6bd4\u8f83\u65b9\u4fbf\u4e14\u6709\u4e00\u5b9a\u7b97\u529b\u7684\u5728\u7ebf\u5e73\u53f0\uff0c\u800c\u4e14\u6211\u89c9\u5f97\u4f5c\u4e3a\u7b14\u8bb0\u672c\u8c8c\u4f3c\u4e5f\u633a\u597d\u7528\u7684\u3002

\u7b80\u5355\u6765\u8bf4\uff0cColab \u4e2d\u5b58\u5728 \u6587\u672c\u5355\u5143 \u548c \u4ee3\u7801\u5355\u5143 \u8fd9\u4e24\u79cd\u6a21\u5757\u3002

\u4ece\u7528\u9014\u4e0a\u6765\u8bb2\uff0cColab \u5728\u6570\u636e\u79d1\u5b66\u548c\u673a\u5668\u5b66\u4e60\u8fd9\u4e24\u65b9\u9762\u6709\u8f83\u5927\u7528\u5904\u3002

"},{"location":"tech_accu/tool/Colab/#\u6587\u4ef6\u4e92\u52a8","title":"\u6587\u4ef6\u4e92\u52a8","text":"

Colab \u81ea\u5e26\u6587\u4ef6\u6d4f\u89c8\u754c\u9762

\u901a\u8fc7\u8fd9\u4e09\u4e2a\u6309\u94ae\u53ef\u4ee5\u5b9e\u73b0 \u4e0a\u4f20\u6587\u4ef6\u3001\u5237\u65b0\u3001\u88c5\u8f7d Google \u4e91\u76d8\uff1a

"},{"location":"tech_accu/tool/Colab/#\u786c\u4ef6\u52a0\u901f","title":"\u786c\u4ef6\u52a0\u901f","text":"

\u5173\u4e8eGPU\u52a0\u901f\u7684\u5177\u4f53\u4fe1\u606f\uff0c\u8bf7\u67e5\u770b\u8fd9\u91cc \ud83d\udd17\u3002

"},{"location":"tech_accu/tool/Colab/#\u8d44\u6e90\u9650\u5236","title":"\u8d44\u6e90\u9650\u5236","text":""},{"location":"tech_accu/tool/Colab/#\u5947\u6280\u6deb\u5de7","title":"\u5947\u6280\u6deb\u5de7","text":""},{"location":"tech_accu/tool/Colab/#\u5360\u7528\u663e\u5b58","title":"\u5360\u7528\u663e\u5b58","text":"

\u5f53\u4f60\u7684\u6574\u4e2a\u9879\u76ee\u9700\u8981GPU\u4f46\u662f\u73b0\u5728\u4e0d\u592a\u9700\u8981\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u8fd9\u6837\u4e00\u6bb5\u4ee3\u7801\u6765\u5148\u5360\u7528\u4e00\u90e8\u5206\u663e\u5b58\u3002

import torch\n## about 1.1 GB\na = torch.Tensor([1000, 1000, 1000]).cuda()\n
"},{"location":"tech_accu/tool/Colab/#\u67e5\u770b\u663e\u5361\u4fe1\u606f","title":"\u67e5\u770b\u663e\u5361\u4fe1\u606f","text":"
!nvidia-smi\n
"},{"location":"tech_accu/tool/Colab/#\u6302\u8f7d-google-drive","title":"\u6302\u8f7d Google Drive","text":"
from google.colab import drive\ndrive.mount('/content/drive/')\n
"},{"location":"tech_accu/tool/Colab/#\u53ef\u53c2\u8003\u8d44\u6599","title":"\u53ef\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/Colab/#\u5176\u4ed6\u8d44\u6599","title":"\u5176\u4ed6\u8d44\u6599","text":""},{"location":"tech_accu/tool/Git/","title":"Git","text":"

\u7ea6 67 \u4e2a\u5b57

Git \u662f\u4ee3\u7801\u534f\u4f5c\u7684\u91cd\u8981\u5de5\u5177\uff0c\u540c\u65f6\u4e5f\u5bf9\u4e2a\u4eba\u4ee3\u7801\u7684\u7248\u672c\u7ba1\u7406\u6709\u91cd\u8981\u4f5c\u7528\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bf4 Git \u662f\u7834\u5199\u4ee3\u7801\u7684\u4eba\u7684\u5fc5\u5907\u6280\u80fd\u4e4b\u4e00\u3002

List

"},{"location":"tech_accu/tool/Git/Commands/","title":"Git Commands","text":"

\u7ea6 1464 \u4e2a\u5b57 110 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 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\u5c06\u628a\u76ee\u5149\u653e\u5728\u5177\u4f53\u7684git \u547d\u4ee4 \u7684\u4ecb\u7ecd\u4e0e\u4f7f\u7528\uff0c\u65e8\u5728\u6307\u5bfc\u8fdb\u884c\u5177\u4f53\u7684\u5de5\u4f5c\u3002

Git \u6709\u8bb8\u591a\u547d\u4ee4\uff0c\u4f46\u662f\u5176\u5b9e\u5e38\u7528\u7684\u5c31\u56fe\u4e2d\u7684\u8fd9\u4e48\u51e0\u4e2a\uff0c\u751a\u81f3\u5728 \u521a\u5f00\u59cb \u5b66\u4e60\u4f7f\u7528\u7684\u65f6\u5019\u53ea\u9700\u8981\u8bb0\u4f4f\u5176\u4e2d\u7684\u4e00\u4e24\u4e2a\uff0c\u4f46\u662f

\u8fd9\u5e76\u4e0d\u662f\u8bf4\u5176\u4ed6\u547d\u4ee4\u5c31\u662f\u6ca1\u7528\u7684\uff0c\u6211\u4f1a\u5728\u8fd9\u91cc\u6309\u7167\u4f7f\u7528\u573a\u666f\u5206\u7c7b\uff0c\u5c3d\u53ef\u80fd\u5730\u4ecb\u7ecd Git \u547d\u4ee4\u3002

\u5e38\u7528\u547d\u4ee4

\u7531\u4e8e\u4e00\u822c\u6765\u8bf4\u8fd0\u884c\u547d\u4ee4\u90fd\u662f\u4ee5\u672c\u5730\u89c6\u89d2\uff0c\u6240\u4ee5\u8fd9\u91cc\u7684\u300c\u4f7f\u7528\u573a\u666f\u300d\u7684\u5212\u5206\u4e5f\u662f\u4ee5\u672c\u5730\u89c6\u89d2\u5c55\u5f00\u7684\u3002 \u5e76\u4e14\u5728\u67d0\u4e9b\u9700\u8981\u6d89\u53ca\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5730\u65b9\u4e3b\u8981\u4ee5 Github \u7684\u4f7f\u7528\u4e3a\u53c2\u8003\u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u7b80\u6d01\u7248\u672c","title":"\u7b80\u6d01\u7248\u672c","text":"

\u8be5\u6761\u76ee\u4e3b\u8981\u9002\u7528\u4e8e\u521d\u5b66\u4e0e\u7b80\u5355\u4f7f\u7528 Git \uff0c\u5e76\u4e0d\u9002\u5408\u957f\u671f\u7ef4\u62a4\u7684\u5927\u578b\u9879\u76ee\u3002

\u5feb\u9910
# \u5728 Github \u521b\u5efa\u4ed3\u5e93\n# \u83b7\u53d6\u4ed3\u5e93\u7684 http / SSH clone \u547d\u4ee4\n\n# \u4ece\u8fdc\u7a0b\u5c06\u4ed3\u5e93\u514b\u9686\u5230\u672c\u5730\ngit clone <repo-url>\n\n# \u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u540e\u5c06\u4fee\u6539\u6dfb\u52a0\u5230\u6682\u5b58\u533a\ngit add -A # \u6dfb\u52a0\u6240\u6709\u4fee\u6539\ngit add .  # \u6dfb\u52a0\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u4fee\u6539\n\n# \u63d0\u4ea4\u4fee\u6539\ngit commit -m \"Write commit message here.\"\n\n# push \u5230\u8fdc\u7a0b\u4ed3\u5e93\ngit push origin\n
"},{"location":"tech_accu/tool/Git/Commands/#\u914d\u7f6e","title":"\u914d\u7f6e","text":"

Git \u7684\u914d\u7f6e\u6587\u4ef6\u540d\u53eb .gitconfig\uff0c\u7528\u6765\u5b58\u653e\u4e00\u4e9b\u914d\u7f6e\u4fe1\u606f\uff0c\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u7684\u4e3a\u5168\u5c40\u914d\u7f6e\u4fe1\u606f\uff0c\u800c\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u7684\u5219\u4e3a\u9879\u76ee\u914d\u7f6e\u4fe1\u606f\u3002

# \u663e\u793a\u914d\u7f6e\ngit config --list\n
"},{"location":"tech_accu/tool/Git/Commands/#\u751f\u6210\u672c\u5730\u4ed3\u5e93","title":"\u751f\u6210\u672c\u5730\u4ed3\u5e93","text":"

\u672c\u5730\u751f\u6210\u4ed3\u5e93\u4e3b\u8981\u6709\u4e24\u79cd\u9014\u5f84\uff0c\u4e00\u662f\u5728\u672c\u5730\u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\uff0c\u800c\u662f\u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\u3002

# \u5728\u5f53\u524d\u76ee\u5f55 . \u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\ngit init\n\n# \u521b\u5efa\u4e00\u4e2a\u540d\u4e3a <dir-name> \u7684\u76ee\u5f55\uff0c\u5c06\u5176\u521d\u59cb\u5316\u4e3a\u4e00\u4e2a Git \u4ed3\u5e93\ngit init <dir-name>\n\n# \u4ece <repo-url> \u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\uff08\u5305\u62ec\u6240\u6709\u7684 git \u4fe1\u606f\uff09\ngit clone <repo-url>\n

\u4ece\u6587\u4ef6\u89d2\u5ea6\u6765\u8bb2\uff0c\u5b9e\u9645\u4e0a\u5b83\u662f\u751f\u6210\u4e86\u4e00\u4e2a\u6709.git\u6587\u4ef6\u5939\u7684\u6587\u4ef6\u5939\uff0c\u800c.git\u6587\u4ef6\u5939\u5b58\u50a8\u4e86 Git \u6240\u9700\u8981\u7684\u5927\u90e8\u5206\u4fe1\u606f\u3002 \u4f7f\u7528\u5e38\u89c1\u7684 shell \u8fdb\u5165\u4ed3\u5e93\u6587\u4ef6\u5939\u540e\uff0c\u4e00\u822c\u4f1a\u6709\u4e00\u4e2a label \u8868\u793a\u4f60\u5df2\u7ecf\u8fdb\u5165\u4e86\u4e00\u4e2a\u4ed3\u5e93\u7684\u67d0\u4e2a\u5206\u652f\u4e86\u3002\u6bd4\u5982\u8fdb\u5165\u4e00\u4e2a\u65b0\u7684\u4ed3\u5e93\u65f6\uff0c\u4f1a\u6709\u4e00\u4e2amaster\u7684 label \uff0c\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u4e3b\u8981\u770b\u4f60\u7684 shell \u548c\u4e3b\u9898\u4e86\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u672c\u5730\u76f4\u63a5\u521b\u5efa\u7684\u4ed3\u5e93\u4ec5\u4ec5\u53ea\u662f\u4e00\u4e2a\u672c\u5730\u4ed3\u5e93\uff0c\u4e0d\u5177\u5907\u8fdc\u7a0b\u534f\u4f5c\u529f\u80fd\uff0c\u9700\u8981\u8fdb\u884c\u5bf9\u5e94\u7684\u914d\u7f6e\uff0c\u53c2\u8003 \"Git Workflow\" \u6761\u76ee\uff1b\u800c\u4e00\u822c\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u514b\u9686\u4e0b\u6765\u7684\u4ed3\u5e93\u90fd\u5df2\u7ecf\u7ecf\u8fc7\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u8fdc\u7a0b\u534f\u4f5c\u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u7248\u672c\u7ba1\u7406","title":"\u7248\u672c\u7ba1\u7406","text":"

Git \u57fa\u4e8e\u7248\u672c\u4e4b\u95f4\u7684\u5dee\u5f02\u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\uff0c\u4f7f\u7528 Git \u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\u4e3b\u8981\u6307\u5728\u505a\u5b8c\u7279\u5b9a\u4fee\u6539\u4ee5\u540e\u5c06\u5176\u6dfb\u52a0\u5230\u5bf9\u5e94\u5206\u652f\u4e2d\u3002 \u5728\u8003\u8651 Git \u64cd\u4f5c\u4e4b\u524d\uff0c\u4f60\u53ef\u4ee5\u653e\u5fc3\u5730\u8fdb\u884c\u4f60\u7684\u4ee3\u7801\u7f16\u8f91\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8bb0\u5f97\u5728\u5408\u9002\u7684\u65f6\u673a\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","title":"\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","text":"

\u901a\u8fc7\u5982\u4e0b\u6307\u4ee4\u53ef\u4ee5 \u67e5\u770b\u5dee\u5f02\u6587\u4ef6\uff1a

# \u663e\u793a\u68c0\u6d4b\u5230\u5dee\u5f02\u7684\u6587\u4ef6\uff0c\u5b83\u4eec\u6b63\u5728\u7b49\u5f85\u88ab\u63d0\u4ea4\ngit status\n
"},{"location":"tech_accu/tool/Git/Commands/#\u6dfb\u52a0\u5230\u6682\u5b58\u533a","title":"\u6dfb\u52a0\u5230\u6682\u5b58\u533a","text":"

\u5728\u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u5de5\u4f5c\u540e\u9700\u8981\u5c06\u4ee3\u7801 \u6dfb\u52a0 \u5230\u6682\u5b58\u533a\uff1a

# \u5c06 <target> \u4e2d\u7684\u4fee\u6539\u6dfb\u52a0\u7684\u6682\u5b58\u533a\uff0c\u6587\u4ef6\u5939\u548c\u6587\u4ef6\u540c\u7406\uff0c'.' \u540c\u7406 \ngit add <target>\n\n# \u5bf9\u4e8e\u6240\u6709\u7684\u4fee\u6539\u4f9d\u6b21\u8fdb\u884c\u6dfb\u52a0\u786e\u8ba4\uff08\u5305\u62ec\u5355\u4e00\u6587\u4ef6\u7684\u591a\u5904\u4fee\u6539\uff09\ngit add -p\n\n# \u7528\u4ea4\u4e92\u5f0f\u7684\u65b9\u6cd5\u8fdb\u884c\u6dfb\u52a0\ngit add -i\n
"},{"location":"tech_accu/tool/Git/Commands/#\u63d0\u4ea4\u5230\u4ed3\u5e93","title":"\u63d0\u4ea4\u5230\u4ed3\u5e93","text":"

\u6dfb\u52a0\u5b8c\u540e\u9700\u8981\u8fdb\u884c \u63d0\u4ea4\uff0c\u5728\u4ed3\u5e93\u4e2d\u5f62\u6210\u4e00\u4e2a\u8282\u70b9\uff1a

# \u63d0\u4ea4\u5230\u4ed3\u5e93\ngit commit -m \"Write commit message here.\"\n\n# \u4fee\u6b63\u4e0a\u4e00\u6b21\u63d0\u4ea4\uff0c\u610f\u601d\u662f\u8bf4\u4f1a\u6269\u5145\u5e76\u66ff\u4ee3\u4e0a\u4e00\u6b21\u63d0\u4ea4\n# \u5e94\u7528\u573a\u666f\u5982\uff1a\u4e0a\u4e00\u6b21\u63d0\u4ea4\u6709\u9057\u6f0f\u3001\u4e0a\u4e00\u6b21\u63d0\u4ea4\u7684\u63d0\u4ea4\u4fe1\u606f\u6709\u95ee\u9898\u7b49\ngit commit --amend -m \"Write commit message here.\"\n
"},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","title":"\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","text":"

\u5b8c\u6210\u63d0\u4ea4\u540e\u8fd9\u4e00\u6b21\u4fee\u6539\u5c31\u4f1a\u88ab\u5199\u5165\u5386\u53f2\u8bb0\u5f55\u4e2d\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7log\u6765 \u67e5\u770b\uff1a

git log\n
"},{"location":"tech_accu/tool/Git/Commands/#\u56de\u6eaf--\u62b5\u6d88\u8bb0\u5f55","title":"\u56de\u6eaf / \u62b5\u6d88\u8bb0\u5f55","text":"

\u5728log\u4e2d\u53ef\u4ee5\u67e5\u8be2\u5f97\u5230\u6bcf\u4e00\u6b21commit\u7684\u54c8\u5e0c\uff0c\u5f97\u5230\u8fd9\u4e9b\u54c8\u5e0c(\u4e5f\u53ef\u4ee5\u4f7f\u7528\u6807\u7b7e)\u4ee5\u540e\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8fdb\u884c \u56de\u6eaf \u548c \u62b5\u6d88 \u64cd\u4f5c\uff1a

# \u56de\u6eaf\u5230\u7279\u5b9a commit \uff0c\u6bd4\u8f83\u5371\u9669\ngit reset HEAD                  # \u56de\u6eaf\u5230\u4e0a\u4e00\u4e2a commit \uff0c\u6548\u679c\u4e0a\u6e05\u7a7a\u4e86\u6682\u5b58\u533a\uff0c\u4e0d\u5f71\u54cd\u5de5\u4f5c\u533a\ngit reset --hard <commit-id>    # \u629b\u5f03\u5f53\u524d\u7684\u5de5\u4f5c\u533a\u5e76\u56de\u6eaf\u5230\u67d0\u4e2a\u7248\u672c\n\n# \u62b5\u6d88\u4e00\u6b21 commit \uff0c\u4ea7\u751f\u4e00\u4e2a\u4e0e\u76ee\u6807 commit \u4e92\u9006\u7684 commit\ngit revert HEAD                     # \u62b5\u6d88\u4e0a\u4e00\u6b21 commit\ngit revert <commit-id>              # \u62b5\u6d88\u7279\u5b9a commit\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5220\u9664--\u79fb\u52a8\u91cd\u547d\u540d","title":"\u5220\u9664 / \u79fb\u52a8(\u91cd\u547d\u540d)","text":"

\u5220\u9664 \u6587\u4ef6\u548c \u79fb\u52a8(\u91cd\u547d\u540d) \u6587\u4ef6\u53ef\u4ee5\u4f7f\u7528rm\u548cmv\uff0c\u5173\u4e8erm(mv)\u548cgit rm(git mv)\u7684\u533a\u522b\u53ef\u4ee5\u770b\u8fd9\u91cc\u3002 \u7b80\u5355\u6765\u8bf4\u5c31\u662f\uff0cgit rm <file>\u7b49\u4ef7\u4e8erm <file> ; git add <file>\uff1bmv\u540c\u7406\uff0c\u4f46\u662f\u4f60\u65e0\u6cd5\u628a\u4e00\u4e2a\u6587\u4ef6\u901a\u8fc7git mv\u79fb\u52a8\u5230 repo dir \u4e4b\u5916\u3002

# \u5220\u9664\u67d0\u4e2a\u6587\u4ef6\ngit rm <file>\n# \u79fb\u52a8(\u91cd\u547d\u540d)\u67d0\u4e2a\u6587\u4ef6\ngit mv <from> <to>\n\n# \u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u8fd8\u53ef\u4ee5\u505c\u6b62\u5bf9\u67d0\u4e2a\u6587\u4ef6\u7684\u8ffd\u8e2a\uff0c\u6700\u5e38\u7528\u7684\u60c5\u51b5\u4e00\u822c\u548c`.gitignore`\u6709\u5173\ngit rm --cache <file>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u6807\u7b7e\u64cd\u4f5c","title":"\u6807\u7b7e\u64cd\u4f5c","text":"

\u4e0a\u9762\u8bb8\u591a\u6d89\u53ca\u5b9a\u4f4d\u7279\u5b9a commit \u7684\u64cd\u4f5c\u90fd\u9700\u8981\u83b7\u53d6 commit \u7684\u54c8\u5e0c\u3002\u4e0d\u8fc7\u5982\u679c\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7248\u672c\u8fdb\u884c\u4e00\u4e9b\u6807\u7b7e\u7ba1\u7406\uff0c\u90a3\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee\u6807\u7b7e\u6765\u7d22\u5f15\u7279\u5b9a commit \uff0c\u56e0\u800c\uff0ctag \u5b9e\u9645\u4e0a\u662f\u4e0d\u53ef\u91cd\u590d\u7684\u3002

# \u4e3a\u7279\u5b9a commit \u6dfb\u52a0 tag\ngit tag <tag name> <commit id>\n\n# \u5220\u9664\u7279\u5b9a tag\ngit tag -d <tag name>\n

\u53e6\u5916\uff0c\u9700\u8981\u63d0\u9192\u7684\u662f\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0bgit push\u4e0d\u4f1a\u5c06 tag \u4e0a\u4f20\u5230\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u9700\u8981\u5728\u547d\u4ee4\u540e\u52a0\u5165--tags\u6765\u4e00\u6b21\u6027 push \u6240\u6709\u7684 tag \u6216\u8005\u6dfb\u52a0<tag name>\u6765\u4e0a\u4f20 tag \u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u534f\u4f5c","title":"\u8fdc\u7a0b\u534f\u4f5c","text":"

\u8fdc\u7a0b\u7ba1\u7406\u4e3b\u8981\u6307\u591a\u4eba\u9879\u76ee\u65f6\u9700\u8981\u901a\u8fc7\u8fdc\u7a0b\u4ed3\u5e93\u6765\u5b8c\u6210\u534f\u4f5c\u3002\u8fd9\u91cc\u4ee5 GitHub \u4e3a\u4f8b\u3002 \u5f53\u4f60\u5728 Github \u521b\u5efa\u4e00\u4e2a\u7a7a repo \u4ee5\u540e\uff0c\u4f1a\u6709\u8fd9\u6837\u4e00\u4e2a\u9ed8\u8ba4\u9875\u9762\uff1a

IsshikiHugh \u662f\u6211\u7684 User ID\uff0cnothing \u662f\u6211\u7684 Repo Name

\u6211\u4eec\u91cd\u70b9\u5173\u6ce8\u4e2d\u95f4\u4e24\u4e2a\u4ee3\u7801\u6846\uff0c\u5199\u7684\u5df2\u7ecf\u975e\u5e38\u6e05\u695a\u4e86\u3002

create a new repository on the command line\u6307\u5bfc\u4f60\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7a7a\u4ed3\u5e93\uff0c\u5e76\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\u94fe\u63a5\uff1b

push an existing repository from the command line\u6307\u5bfc\u4f60\u5982\u4f55\u5c06\u8fdc\u7a0b\u4ed3\u5e93\u548c\u672c\u5730\u4ed3\u5e93\u94fe\u63a5\u8d77\u6765\uff0c\u5e76 push \u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","title":"\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","text":"

\u6765\u81ea GitHub \u7684\u6307\u5bfc\u6587\u4ef6\u4e2d\u6700\u6838\u5fc3\u7684\u4e00\u6761\u6307\u4ee4\u662f\u5982\u4f55\u94fe\u63a5\u672c\u5730\u4ed3\u5e93\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\uff1a

# \u5728\u672c\u5730\u6dfb\u52a0\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u547d\u540d\u4e3a <remote name> \uff0c\u6ce8\u610f\u8fd9\u91cc\u7684 <url> \u5e76\u4e0d\u662f\u6d4f\u89c8\u5668\u4e0a\u9762\n# \u90a3\u4e2a\uff0c\u800c\u662f\u4ece github \u590d\u5236\u8fc7\u6765\u7684 http \u6216\u8005 ssh \u63a8\u9001\ngit remote add <remote name> <url>\n# \u5e38\u7528\u7684 <remote name> \u662f origin\n
\u9664\u6b64\u4e4b\u5916\uff0c\u5173\u4e8e\u8fdc\u7a0b\u4ed3\u5e93\u7684\u76f8\u5173\u547d\u4ee4\u8fd8\u6709\u5982\u4e0b\uff1a
git remote -v                  # \u663e\u793a\u8fdc\u7a0b\u4ed3\u5e93(\u8be6\u7ec6\u4fe1\u606f)\ngit remote rm <remote name>    # \u89e3\u9664\u4e0e\u5bf9\u5e94\u8fdc\u7a0b\u4ed3\u5e93\u7684\u7ed1\u5b9a\u5173\u7cfb\ngit remote rename <from> <to>  # \u91cd\u547d\u540d\u7279\u5b9a\u8fdc\u7a0b\u4ed3\u5e93\n

"},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","title":"\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","text":"

\u4e3b\u8981\u6709\u4e24\u79cd\u65b9\u5f0f\uff0c\u5373pull\u548cfetch\uff0c\u533a\u522b\u5728\u4e8efetch\u5e76\u4e0d\u4f1a\u5408\u5e76\u5185\u5bb9\uff0c\u800c\u4ec5\u4ec5\u662f\u4e0b\u8f7d\u8fdc\u7a0b\u4ed3\u5e93\u4e2d\u7684\u53d8\u52a8\u4fe1\u606f\u3002\u7b80\u5355\u6765\u8bf4\u5c31\u662fpull\u7b49\u6548\u4e8efetch\u5e76merge\u3002

# \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u4e0b\u8f7d\u53d8\u52a8\u5185\u5bb9\ngit fetch <remote name>\n\n# \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u53d8\u52a8\u5185\u5bb9\u5e76\u4e14\u5408\u5e76\u5230\u6307\u5b9a\u5206\u652f\ngit pull <remote name> <branch>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","title":"\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","text":"

\u5728\u672c\u5730\u5b8c\u6210 commit \u64cd\u4f5c\u540e\uff0c\u5c31\u53ef\u4ee5 push \u5230\u8fdc\u7a0b\u4ed3\u5e93\uff1a

# \u63a8\u9001 <branch> \u7684\u5185\u5bb9\u5230 <remote> \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\uff0c\u8fd9\u610f\u5473\u7740\u5728\u8fd9\u4e2a\u5206\u652f\u91cc\uff0c\n# \u4e0b\u4e00\u6b21 push \u53ea\u9700\u8981\u8f93\u5165 git push \u5373\u53ef\ngit push -u <remote> <branch>\n# eg: \u63a8\u9001 master \u5206\u652f\u7684\u5185\u5bb9\u5230 origin \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\ngit push -u origin master\n\ngit push --force    # \u5f3a\u5236\u63a8\u9001\u5f53\u524d\u5206\u652f\uff0c\u5373\u4f7f\u6709\u51b2\u7a81\u5b58\u5728\n--all      # \u63a8\u9001\u6240\u6709\u5206\u652f\u7684\u5185\u5bb9\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u7ba1\u7406","title":"\u5206\u652f\u7ba1\u7406","text":""},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5206\u652f","title":"\u67e5\u770b\u5206\u652f","text":"
git branch        # \u663e\u793a\u672c\u5730\u6240\u6709\u5206\u652f\n-r     # \u663e\u793a\u8fdc\u7a0b\u6240\u6709\u5206\u652f\n-a     # \u663e\u793a\u6240\u6709\u5206\u652f\n
"},{"location":"tech_accu/tool/Git/Commands/#\u65b0\u5efa\u5206\u652f--\u5207\u6362\u5206\u652f--\u8bbe\u7f6e\u4e0a\u6e38","title":"\u65b0\u5efa\u5206\u652f / \u5207\u6362\u5206\u652f / \u8bbe\u7f6e\u4e0a\u6e38","text":"
# \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\uff0c\u4f46\u4e0d\u5207\u6362\ngit branch <branch name>\n# \u901a\u8fc7 checkout \u6765\u5207\u6362\u5206\u652f\uff0c\u6bd4\u5982\u8fdb\u5165\u5230\u521a\u521a\u521b\u5efa\u7684\u5206\u652f\u6c47\u603b\ngit checkout <branch>         # \u8be5\u547d\u4ee4\u4f1a\u66f4\u65b0\u5de5\u4f5c\u533a\n# \u521b\u5efa\u5b8c\u5206\u652f\u540e\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u8bbe\u7f6e\u4e0a\u6e38\ngit branch --set-upstream <local branch> <remote branch>\n\n# \u5c06\u4e0a\u9762\u7684\u547d\u4ee4\u8fdb\u884c\u96c6\u6210\uff0c\u6709\uff1a\n\n# \u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\u5e76\u5207\u6362\ngit checkout -b <branch name>\n# \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <local branch> \u7684\u65b0\u5206\u652f\uff0c\u5e76\u8bbe <remote branch> \u4e3a\u4e0a\u6e38\ngit branch --track <local branch> <remote branch>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5408\u5e76","title":"\u5206\u652f\u5408\u5e76","text":"
# \u5c06\u6307\u5b9a\u5206\u652f\u5408\u5e76\u5230\u5f53\u524d\u5206\u652f\uff0c\u9700\u8981\u5904\u7406\u51b2\u7a81\u90e8\u5206\uff08\u6c9f\u901a\u534f\u5546\u3001\u624b\u52a8\u89e3\u51b3\uff09\ngit merge <branch>\n\n# \u5c06\u7279\u5b9a commit \u5408\u5e76\u8fdb\u5f53\u524d\u5206\u652f\ngit cherry-pick <commit id>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5220\u9664","title":"\u5206\u652f\u5220\u9664","text":"
# \u5220\u9664\u672c\u5730\u5206\u652f\ngit branch -d <branch>\n\n# \u5220\u9664\u8fdc\u7a0b\u5206\u652f\ngit push <remote> --delete <branch>\ngit branch -dr <remote>/<branch>\n# eg:\ngit branch -dr origin/testbrach\n
"},{"location":"tech_accu/tool/Git/Commands/#\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684--\u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","title":"\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684 / \u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","text":""},{"location":"tech_accu/tool/Git/Commands/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Git/Workflow/","title":"Git Workflow","text":"

\u7ea6 1267 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u7b80\u4ecb

\u672c\u6587\u5185\u5bb9\u57fa\u4e8e\u6211\u81ea\u5df1\u7684\u7406\u89e3\u548c\u4e00\u4e9b\u6587\u7ae0\uff0c\u662f\u5b66\u4e60\u7b14\u8bb0\uff0c\u4f46\u540c\u65f6\u6211\u4e5f\u5e0c\u671b\u5b83\u80fd\u88ab\u4f5c\u4e3a\u4e00\u4e2a\u5b66\u4e60\u53c2\u8003\u8d44\u6599\u3002

\u6240\u4ee5\u5982\u679c\u6709\u9519\u8bef\u8bf7\u53ca\u65f6\u8bc4\u8bba\u6216\u8005\u8054\u7cfb\u6211\uff0c\u5e0c\u671b\u80fd\u4e3a\u5927\u5bb6\u63d0\u4f9b\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u5b66\u4e60\u53c2\u8003\uff01

\u56e0\u4e3a\u6211\u81ea\u5df1\u7684\u5f00\u53d1\u7ecf\u5386\u6709\u9650\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u7406\u89e3\u662f\u5408\u9002\u4e14\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u5e0c\u671b\u5927\u5bb6\u72e0\u72e0\u5730 educate \u6211\uff01

\u672c\u6761\u76ee\u4e3b\u8981\u4ecb\u7ecd\u6709\u5173 Git Workflow \u7684\u6982\u5ff5\u6027\u8d28\u548c\u6307\u5bfc\u6027\u8d28\u7684\u4e00\u4e9b\u5185\u5bb9\uff0c\u5b83\u4eec\u5e76\u4e0d\u5177\u4f53\uff0c\u4f46\u662f\u4f1a\u6307\u5bfc\u60a8\u7684\u4f7f\u7528\u3002

\u7531\u4e8e mkdocs \u5e76\u6ca1\u6709\u6807\u7b7e\u529f\u80fd\uff0c\u6240\u4ee5\u5176\u5b9e\u8fd8\u662f\u8bed\u96c0\u4e0a\u7684\u6587\u7ae0\u66f4\u597d\u770b\uff0c\u4f46\u662f\u6211\u5e76\u4e0d\u6253\u7b97\u66f4\u65b0\u8bed\u96c0\u4e86\uff0c\u6545\u8fd9\u91cc\u53ea\u653e\u4e00\u4e2a\u4ee5\u524d\u7684\u6307\u8def\u94fe\u63a5\uff1a\ud83d\udd17\u3002

Git branch \u53ef\u89c6\u5316\u7ec3\u4e60\u7f51\u7ad9\uff1ahttps://note.isshikih.top/tech_accu/tool/Git/Workflow/

"},{"location":"tech_accu/tool/Git/Workflow/#\u4f55\u4e3a-git-workflow","title":"\u4f55\u4e3a 'Git Workflow'","text":"

Git Workflow \u662f\u4e00\u79cd\u89c4\u8303\u7684\u5de5\u4f5c\u6d41\u7a0b\uff0c\u800c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u5de5\u5177\u6216\u8005\u6280\u672f\uff0c\u5f53\u7136\u8c8c\u4f3c\u6709\u4e00\u4e2a\u53eb\u505a Gitflow \u7684\u5de5\u5177\uff0c\u4f46\u5728\u672c\u6587\u4e2d\u6682\u65f6\u4e0d\u4ecb\u7ecd\u3002 \u73b0\u5728\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684 Workflow \u4e3b\u8981\u6709\u4e09\u79cd\uff1a

\u4ed6\u4eec\u7684\u5173\u7cfb\u662f\uff0c\u4f9d\u6b21\u5438\u6536\u4e0e\u6539\u8fdb\uff0c\u5404\u6709\u7279\u70b9\uff0c\u4e14\u4e0e\u5bf9\u5e94\u7684\u4f7f\u7528\u5e73\u53f0\u76f8\u9002\u5e94\uff0c\u4e0b\u9762\u5c06\u5206\u6761\u6982\u8ff0\u3002 \u5728\u4e0d\u540c\u7684 Workflow \u4e2d\uff0c\u6700\u4e3b\u8981\u7684\u533a\u522b\u5c31\u662f\u4e0d\u540c\u5206\u652f\u95f4\u7684\u5408\u4f5c\u5f62\u5f0f\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u5982\u679c\u4f60\u5bf9 Git \u7684\u5206\u652f\u8fd8\u4e0d\u662f\u5f88\u719f\u6089\uff0c\u8bf7\u5148\u53c2\u8003 Git Commands \u7684\u90e8\u5206\u5185\u5bb9\uff0c\u7b80\u5355\u4e86\u89e3\u4e00\u4e0b\u57fa\u7840\u6307\u4ee4\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#git-workflow_1","title":"Git Workflow","text":"

[Source] https://gitbook.tw/chapters/gitflow/why-need-git-flow

Tips: \u5728\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u4e00\u4e9b\u8bf4\u660e\u65f6\uff0c\u53ef\u4ee5\u8054\u7cfb\u4e0a\u65b9\u8fd9\u5f20\u56fe\u8fdb\u884c\u7406\u89e3\u3002

\u5728 Git Workflow \u4e2d\uff0c\u4e3b\u8981\u6709 5 \u7c7b\u5206\u652f\uff0c\u4ed6\u4eec\u5206\u522b\u662f master hotfix release develop feature\uff0c\u5b83\u4eec\u6709\u7740\u4e0d\u540c\u7684\u4f5c\u7528\u548c\u4f7f\u7528\u89c4\u8303\u3002\u5176\u4e2dmasterdevelop\u662f\u957f\u671f\u5206\u652f\uff0c\u4ed6\u4eec\u4f1a\u968f\u7740\u9879\u76ee\u7684\u7ef4\u62a4\u4e00\u76f4\u5b58\u5728\uff0c\u800chotfixreleasefeature\u8fd9\u4e9b\u77ed\u671f\u5206\u652f\u5219\u4f1a\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u88ab\u5408\u5e76\u6216\u8005\u5220\u9664\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#master-\u5206\u652f\u4e3b\u5206\u652f","title":"Master \u5206\u652f\uff08\u4e3b\u5206\u652f\uff09","text":"

\u76f4\u63a5\u9762\u5411\u4f7f\u7528\u65b9\u7684\u5206\u652f\uff0c\u5728master\u4e2d\u5b58\u653e\u7684\u5e94\u5f53\u662f\u53ef\u4ee5\u4f7f\u7528\u7684\u7a33\u5b9a\u7248\u672c\uff0c\u56e0\u800c\u901a\u5e38\u4e5f\u4f1a\u5728\u5176\u4e2d\u6dfb\u52a0\u7248\u672c\u7f16\u53f7\u3002 \u6211\u4eec\u5e0c\u671b master \u4e2d\u7684\u4ee3\u7801\u603b\u662f\u4ece\u522b\u7684\u5206\u652f\u4e2d\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u800c\u5e76\u4e0d\u5e0c\u671b\u4efb\u4f55\u4eba\u76f4\u63a5 commit \u5230 master \u4e2d\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#develop-\u5206\u652f\u5f00\u53d1\u5206\u652f","title":"Develop \u5206\u652f\uff08\u5f00\u53d1\u5206\u652f\uff09","text":"

\u6240\u6709\u5f00\u53d1\u5de5\u4f5c\u90fd\u57fa\u4e8e\u8be5\u5206\u652f\u8fdb\u884c\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u9879\u76ee\u4ee3\u7801\u7684\u6c47\u6d41\u5904\uff0c\u800c master \u5219\u662f develop \u4e2d\u7279\u5b9a\u8282\u70b9\u53ef\u7528\u53d1\u884c\u3002 \u5f53\u9700\u8981\u6dfb\u52a0\u65b0\u7684\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u9700\u8981\u65b0\u5efa\u4e00\u4e2a feature (\u5982\u56fe)\uff0c\u7136\u540e\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u5408\u5e76\u56de develop\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#hotfix-\u5206\u652f\u8865\u4e01\u5206\u652f","title":"Hotfix \u5206\u652f\uff08\u8865\u4e01\u5206\u652f\uff09","text":"

\u5f53 master \u4e2d\u51fa\u73b0\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u51fa\u95ee\u9898\u7684\u8282\u70b9\u4e3a\u57fa\u7840\u521b\u5efa\u4e00\u4e2a hotfix\uff0c\u7136\u540e\u5728\u8fd9\u4e2a hotfix \u4e2d\u8fdb\u884c bug \u7684\u4fee\u590d\u5de5\u4f5c\u3002 \u5728\u5b8c\u6210\u4fee\u590d\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a\u8fd9\u4e2a hotfix \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop(\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8be5 bug\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#release-\u5206\u652f\u9884\u53d1\u5206\u652f","title":"Release \u5206\u652f\uff08\u9884\u53d1\u5206\u652f\uff09","text":"

\u5f53 develop \u8db3\u591f\u6210\u719f\u65f6\uff0c\u6211\u4eec\u4f1a\u5e0c\u671b\u5b83\u88ab\u5408\u5e76\u5230 master \u4e2d\u4f5c\u4e3a\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53d1\u5e03\uff0c\u4f46\u5728\u8fd9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5728 release \u4e2d\u8fdb\u884c\u6700\u540e\u7684\u6d4b\u8bd5\u548c\u4fee\u6b63\u3002 \u5728\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a release \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop (\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8fd9\u4e9b\u95ee\u9898\u3002

hotfix\u548crelease\u662f\u7c7b\u4f3c\u7684\uff0c\u4ed6\u4eec\u4e00\u4e2a\u662f\u57fa\u4e8emaster\u5bf9\u4e24\u4e2a\u957f\u671f\u5206\u652f\u8fdb\u884c\u7ef4\u62a4\uff0c\u4e00\u4e2a\u662f\u57fa\u4e8edevelop\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#feature-\u5206\u652f\u529f\u80fd\u5206\u652f","title":"Feature \u5206\u652f\uff08\u529f\u80fd\u5206\u652f\uff09","text":"

\u5f53\u6211\u4eec\u9700\u8981\u5f00\u53d1\u65b0\u7684\u529f\u80fd\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u5927\u90e8\u5206\u5f00\u53d1\u5de5\u4f5c\uff0c\u5728\u5408\u7406\u7684\u6a21\u5757\u5212\u5206\u540e\uff0c\u5c31\u9700\u8981\u521b\u5efa\u5408\u9002\u7684 feature \u5206\u652f\u6765\u8fdb\u884c\u5bf9\u5e94\u7684\u5f00\u53d1\u5de5\u4f5c\u3002\u56e0\u4e3a feature \u5f80\u5f80\u6bd4\u8f83\u591a\uff0c\u6240\u4ee5\u8981\u6c42\u5404\u4e2afeature\u4e4b\u95f4\u8026\u5408\u7a0b\u5ea6\u4e0d\u5b9c\u8fc7\u9ad8\uff0c\u4ee5\u51cf\u5c11\u51b2\u7a81\uff0c\u8fd9\u5c31\u9700\u8981\u8fdb\u884c\u5408\u7406\u7684\u5212\u5206\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#github-workflow","title":"Github Workflow","text":"

Github Workflow \u5bf9 Git Workflow \u8fdb\u884c\u4e86\u7b80\u5316\uff0c\u5728 Github Workflow \u4e0b\u4ec5\u4ec5\u533a\u5206 master \u548c branch\uff0c\u800c\u5177\u4f53\u529f\u80fd\u7531\u5404\u4e2a branch \u7684\u547d\u540d\u6765\u4f53\u73b0\uff0c\u5373\u8981\u6c42 branch \u7684\u547d\u540d\u5177\u6709\u53d9\u4e8b\u6027\u3002

\u6700\u91cd\u8981\u7684\u662f\uff0c\u6ca1\u6709\u4e86 develop \u5206\u652f\u4ee5\u540e\uff0c\u957f\u671f\u7ef4\u62a4\u7684\u5c31\u53ea\u6709 master \u4e86\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u53d1\u5e03\u7684\u4ee3\u7801\u4e00\u822c\u90fd\u662f\u8fdb\u5ea6\u6700\u65b0\u7684\u4ee3\u7801\u3002\u800c\u8fd9\u4ef6\u4e8b\u662f\u6709\u597d\u6709\u574f\u7684\u3002 \u57fa\u4e8e Github Workflow \u7684\u5de5\u4f5c\u6d41\u7a0b\u4e3b\u8981\u5982\u4e0b\uff1a

  1. \u521b\u5efa\u5206\u652f (create a branch or fork)\uff1b
  2. \u5728\u5206\u652f\u4e2d\u8fdb\u884c\u5f00\u53d1\u5e76\u5b8c\u6210\u63d0\u4ea4 (add commits)\uff1b
  3. \u53d1\u9001 Pull Request (open a pull request)\uff1b
  4. \u4eba\u5de5\u5ba1\u6838\u4ee3\u7801\u3001\u6c9f\u901a\u4ea4\u6d41\uff0c\u4ee5\u53ca\u5fc5\u8981\u7684\u6d4b\u8bd5 (discuss and review)\uff1b
  5. \u5408\u5e76\u8fdb master (merge)

\u56e0\u800c\uff0c\u5728\u8fd9\u6837\u4e00\u4e2a\u5de5\u4f5c\u6d41\u7a0b\u4e0b\uff0c\u5408\u4f5c\u8005\u4e4b\u95f4\u7684\u4ea4\u6d41\u5c31\u66f4\u52a0\u91cd\u8981\u4e86\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#gitlab-workflow","title":"Gitlab Workflow","text":""},{"location":"tech_accu/tool/Git/Workflow/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Shell/","title":"Shell","text":"

\u7ea6 4930 \u4e2a\u5b57 462 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 22 \u5206\u949f

\u6587\u7ae0\u76ee\u6807

\u5728\u5b8c\u6210\u672c\u6587\u5b66\u4e60\u540e\uff0c\u6211\u4eec\u671f\u5f85\u60a8\u5bf9 Shell \u80fd\u6709\u66f4\u5177\u4f53\u7684\u8ba4\u8bc6\uff0c\u5e76\u80fd\u505a\u5230\u901a\u8fc7 Command Line \u5b9e\u73b0\u57fa\u7840\u4ea4\u4e92\u5e76\u4e86\u89e3\u5982\u4f55\u5b66\u4e60 Shell\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u64b0\u5199 Shell \u811a\u672c\u6765\u5b9e\u73b0\u4e00\u4e9b\u81ea\u52a8\u5316\u3002

\u6b64\u5916\uff0c\u4ece Shell \u5165\u95e8\u5230\u547d\u4ee4\u884c\u5927\u5e08\uff0c\u5176\u4e2d\u80af\u5b9a\u6709\u5f88\u957f\u7684\u8def\u8981\u8d70\uff0c\u6211\u4eec\u6ca1\u6cd5\u6d89\u53ca Shell \u7684\u5168\u90e8\u77e5\u8bc6\u70b9\uff0c\u5149\u547d\u4ee4\u5c31\u80fd\u8bb2\u4e0a\u5f88\u4e45\uff0c\u6240\u4ee5\u4e00\u5b9a\u8981\u5b66\u4f1a\u5982\u4f55\u5229\u7528\u624b\u518c\u548c\u6587\u6863\u7b49\u67e5\u8be2\u547d\u4ee4\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u672c\u6587\u5e0c\u671b\u505a\u5230\u7684\u662f\u6388\u4eba\u4ee5\u6e14\u800c\u975e\u6388\u4eba\u4ee5\u9c7c\u3002

\u6b64\u5916\uff0c\u6211\u4f1a\u5728\u6587\u4e2d\u591a\u6b21\u5c06 Shell \u4e0e C \u8bed\u8a00\u7684\u4e00\u4e9b\u5185\u5bb9\u76f8\u8054\u7cfb\uff0c\u5982\u679c\u60a8\u6709 C \u7684\u57fa\u7840\uff0c\u90a3\u5c06\u518d\u597d\u4e0d\u8fc7\u3002

"},{"location":"tech_accu/tool/Shell/#\u6982\u8ff0","title":"\u6982\u8ff0","text":""},{"location":"tech_accu/tool/Shell/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

Shell \u7684\u4e2d\u6587\u540d\u79f0\u4e3a\u201c\u58f3\u5c42\u201d\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u201c\u6700\u5916\u5c42\u201d\u3002Wiki \u5bf9\u5176\u63cf\u8ff0\u4e3a\uff1a

It is named a shell because it is the outermost layer around the operating system.

\u7b80\u5355\u6765\u8bf4\uff0cShell \u5c06\u8bfb\u5165\u6765\u81ea Keyboard \u7684\u5185\u5bb9\uff0c\u5e76\u5c06\u6307\u4ee4\u53d1\u9001\u7ed9 OS \u4ee5\u8c03\u7528\u7cfb\u7edf\u670d\u52a1\u3002

\u5728\u5e38\u89c1\u7684\u65e5\u7528\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5982 Windows \u4e0e MacOS\uff0c\u4f60\u53ef\u80fd\u5c1d\u8bd5\u8fc7\u4f7f\u7528 GUI(Graphical User Interface)\uff0c\u5373\u56fe\u5f62\u7528\u6237\u754c\u9762\u6765\u4e0e\u4f60\u7684\u7cfb\u7edf\u6109\u5feb\u73a9\u800d\uff1b\u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0cShell \u5219\u662f\u4e00\u79cd CLI(Command Line Interface)\uff0c\u4e0d\u540c\u4e8e GUIs \u901a\u8fc7\u70b9\u51fb\u6309\u94ae\u7b49\u64cd\u4f5c\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u7b49\u65b9\u5f0f\uff0cCLI \u8981\u6c42\u7528\u6237\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u3002\u800c\u4f5c\u4e3a\u4e00\u4e2a\u5408\u683c\u7684\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u63a5\u89e6\u5230\u7684\u5927\u591a\u6570\u751f\u4ea7\u573a\u666f\u4e2d\uff0c\u4f7f\u7528 CLI \u662f\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\u7684\u9009\u62e9\uff0c\u4e8b\u5b9e\u4e0a\u4f60\u4e5f\u5f88\u96be\u907f\u514d\u5b83\u2014\u2014\u56e0\u800c\uff0c\u6211\u4eec\u9700\u8981\u638c\u63e1 Shell \u7684\u57fa\u672c\u4f7f\u7528\u3002

\u5982\u4eca\uff0c\u5df2\u7ecf\u6709\u975e\u5e38\u591a\u7684 Shell \u53ef\u4ee5\u4f7f\u7528\uff0c\u800c\u4ed6\u4eec\u57fa\u672c\u4e0a\u90fd\u4ee5 sh \u7ed3\u5c3e\uff0c\u4f8b\u5982\u5e38\u89c1\u7684 bash \u548c zsh ,\u518d\u6bd4\u5982\u8bb8\u591a\u57fa\u4e8e Alpine \u7684 Docker Image\uff0c\u5185\u7f6e\u7684 Shell \u90fd\u662f sh\u3002\u5176\u4ed6\u7684\u8fd8\u6709 dash csh ksh \u7b49\u7b49\u3002

"},{"location":"tech_accu/tool/Shell/#shell-vs-terminal","title":"Shell vs Terminal","text":"

\u5728\u6b63\u5f0f\u5f00\u59cb\u4ecb\u7ecd Shell \u4e4b\u524d\uff0c\u6211\u8ba4\u4e3a\u6709\u5fc5\u8981\u505a\u4e00\u4e9b\u8fa8\u6790\u3002

\u5728\u73b0\u4ee3\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\uff0c\u60f3\u8981\u4f7f\u7528 Shell\uff0c\u4f60\u9700\u8981\u501f\u52a9 Terminal\uff0c\u5373\u7ec8\u7aef\uff08\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u662f terminal emulator\uff0c\u4e0d\u8fc7\u5728\u672c\u6587\u4e2d\u6211\u4eec\u5e76\u4e0d\u4f1a\u5c31\u6b64\u5c55\u5f00\uff09\u3002Terminal \u4e4b\u4e8e Shell\uff0c\u5c31\u597d\u50cf\u7535\u8bdd\u4e4b\u4e8e\u901a\u8baf\u670d\u52a1\u3002

\u4f8b\u5982\uff0c\u56fe\u4e2d\u6253\u5f00\u7684\u8fd9\u4e2a\u201c\u7a97\u53e3\u201d\u5c31\u662f\u4e00\u4e2a\u53eb\u505a iTerm2 \u7684 terminal emulator\uff0c\u800c\u6211\u4f7f\u7528\u7684 fish \u5219\u662f\u4e00\u79cd Shell\u3002

\u80fd\u4e0e\u8fd9\u4e24\u4e2a\u4e1c\u897f\u8fdb\u884c\u6bd4\u8f83\u548c\u8fa8\u6790\u7684\u4e1c\u897f\u5176\u5b9e\u8fd8\u6709\u5f88\u591a\uff0c\u4f46\u5e76\u975e\u672c\u6587\u4e3b\u9898\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

"},{"location":"tech_accu/tool/Shell/#\u4ee5-bash-\u4e3a\u4f8b","title":"\u4ee5 Bash \u4e3a\u4f8b","text":"

bash \u5168\u79f0 Bourne Again Shell\uff0c\u662f\u5982\u4eca\u6700\u5e38\u7528\u7684 Shell \u4e4b\u4e00\uff0c\u4e14\u5927\u90e8\u5206 Linux \u90fd\u4f1a\u5185\u7f6e bash\uff0c\u8fd9\u4e5f\u907f\u514d\u4e86\u66f4\u591a\u7684\u73af\u5883\u914d\u7f6e\u8d1f\u62c5\uff0c\u6240\u4ee5\u5728\u672c\u7ae0\u79cd\uff0c\u6211\u4eec\u5c06\u4ee5 bash \u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u4e00\u4e9b Shell \u5e38\u7528\u6307\u4ee4\u548c\u6280\u5de7\u3002

\u6b64\u5916\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u63d0\u4f9b\u7684\u5927\u591a\u6570\u8bba\u65ad\u4e3b\u8981\u57fa\u4e8e Linux \u7cfb\u7edf\u3002\u90e8\u5206\u7ed3\u8bba\u5728 Windows \u7b49\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5e76\u4e0d\u6210\u7acb\u3002\u5982\u679c\u60a8\u6709\u5174\u8da3\uff0c\u53ef\u4ee5\u81ea\u884c\u67e5\u8be2\u8d44\u6599\u3002

"},{"location":"tech_accu/tool/Shell/#\u51c6\u5907\u5de5\u4f5c","title":"\u51c6\u5907\u5de5\u4f5c","text":"

\u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u5e0c\u671b\u60a8\u786e\u4fdd\u60a8\u672c\u5730\u5df2\u6709\u53ef\u7528\u7684 bash \u73af\u5883\uff0c\u4ee5\u4fbf\u4e8e\u60a8\u80fd\u8ddf\u7740\u6559\u7a0b\u8fb9\u5b9e\u8df5\u8fb9\u5b66\u4e60\u3002

\u5728\u8fd9\u91cc\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u79cd\u7b80\u5355\u7684\u914d\u7f6e bash \u73af\u5883\u7684\u65b9\u6848\uff1a

\u5f53\u7136\uff0c\u6211\u4eec\u6700\u63a8\u8350\u7684\u8fd8\u662f\u60a8\u53ef\u4ee5\u914d\u7f6e\u4e00\u4e2a Linux \u73af\u5883\u4ee5\u8fdb\u884c\u5b9e\u8df5\u548c\u5b66\u4e60\u3002

\u5f53\u60a8\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u60a8\u53ef\u80fd\u770b\u5230\u7c7b\u4f3c\u4e8e\u5982\u4e0b\u5217\u4e3e\u7684\u5185\u5bb9\u7684\u60c5\u51b5\uff1a

# \u4e5f\u8bb8\u662f\u8fd9\u6837\nxxx:~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u6216\u8005\u8fd9\u6837\n[xxx@yyy]~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u53c8\u6216\u8005\u8fd9\u6837\nxxxx yyyy ~\n$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# ...\n

\u5b9e\u9645\u60c5\u51b5\u8fd8\u6709\u5f88\u591a\u79cd\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u201c\u5f62\u5f0f\u201d\u90fd\u662f\u53ef\u4ee5\u88ab\u8bbe\u7f6e\u7684\u3002\u6bd4\u5982\u8fd9\u91cc\u7684 $ \u88ab\u79f0\u4e3a prompt\uff0c\u5728\u672c\u6587\u7b2c\u4e00\u5f20\u56fe\u7247\u4e2d\u6211\u5c31\u5c06\u5b83\u8bbe\u7f6e\u4e3a\u4e86\u4e00\u4e2a Emoji \u56fe\u6807\u3002\u800c\u6211\u4eec\u53d1\u73b0\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e2a ~ \uff0c\u5b83\u8868\u793a\u7684\u662f\u60a8\u7684\u201c\u5bb6\u76ee\u5f55\u201d\u3002\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u5b83\u7684\u542b\u4e49\u662f\u60a8\u5f53\u524d\u6240\u5728\u7684\u4f4d\u7f6e\u662f\u60a8\u7684\u5bb6\u76ee\u5f55\u3002\u5173\u4e8e\u8fd9\u4e00\u70b9\u6211\u4eec\u5c06\u5728\u63a5\u4e0b\u6765\u5c55\u5f00\u3002

\u6b64\u5916\uff0c\u5982\u679c\u60a8\u5bf9 Linux \u7cfb\u7edf\u6709\u4e00\u5b9a\u8ba4\u8bc6\uff0c\u90a3\u65e0\u7591\u4f1a\u5e2e\u52a9\u60a8\u7406\u89e3\u672c\u6587\u3002

\u90a3\u4e48\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u5f00\u59cb\u5427\uff01

"},{"location":"tech_accu/tool/Shell/#\u5e2e\u52a9\u624b\u518c","title":"\u5e2e\u52a9\u624b\u518c","text":"

\u5de6\u601d\u53f3\u60f3\uff0c\u6700\u540e\u6211\u8fd8\u662f\u628a\u8fd9\u6761\u6307\u4ee4\u653e\u5230\u4e86\u6700\u524d\u6765\u8bb2\u3002\u6211\u4eec\u4e0d\u53ef\u80fd\u4ec5\u4ec5\u901a\u8fc7\u4e00\u7bc7\u6587\u7ae0\u5c31\u4e86\u89e3\u547d\u4ee4\u884c\u7684\u5168\u90e8\u77e5\u8bc6\uff0c\u6240\u4ee5\u6211\u89c9\u5f97\u628a man \u653e\u5230\u6700\u524d\u9762\u6765\u8bb2\u662f\u5f88\u6709\u610f\u4e49\u7684\u3002

man \u7684\u4f5c\u7528\u662f\u6253\u5f00\u4e00\u4e2a user manual\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6211\u4eec\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165 man man\uff0c\u5c31\u4f1a\u5f97\u5230\u5982\u4e0b\u7ed3\u679c\uff0c\u5373\u4f7f\u7528 man \u6253\u5f00\u4e86 man \u7684\u624b\u518c\uff1a

man(1)                                     General Commands Manual                                    man(1)\n\nNAME\n       man - format and display the on-line manual pages\n\nSYNOPSIS\n       man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B\n       browser] [-H htmlpager] [-S section_list] [section] name ...\n\nDESCRIPTION\n       man formats and displays the on-line manual pages.  If you specify section, man only looks in that\n       section of the manual.  name is normally the name of the manual page, which is typically the name of\n       a command, function, or file.  However, if name contains a slash (/) then man interprets it as a file\n       specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.\n\n       See below for a description of where man looks for the manual page files.\n\n......\n

\u4e3a\u4e86\u5b9e\u73b0\u629b\u7816\u5f15\u7389\u7684\u76ee\u7684\uff0c\u73b0\u5728\u6211\u4eec\u4ec5\u4ec5\u4ecb\u7ecd man \u7684\u8fd9\u4e9b\u90e8\u5206\uff0c\u5b9e\u9645\u4e0a\u5149\u770b manual \u7684\u6587\u672c\u91cf\u5c31\u80fd\u611f\u53d7\u5230\uff0c man \u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u4f46\u672c\u6587\u5e76\u4e0d\u6253\u7b97\u5c31\u6b64\u6df1\u5165\u3002\u800c\u5728\u8fd9\u91cc\u4ecb\u7ecd man \u7684\u76ee\u7684\uff0c\u4e00\u65b9\u9762\u662f\u5e0c\u671b\u5927\u5bb6\u5728\u5b66\u4e60\u4e4b\u540e\u7684\u547d\u4ee4\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003 user manual\uff0c\u4e8b\u5b9e\u4e0a\u672c\u6587\u6d89\u53ca\u7684\u547d\u4ee4\u4e5f\u5e76\u4e0d\u4f1a\u4ecb\u7ecd\u5176\u5168\u90e8\u7528\u6cd5\uff1b\u53e6\u4e00\u65b9\u9762\u662f\u9f13\u52b1\u5927\u5bb6\u5728\u9047\u5230\u4e3a\u6b62\u7684\u6307\u4ee4\u65f6\uff0c\u901a\u8fc7\u624b\u518c\u7b49\u9014\u5f84\u5148\u67e5\u8be2\u5176\u884c\u4e3a\u3001\u7528\u6cd5\uff0c\u518d\u4f7f\u7528\u5b83\u3002

"},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u5b57\u7b26\u4e32--echo","title":"\u6253\u5370\u5b57\u7b26\u4e32 | echo","text":"

echo \u5373\u56de\u54cd\uff0c\u8fd9\u4e2a\u5355\u8bcd\u975e\u5e38\u5f62\u8c61\u5730\u63cf\u8ff0\u4e86\u8fd9\u4e2a\u547d\u4ee4\u7684\u4f5c\u7528\uff0c\u5c06\u5176\u63a5\u53d7\u5230\u7684\u5185\u5bb9\u201c\u56de\u54cd\u201d\u51fa\u6765\u3002

# echo \u4f1a\u5c06\u5b83\u62ff\u5230\u7684\u53c2\u6570\u5168\u90fd\u5f53\u4f5c\u5b57\u7b26\u4e32\u6253\u5370\u51fa\u6765\uff0c\u4f46\u6210\u5bf9\u5f15\u53f7\u5e76\u4e0d\u4f1a\n$ echo <something>\n$ echo \"something 1 2 3\"\nsomething 1 2 3\n$ echo something 1 2 3\nsomething 1 2 3\n\n# \u5982\u679c\u4f60\u53ea\u8f93\u5165\u4e86\u4e00\u4e2a\u5f15\u53f7\uff0c\u5b83\u4f1a\u7b49\u4f60\u628a\u4ed6\u8865\u5b8c\u518d\u8f93\u51fa\n# \u5982\u679c\u60f3\u8f93\u51fa\u5f15\u53f7\uff0c\u9700\u8981\u4f7f\u7528 \\\" \u8f6c\u4e49\n$ echo \"\nFine, \\\"I\\\" will finish the string.\n\"\nFine, \"I\" will finish the string.\n\n# echo \u652f\u6301\u8f93\u51fa\u53c2\u6570\uff0c\u4ee5 $ \u5f00\u5934\uff0c\u5728\u547d\u4ee4\u884c\u73af\u5883\u4e0b\u4ed6\u4eec\u6307\u73af\u5883\u53d8\u91cf\uff0c\u5728\u811a\u672c\u73af\u5883\u4e0b\u8fd8\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u53c2\u6570\u4f20\u9012\n# \u4e0b\u9762\u7684\u547d\u4ee4\u8f93\u51fa\u4e86\u5f53\u524d\u7528\u6237\uff0cUSER \u662f\u4e00\u4e2a\u503c\u4e3a\u5f53\u524d\u7528\u6237\u7684\u7528\u6237\u540d\u7684\u73af\u5883\u53d8\u91cf\u3002\necho $USER\nisshikih\n
"},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u5f53\u524d\u8def\u5f84--pwd","title":"\u67e5\u770b\u5f53\u524d\u8def\u5f84 | pwd","text":"

\u5728\u8fd9\u91cc\u6211\u4eec\u60f3\u4ecb\u7ecd\u7684\u7b2c\u4e8c\u4e2a\u6307\u4ee4\u662f pwd\uff0c\u5b83\u7684\u6548\u679c\u662f\u8f93\u51fa\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u3002

$ pwd\n# \u6bd4\u5982\u6211\u7684\u73af\u5883\u4e0b\uff0c\u5728 ~ \u4e0b\u8f93\u51fa\u5982\u4e0b\n/Users/isshikih\n# \u8868\u793a\u6211\u5f53\u524d\u7684\u4f4d\u7f6e\u662f /Users/isshikih\n

\u4e00\u5207\u7686\u6587\u4ef6 \u662f Linux \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u800c Shell \u7684\u4f7f\u7528\u6709\u76f8\u5f53\u4e00\u90e8\u5206\u662f\u57fa\u4e8e\u6587\u4ef6\u4f53\u7cfb\u7684\u3002\u800c\u5982\u4f55 \u7d22\u5f15 \u4e00\u4e2a\u6587\u4ef6\u5462\uff1f\u6211\u4eec\u9700\u8981\u63d0\u4f9b\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u548c\u6587\u4ef6\u540d\uff01\u4f8b\u5982\uff0c\u60a8\u9700\u8981\u53bb\u4e00\u53f0 Windows \u7535\u8111\u4e2d\u627e\u5230\u60a8\u4e0a\u5b66\u671f\u7684\u8bfe\u7a0b\u4f5c\u4e1a\uff0c\u5b83\u7684\u6587\u4ef6\u540d\u4e3a myHomework.pdf \uff0c\u4e5f\u8bb8\u4f60\u9700\u8981\u6253\u5f00D\u76d8\u4e2d\u7684 Homework \u6587\u4ef6\u5939\u3002\u90a3\u4e48\u62bd\u8c61\u5730\u6765\u8bf4\uff0c\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u4e3a D:\\Homework\\myHomework.pdf \uff08\u8fd9\u662f\u5728 Windows \u4e0a\u7684\u5199\u6cd5\uff09\u3002\u8fd9\u79cd\u5f62\u5f0f\u7684\u201c\u4f4d\u7f6e\u201d\u88ab\u79f0\u4e3a \u7edd\u5bf9\u8def\u5f84\uff0c\u5373\u6211\u4eec\u9700\u8981\u586b\u5199\u6587\u4ef6\u7684\u5b8c\u6574\u8def\u5f84\u624d\u80fd\u627e\u5230\u8fd9\u4e2a\u6587\u4ef6\u3002\u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u63d0\u5230\u7684<filename><dirname>\u7b49\u90fd\u5305\u62ec\u4e86\u6587\u4ef6\u7684\u8def\u5f84\u3002

\ud83d\udc49\u00a0\u4e8b\u5b9e\u4e0a\uff0c\u6709\u76f8\u5f53\u4e00\u90e8\u5206 Shell \u8bed\u6cd5\u662f\u56f4\u7ed5\u7740\u6587\u4ef6\u5c55\u5f00\u7684\u3002

"},{"location":"tech_accu/tool/Shell/#\u5207\u6362\u76ee\u5f55--cd","title":"\u5207\u6362\u76ee\u5f55 | cd","text":"

cd \u662f change directory \u7684\u7f29\u5199\uff0c\u5b83\u7684\u6548\u679c\u662f\u5c06\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u8f6c\u79fb\u5230\u76ee\u6807\u76ee\u5f55\u4e2d\u3002\u5b83\u7684\u5199\u6cd5\u5982\u4e0b\uff1a

cd {target directory}\n\n# eg 1: =========================================\n$ pwd\n/home/username\n\n$ cd /home/username/aaa\n$ pwd\n/home/username/aaa\n\n# eg 2: =========================================\n$ pwd\n/home/username\n\n$ cd ./aaa/bbb\n$ pwd\n/home/username/aaa/bbb\n\n# eg 3: =========================================\n$ pwd\n/home/username\n\n$ cd ./../aaa\n$ pwd\n/home/aaa\n

\u63a5\u4e0b\u6765\u5bf9\u4e0a\u9762 eg \u7684\u90e8\u5206\u7b26\u53f7\u505a\u4e00\u4e0b\u89e3\u91ca\uff1a

\u6b64\u5916\uff0c\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e9b\u5feb\u6377\u65b9\u5f0f\uff1a

"},{"location":"tech_accu/tool/Shell/#\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9--ls","title":"\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9 | ls","text":"

ls \u6307\u4ee4\u7528\u6765\u67e5\u770b\u76ee\u6807\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u3002\u5e38\u7528\u7684\u53c2\u6570\u4e3b\u8981\u6709 -l \uff08\u957f\u683c\u5f0f\uff09\u548c -a \uff08\u663e\u793a\u5168\u90e8\uff09\u3002

\u5177\u4f53\u5199\u6cd5\u5982\u4e0b\uff1a

# \u5047\u8bbe\u6211\u4eec\u5f53\u524d\u5728\u6587\u4ef6\u5939 my_ \u4e0b\uff0c\u6587\u4ef6\u5939\u5185\u6709\u4e24\u4e2a\u6587\u4ef6\u548c\u4e00\u4e2a\u6587\u4ef6\u5939\n# \u6587\u4ef6 .hidden \u548c\u6587\u4ef6 file1.md\n# \u6587\u4ef6\u5939 dir1\uff0c\u91cc\u9762\u6709\u4e2a\u6587\u4ef6 file2.md\n\n$ ls\ndir1        file1.md\n\n$ ls -a\n.               ..      .hiden1     dir1        file1.md\n\n$ ls -l\ndrwxr-xr-x  2 isshikih  staff  64 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff   7 10 12 12:16 file1.md\n\n$ ls -la\ndrwxr-xr-x  5 isshikih  staff  160 10 12 12:15 .\ndrwxr-xr-x  6 isshikih  staff  192 10 12 12:14 ..\n-rw-r--r--  1 isshikih  staff    0 10 12 12:15 .hiden1\ndrwxr-xr-x  2 isshikih  staff   96 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff    7 10 12 12:16 file1.md\n\n# \u5982\u679c\u540e\u9762\u8ddf\u7740\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5219\u663e\u793a\u76ee\u6807\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\uff0c\u5426\u5219\u663e\u793a\u5f53\u524d\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\u3002\n$ ls dir1\nfile2.md\n
-rw-------   1 me       me            576 Apr 17  2019 weather.txt\ndrwxr-xr-x   6 me       me           1024 Oct  9  2019 web_page\n-rw-rw-r--   1 me       me         276480 Feb 11 20:41 web_site.tar\n-rw-------   1 me       me           5743 Dec 16  2018 xmas_file.txt\n\n----------  -------  -------     -------- ------------ -------------\n|          |        |            |         |             |\n|          |        |            |         |\n|          |        |            |         |           \u6587\u4ef6\u540d\n|          |        |            |         |\n|          |        |            |         +---       \u4fee\u6539\u65f6\u95f4\n|          |        |            |\n|          |        |            +-------------   \u6587\u4ef6\u5927\u5c0f(in bytes)\n|          |        |\n|          |        +--------------------------       \u6240\u5c5e\u7528\u6237\u7ec4\n|          |\n|          +-----------------------------------       \u6240\u5c5e\u7528\u6237\n|\n+----------------------------------------------       \u6587\u4ef6\u6743\u9650\n# Edited from https://linuxcommand.org/lc3_lts0030.php\n
"},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u5185\u5bb9--cat","title":"\u6253\u5370\u6587\u4ef6\u5185\u5bb9 | cat","text":"

cat \u6307\u4ee4\u4f1a\u8fde\u63a5\u6587\u4ef6\u5e76\u5c06\u5185\u5bb9\u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u6d41\u3002

# <filename> \u662f\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\u3002\n$ cat <filename>\n
"},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9--head--tail","title":"\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9 | head & tail","text":"

head \u548c tail \u8bed\u6cd5\u7c7b\u4f3c\uff0c\u529f\u80fd\u7c7b\u4f3c\uff0c\u5206\u522b\u4e3a\u67e5\u770b\u76ee\u6807\u6587\u4ef6\u7684\u5f00\u5934\u90e8\u5206\u7684\u5185\u5bb9\u548c\u7ed3\u5c3e\u90e8\u5206\u7684\u5185\u5bb9\u3002\u4e0d\u8fc7\u7531\u4e8e\u6211\u4eec\u5bf9\u6587\u672c\u6587\u4ef6\u9664\u4e86\u8bfb\u5199\uff0c\u8fd8\u6709\u4e00\u4e2a\u53eb\u505a\u201c\u8ffd\u52a0\u201d\u7684\u64cd\u4f5c\uff08\u7c7b\u6bd4 C \u8bed\u8a00\u4e2d fopen() \u7684 \u2018a\u2019 \u6a21\u5f0f\uff09 tail \u4f1a\u6301\u7eed\u6253\u5370\u65b0\u8ffd\u52a0\u8fdb\u6587\u4ef6\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u82b1\u6837\u7a0d\u5fae\u6bd4 head \u591a\u4e00\u70b9\u3002

# `head` \u548c `tail` \u90fd\u6709\u9ed8\u8ba4\u53c2\u6570 `-n 10`\n# \u4e5f\u5c31\u662f\uff0c\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u524d 10 \u884c\n$ head <filename>\n$ head -n 10 <filename>\n# \u4e0b\u9762\u8fd9\u4e24\u6761\u6307\u4ee4\u4e5f\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u672b 10 \u884c\n$ tail <filename>\n$ tail -n 10 <filename>\n\n# \u5c06 10 \u6539\u6210\u5176\u4ed6\u6570\u5b57\u5c31\u53ef\u4ee5\u4fee\u6539\u663e\u793a\u7684\u884c\u6570\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 4 \u884c\n$ head -n 4 <filename>\n$ tail -n 4 <filename>\n\n# \u9664\u4e86\u884c\u6570\uff0c\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u6253\u5370\u7684\u5b57\u8282\u6570\uff0c\u5982\u4e0b\u9762\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 20 \u4e2a\u5b57\u8282\n$ head -c 20 <filename>\n$ tail -c 20 <filename>\n

# `tail` \u6bd4 `head` \u8fd8\u8981\u591a\u4e00\u4e9b\u53c2\u6570\uff0c\u6bd4\u5982 `-f`\n# `-f` \u5728\u6253\u5370\u5b8c\u5df2\u6709\u7684\u6587\u4ef6\u5185\u5bb9\u540e\u4f1a\u963b\u585e\uff0c\u7b49\u5f85\u76ee\u6807\u6587\u4ef6\u7684\u66f4\u65b0\n# \u4e00\u65e6\u6709\u5185\u5bb9\u8ffd\u52a0\u8fdb\u76ee\u6807\u6587\u4ef6\uff0c`tail` \u5c31\u4f1a\u5c06\u5b83\u6253\u5370\u51fa\u6765\n$ tail -f <filename>\n

\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684 echo \u5f00\u5934\u7684\u8bed\u53e5\u662f\u5728\u505a\u8ffd\u52a0\u64cd\u4f5c\uff0c\u4e4b\u540e\u4f1a\u8bb2\u5230\u3002

\u800c\u81f3\u4e8e\u5177\u4f53\u7684\u5f15\u7528\u573a\u666f\uff0c\u6bd4\u5982\u6709\u4e9b\u5de5\u5177\u7684\u65e5\u5fd7\u4f1a\u4e0d\u65ad\u8ffd\u52a0\u5230\u67d0\u4e2a\u65e5\u5fd7\u6587\u4ef6\u4e2d\uff0c\u8fd9\u65f6\u5019\u5c31\u53ef\u4ee5\u7528 tail -f \u6765\u5b9e\u65f6\u8ddf\u8e2a\u65e5\u5fd7\u4fe1\u606f\u3002

"},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9--less","title":"\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9 | less","text":"

less \u5219\u662f\u771f\u6b63\u7528\u6765\u663e\u793a\u6587\u4ef6\u5185\u5bb9\u7684\u6307\u4ee4\uff0c\u5b83\u4f1a\u4ee5\u6587\u672c\u6587\u4ef6\u7684\u5f62\u5f0f\u5c55\u793a\u6587\u4ef6\u5185\u5bb9\u2014\u2014\u8fd9\u610f\u5473\u7740\u4f60\u5982\u679c\u5f3a\u884c\u4f7f\u7528 less \u6765\u67e5\u770b\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5219\u4f1a\u5f97\u5230\u4e00\u5806\u4e71\u7801\u3002

# <textFilename> \u4e3a\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\n$ less <textFilename>\n

\u4f7f\u7528 less \u67e5\u770b\u6587\u4ef6\u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u4f60\u6253\u5f00\u4e86\u4e00\u4e2a\u5f88\u50cf man \u7684\u754c\u9762\uff08\u76f8\u4fe1\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\u8fd9\u4e2a\u8bf4\u6cd5\u6709\u70b9\u672c\u672b\u98a0\u5012\uff09\uff0c\u90a3\u5b9e\u9645\u4e0a\u6d4f\u89c8\u7684\u65b9\u5f0f\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u518d\u591a\u4ecb\u7ecd\u4e00\u4e9b\u5728\u6d4f\u89c8\u6587\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u7528\u5230\u7684\u6280\u5de7\uff1a

"},{"location":"tech_accu/tool/Shell/#\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027\u521b\u5efa\u6587\u4ef6--touch","title":"\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027(\u521b\u5efa\u6587\u4ef6) | touch","text":"

touch\u5b9e\u9645\u4e0a\u662f\u7528\u6765\u4fee\u6539\u6587\u4ef6\u548c\u76ee\u5f55\u7684\u65f6\u95f4\u5c5e\u6027\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u5177\u6709\u201c\u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u4e00\u4e2a\u201d\u7684\u7279\u6027\uff0c\u6240\u4ee5\u4e5f\u5e38\u5e38\u7528\u6765\u521b\u5efa\u4e00\u4e2a\u65b0\u6863\u6848\u3002

$ ls -l\ntotal 0\n\n# \u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6ca1\u6709\u53eb\u505a <filename> \u7684\u6587\u4ef6\uff0c\u5219\u521b\u5efa\u4e00\u4e2a <filename>\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:07 file\n# \u5176\u4e2d\u6587\u4ef6\u7684\u65f6\u95f4\u4e3a\u7cfb\u7edf\u7684\u5f53\u524d\u65f6\u95f4\n\n# \u5982\u679c\u6b64\u65f6\u518d\u6b21 touch <filename>\uff0c\u5219\u4f1a\u66f4\u65b0\u5176\u65f6\u95f4\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:10 file\n
"},{"location":"tech_accu/tool/Shell/#\u521b\u5efa\u6587\u4ef6\u5939--mkdir","title":"\u521b\u5efa\u6587\u4ef6\u5939 | mkdir","text":"

mkdir\u662f make directory \u7684\u7f29\u5199\uff0c\u4e5f\u5c31\u662f\u521b\u5efa\u4e00\u4e2a\u201c\u6587\u4ef6\u5939\u201d\u3002

# <dirname> \u53ef\u4ee5\u662f\u4e00\u4e2a\u590d\u6742\u8def\u5f84\u4e0b\u7684\u76ee\u5f55\uff0c\u4f46\u662f\u4e00\u5b9a\u8981\u6c42\u5176\u524d\u7f6e\u76ee\u5f55\u90fd\u5b58\u5728\n$ mkdir <dirname>\n$ ls -l\ntotal 0\n$ mkdir dir1/dir2\nmkdir: dir1: No such file or directory\n# \u8bf4\u660e\u76ee\u6807\u76ee\u5f55 dir2 \u7684\u524d\u7f6e\u8def\u5f84 ./dir1 \u7f3a\u5931\n\n# \u6211\u4eec\u53ef\u4ee5\u4f9d\u6b21\u521b\u5efa\u8fd9\u4e9b\u76ee\u5f55\n$ mkdir dir1 dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n\n# \u6216\u8005\u4f7f\u7528 -p \u53c2\u6570\uff0c\u5b83\u5141\u8bb8\u521b\u5efa\u5d4c\u5957\u76ee\u5f55\uff0c\u5373\u5982\u679c\u524d\u7f6e\u76ee\u5f55\u4e0d\u5b58\u5728\u5b83\u4f1a\u521b\u5efa\u4e00\u4e2a\n$ mkdir -p dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
"},{"location":"tech_accu/tool/Shell/#\u79fb\u52a8\u91cd\u547d\u540d--mv","title":"\u79fb\u52a8(\u91cd\u547d\u540d) | mv","text":"

mv\u5373 move\uff0c\u542b\u4e49\u5f88\u660e\u663e\uff0c\u5373\u6539\u53d8\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u4f4d\u7f6e\u3002\u4e0d\u8fc7\u7531\u4e8e\u201c\u4f4d\u7f6e\u201d\u8fd9\u4ef6\u4e8b\uff0c\u5b9e\u9645\u4e0a\u4e5f\u53ef\u4ee5\u5305\u542b\u6587\u4ef6\u672c\u8eab\u7684\u540d\u5b57\uff0c\u6240\u4ee5\u4e5f\u53ef\u4ee5\u7528\u6765\u505a\u91cd\u547d\u540d\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4fee\u6539\u76ee\u6807\u4f4d\u7f6e\u5230\u540c\u4e00\u4e2a\u8def\u5f84\u4e0b\u7684\u53e6\u5916\u4e00\u4e2a\u540d\u5b57\u3002

# \u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u4e00\u8282\u4e34\u65f6\u628a <path> \u4ece <filename> \u548c <dirname> \u4e2d\u62c6\u51fa\u6765\n# \u8be5\u6307\u4ee4\u4f1a\u5c06 <target1> \u79fb\u52a8\u5230 <path2> \u5e76\u6539\u540d\u4e3a <target2>\uff0c\u5f53\u7136\u5141\u8bb8\u540c\u540d\n$ mv <path1>/<target1> <path2>/<target2>\n\n# \u7701\u7565 <target2>\uff0c\u5219\u4f1a\u79fb\u52a8\u6587\u4ef6\u4f4d\u7f6e\u4f46\u4e0d\u4fee\u6539\u6587\u4ef6\u540d\uff0c\u5373\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u7b49\u4ef7\n$ mv <path1>/<target1> <path2>\n$ mv <path1>/<target1> <path2>/<target1>\n\n# \u79fb\u52a8\u5230\u540c\u4e00\u76ee\u5f55\uff0c\u5373\u5b9e\u73b0\u91cd\u547d\u540d\uff0c\u5f53\u7136 <path1>/ \u53ef\u4ee5\u7701\u7565\uff0c\u5373\u6b64\u65f6 <path1> \u4e3a .\n$ mv <path1>/<target1> <path1>/<target2>\n
"},{"location":"tech_accu/tool/Shell/#\u590d\u5236--cp","title":"\u590d\u5236 | cp","text":"

cp\u5373 copy\uff0c\u7528\u6765\u590d\u5236\u6587\u4ef6\u6216\u76ee\u5f55\uff0c\u57fa\u672c\u8bed\u6cd5\u548cmv\u7c7b\u4f3c\uff0c\u6211\u4eec\u518d\u591a\u4ecb\u7ecd\u4e00\u4e2a-r\u53c2\u6570\u3002

# \u8be5\u6307\u4ee4\u4f1a\u590d\u5236\u4e00\u4e2a\u6587\u4ef6 <filename> \u5230 <path> \u4e0b\n$ cp <filename> <path>\n\n# cp \u65e0\u6cd5\u590d\u5236\u6587\u4ef6\u5939\n$ cp <dir> <path>\ncp: <dir> is a directory (not copied).\n# \u4f46\u662f\u4f7f\u7528 -r \u53c2\u6570\u53ef\u4ee5\u590d\u5236 <path1> \u4e0b\u6240\u6709\u5185\u5bb9\u5230 <path2> \u4e0b\n$ cp -r <path1> <path2>\n$ cp -r dir1 newDir\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
"},{"location":"tech_accu/tool/Shell/#\u5220\u9664--rm","title":"\u5220\u9664 | rm","text":"

\u628arm\u653e\u5728\u6700\u540e\u8bb2\u662f\u6709\u539f\u56e0\u7684\uff0c\u6216\u8bb8\u4f60\u542c\u8bf4\u8fc7 rm / -rf \u8fd9\u6761\u6307\u4ee4\uff0c\u5374\u4e0d\u77e5\u9053\u5b83\u7684\u542b\u4e49\uff0c\u90a3\u4e48\u770b\u5b8c\u8fd9\u4e00\u5c0f\u8282\u4f60\u5c31\u77e5\u9053\u8fd9\u4e2a\u6307\u4ee4\u6709\u591a\u6050\u6016\u4e86\uff08\u5343\u4e07\u4e0d\u8981\u8dd1\u8fd9\u6761\u6307\u4ee4\uff09\u3002

\u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\uff0cLinux \u4e0brm\u6307\u4ee4\u5e76\u4e0d\u5b58\u5728\u201c\u5783\u573e\u7bb1\u201d\u8fd9\u4e2a\u673a\u5236\uff0c\u5373\u7528rm\u5220\u6389\u7684\u4e1c\u897f\u662f\u6ca1\u6cd5\u901a\u8fc7\u6b63\u5e38\u624b\u6bb5\u590d\u539f\u7684\uff0c\u800c\u4e0a\u9762\u90a3\u6761\u6307\u4ee4\u7684\u610f\u601d\u5c31\u662f\u5f3a\u5236\u9012\u5f52\u5220\u9664\u7cfb\u7edf\u6839\u76ee\u5f55\u4e0b\u6240\u6709\u5185\u5bb9\uff0c\u4e5f\u5c31\u662f \u5565\u90fd\u5220\u5149\u4e86\u3002

\u6240\u4ee5\uff0c\u4e00\u822c\u6211\u4eec\u90fd\u4f1a\u5efa\u8bae\u4f7f\u7528alias\u4fdd\u62a4rm\u6307\u4ee4\uff08\u6211\u5199\u8fc7fish\u7684rmalias\u4fdd\u62a4\u6d41\u7a0b\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002

rm\u5373 remove\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u7528\u6765\u5220\u9664\u4e1c\u897f\u7684\uff0c\u8fd9\u662f\u4e2a\u975e\u5e38\u5371\u9669\u7684\u6307\u4ee4\u3002\u5e38\u7528\u7684\u53c2\u6570\u6709-r\u548c-f\uff0c\u5206\u522b\u8868\u793a\u9012\u5f52\u5220\u9664\u548c\u5f3a\u5236\u5220\u9664\uff1b\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c06\u4ecb\u7ecd\u4e00\u4e2a-i\u53c2\u6570\u3002

# \u5220\u9664\u4e00\u4e2a\u6587\u4ef6\n$ rm <filename>\n\n# \u5220\u9664 <dirname> \u4e0b\u6240\u6709\u7684\u4e00\u7ea7\u6587\u4ef6\n$ rm <dirname>/*\n\n$ tree\n.\n\u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file3\n\u251c\u2500\u2500 file1\n\u2514\u2500\u2500 file2\n\n1 directory, 3 files\n$ rm ./*\nrm: ./dir2: is a directory\n$ tree\n.\n\u2514\u2500\u2500 dir2\n    \u2514\u2500\u2500 file3\n\n1 directory, 1 file\n# \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e2d\u9014\u62a5\u9519\u8bf4 dir2 \u662f\u4e2a\u76ee\u5f55\u5e76\u4e14\u6ca1\u6709\u5220\u6389\uff0c\u5b9e\u9645\u4e0a\uff0c\u5982\u679c dir2 \u662f\u4e2a\u7a7a\u76ee\u5f55\uff0c\u90a3\u5b83\u662f\u4f1a\u88ab\u5220\u6389\u7684\n# \u800c\u5982\u679c\u8981\u771f\u6b63\u5220\u9664\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u6240\u6709\u7684\u5185\u5bb9\uff0c\u5c31\u9700\u8981\u6211\u4eec\u201c\u9012\u5f52\u201d\u5220\u9664\uff0c\u5373\u4f7f\u7528 -r\n\n# \u9012\u5f52\u5220\u9664 <dirname> \u4e0b\u6240\u6709\u5185\u5bb9\n$ rm -r <dirname>/*\n\n# \u9012\u5f52\u5220\u9664 <dirname>\n$ rm -r <dirname>\n\n# \u5371\u9669\uff1a\u5f3a\u5236\u9012\u5f52\u5220\u9664 <dirname>\n$ rm -rf <dirname>\n\n# \u63a8\u8350\uff1a\u9012\u5f52\u5220\u9664\u65f6\u9010\u4e00\u786e\u8ba4\n$ rm -ri dir2\nexamine files in directory dir2/? y     # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2//file3? y                                   # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2/? y                                             # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\n
"},{"location":"tech_accu/tool/Shell/#\u91cd\u5b9a\u5411\u76f8\u5173-","title":"\u91cd\u5b9a\u5411\u76f8\u5173 \ud83d\udca1","text":"

\u53ef\u4ee5\u8bf4\u8fd9\u662f Shell \u4e2d\u6700\u6709\u610f\u601d\u7684\u77e5\u8bc6\u70b9\u4e4b\u4e00\u4e86\u3002\u91cd\u5b9a\u5411\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u91cd\u65b0\u5b9a\u5411\uff0c\u66f4\u51c6\u786e\u7684\u6765\u8bf4\u662f\u7ed9\u6570\u636e\u6d41\u91cd\u65b0\u5b9a\u5411\u3002\u9996\u5148\uff0c\u6211\u4eec\u6765\u770b\u770b\u8fd9\u5f20\u56fe\uff0c\u5b83\u63cf\u8ff0\u4e86\u547d\u4ee4\u8fd0\u884c\u65f6\u7684\u6570\u636e\u4ea4\u4e92\u3002

flowchart TD;\ninput[\"file, keyboard, etc\"] \ncommand\noutput[\"file, screen, etc\"]\nerror[\"file, screen, etc\"]\n\ninput -->|\"Standard Input (stdin)\"| command\ncommand -->|\"Standard Output (stdout)\"| output\ncommand -->|\"Standard Error (stderr)\"| error

\u7b80\u5355\u7684\u63cf\u8ff0\u4e00\u4e0b\uff0c\u547d\u4ee4\u4ece\u6807\u51c6\u8f93\u5165\u6d41 stdin \u4e2d\u8bfb\u53d6\u8f93\u5165\u6570\u636e\uff0c\u5904\u7406\u8fc7\u7a0b\u4e2d\u6216\u8005\u662f\u5904\u7406\u7ed3\u675f\u540e\uff0c\u4f1a\u5411\u6807\u51c6\u8f93\u51fa\u6d41 stdout \u548c\u6807\u51c6\u9519\u8bef\u6d41 stderr \u4e2d\u5199\u5165\u6570\u636e\uff0c\u4e00\u822c\u6765\u8bf4 stdout \u627f\u8f7d\u7684\u662f\u6b63\u5e38\u7684\u8f93\u51fa\u6570\u636e\uff0c\u800c stderr \u627f\u8f7d\u7684\u662f\u62a5\u9519\u7b49\u4fe1\u606f\u3002

\u800c\u6240\u8c13\u7684\u91cd\u5b9a\u5411\uff0c\u6b63\u662f\u6307\u91cd\u5b9a\u5411\u8fd9\u4e09\u4e2a\u6d41\uff0c\u800c\u4e14\u66f4\u591a\u7684\u6307\u7684\u662f\u91cd\u5b9a\u5411 stdin \u548c stdout\u3002

\u800c\u5728 Shell \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ed6\u4eec\u7684\u4ee3\u7801\u6765\u6307\u4ee3\u4ed6\u4eec\uff0c\u5177\u4f53\u5185\u5bb9\u672c\u6587\u4e0d\u4f1a\u8fc7\u591a\u6d89\u53ca\uff0c\u5982\u679c\u60f3\u8981\u6df1\u5165\u4e86\u89e3\u53ef\u4ee5\u4ed4\u7ec6\u770b\u770b\u201c\u5408\u5e76\u201d\u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u3002

Stream: stdin stdout stderr Code: 0 1 2"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411---","title":"\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411 | > >>","text":"

\u57fa\u672c\u4e0a\u6240\u6709\u8bed\u8a00\u7684\u6559\u7a0b\u4e2d\u90fd\u4f1a\u5148\u4ecb\u7ecd\u5982\u4f55\u8f93\u51fa \u201dHello World!\u201c\uff08\u5f53\u7136\u4ed6\u4eec\u4e5f\u53ef\u80fd\u66f4\u60f3\u548c\u522b\u4eba\u6253\u62db\u547c\uff09\u3002\u603b\u800c\u8a00\u4e4b\uff0c\u8f93\u51fa\u5bf9\u4e00\u4e2a\u547d\u4ee4\u3001\u4e00\u4e2a\u7a0b\u5e8f\u662f\u81f3\u5173\u91cd\u8981\u7684\u3002\u4f46\u662f\u4f60\u4f1a\u53d1\u73b0\uff0c\u8fd9\u4e9b\u6307\u4ee4\u90fd\u53ea\u662f\u5c06\u5185\u5bb9\u6253\u5370\u5230\u4f60\u7684\u7ec8\u7aef\u91cc\uff0c\u5373 stdout \u91cc\uff0c\u53ea\u4e0d\u8fc7\u4e00\u822c\u88ab\u9001\u8fdb stdout \u7684\u4e1c\u897f\u4f1a\u88ab\u6253\u5370\u5728 screen \u4e0a\u3002

\u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u8981\u5b83\u88ab\u5199\u5165\u5230\u4e00\u4e2a\u53eb chat.txt \u7684\u6587\u4ef6\u91cc\uff0c\u4f60\u5f53\u7136\u53ef\u4ee5\u4f7f\u7528 fopen() \u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u5b9e\u73b0\uff0c\u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u7528 Shell \u6765\u5b9e\u73b0\u8fd9\u4e2a\u6548\u679c\u3002

\u6211\u4eec\u518d\u6b21\u56de\u5fc6\u6574\u4e2a\u8fc7\u7a0b\u4e2d\u6570\u636e\u7684\u6d41\u52a8\uff1a\u7a0b\u5e8f\u4e2d\u7684\u6570\u636e \u2192 stdout \u2192 screen\uff0c\u800c\u91cd\u5b9a\u5411\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u6539\u53d8 stdout \u2192 screen \u8fd9\u4e2a\u6b65\u9aa4\u3002

# \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command > file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u5199\u5165\u4e86 chat.txt\n$ echo \"Hello World!\" > chat.txt\n$ cat chat.txt\nHello World!\n\n# \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u8ffd\u52a0\u8fdb chat.txt\n$ echo \"Hello Human!\" >> chat.txt\n$ cat chat.txt\nHello World!\nHello Human!\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5b9e\u73b0\u4e86\u5c06\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\u5199\u5165 \"index.txt\"\n$ ls -al > index.txt\n

\u8bf6\u7b49\u7b49\uff0c\u4e0a\u9762\u600e\u4e48\u7a81\u7136\u51fa\u73b0\u4e86\u201c\u8ffd\u52a0\u201d\u8fd9\u4e2a\u8bcd\uff1f\u522b\u6025\u3002\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b fopen() \u3002\u5982\u679c\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u53ef\u5199\u6587\u4ef6\uff0cfopen() \u7684\u6a21\u5f0f\u53c2\u6570\u4e00\u822c\u662f w \uff0c\u6216\u8005\u662f a\u3002\u4ed6\u4eec\u5206\u522b\u4ee3\u8868 write \u548c append\uff0c\u5373\u8986\u5199\u548c\u8ffd\u52a0\u3002\u524d\u8005\u5c06\u76ee\u6807\u6587\u4ef6\u7684\u5185\u5bb9\u5168\u90e8\u8986\u76d6\uff0c\u5199\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5373\u76f8\u5f53\u4e8e\u6e05\u7a7a\u76ee\u6807\u6587\u4ef6\u7136\u540e\u5199\u5165\u5185\u5bb9\uff1b\u540e\u8005\u662f\u5728\u76ee\u6807\u6587\u4ef6\u7684\u5c3e\u90e8\u5f00\u59cb\u5199\u5165\u65b0\u5185\u5bb9\uff0c\u65e7\u7684\u5185\u5bb9\u4ecd\u7136\u4fdd\u7559\u3002\u6240\u4ee5\u4e0a\u9762\u7684\u4ee3\u7801\u4f1a\u51fa\u73b0 \u201cHello Human!\u201d \u88ab\u8ffd\u52a0\u5728 \u201cHello World!\u201d \u540e\u9762\u7684\u60c5\u51b5\u3002

\u73b0\u5728\uff0c\u5982\u679c\u4f60\u60f3\u8ba9\u4f60\u7684 a.exe \u8f93\u51fa\u7684\u4e1c\u897f\u88ab\u5199\u5165 out.txt \u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u8fd9\u6837\u8fd0\u884c\u5b83\uff1a

$ a.exe > out.txt\n
"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411--","title":"\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411 | <","text":"

\u4e0e\u8f93\u51fa\u76f8\u5bf9\u5e94\uff0c\u5982\u679c\u6211\u4eec\u60f3\u4ece\u6587\u4ef6\u4e2d\u8bfb\u53d6\u6570\u636e\u800c\u975e\u4ece Keyboard \u5199\u5165\u7684\u7f13\u51b2\u533a\u8bfb\u53d6\u5185\u5bb9\uff0c\u800c\u662f\u4ece\u67d0\u4e2a\u6587\u4ef6\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528 < \u6765\u91cd\u5b9a\u5411\u8f93\u5165\u3002

// \u5047\u8bbe a.exe \u7684\u6e90\u7801\u662f\u8fd9\u6837\u7684\n#include <stdio.h>\nint main(){\nchar str[1024];\nscanf(\"%s\", str);\nprintf(\"Hello %s!\", str);\n}\n
// \u5047\u8bbe in.txt \u4e2d\u7684\u5185\u5bb9\u4e3a\u5982\u4e0b\nisshikih\n
# \"file\" \u4f1a\u88ab\u5f53\u4f5c \"command\" \u7684\u8f93\u5165\u53c2\u6570\n$ command < file\n\n# \"a.exe\" \u4f1a\u8bfb\u5165 \"chat.txt\" \u7684\u5185\u5bb9\u4f5c\u4e3a\u8f93\u5165\n$ a.exe < in.txt\nHello isshikh!\n\n# \u7efc\u5408\u8d77\u6765\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u8fd9\u6837\n$ a.exe < in.txt > out.txt\n$ cat out.txt\nHello isshikih! 
"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411--2-2","title":"\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411 | 2> 2>>","text":"

stderr \u7684\u91cd\u5b9a\u5411\u57fa\u672c\u4e0a\u548c stdout \u662f\u4e00\u6837\u7684\u3002

# \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command 2> file\n\n# \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n

\u4f46\u5bf9\u4e8e stderr \uff0c\u6211\u4eec\u4f7f\u7528\u91cd\u5b9a\u5411\u7684\u76ee\u7684\u4e5f\u53ef\u80fd\u662f\u4e3a\u4e86\u8ba9\u4ed6\u4e0d\u8981\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u51fa\u6765\uff0c\u5373\u5c06\u5b83\u91cd\u5b9a\u5411\u5230\u522b\u7684\u5730\u65b9\u53bb\u3002

\u8fd9\u91cc\u9700\u8981\u4ecb\u7ecd\u4e00\u4e2a\u7279\u6b8a\u7684\u201c\u6587\u4ef6\u201d\uff0c /dev/null \u2014\u2014\u4efb\u4f55\u5199\u5165\u5230\u5b83\u7684\u5185\u5bb9\u90fd\u4f1a\u88ab\u4e22\u5f03\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u5c06 stderr \u91cd\u5b9a\u5411\u5230 /dev/null \uff0c\u5c31\u80fd\u5b9e\u73b0\u7c7b\u4f3c\u4e8e\u201c\u5ffd\u7565\u9519\u8bef\u6d41\u201d\u7684\u6548\u679c\u3002

# \"command\" \u7684\u9519\u8bef\u4fe1\u606f\u90fd\u4f1a\u88ab\u4e22\u5f03\n$ command 2> /dev/null\n
"},{"location":"tech_accu/tool/Shell/#\u5408\u5e76--","title":"\u5408\u5e76 | <& >&","text":"

\u6b64\u5916\uff0c\u8fd8\u6709 <& \u548c >& \u8fd9\u4e24\u4e2a\u7b26\u53f7\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u6211\u4e0d\u6253\u7b97\u5c55\u5f00\u8bb2\u8fd9\u4ef6\u4e8b\u3002\u8fd9\u91cc\u5f15\u7528\u8fd9\u4e00\u6279\u56de\u7b54\uff1a

n>&p\u00a0and\u00a0n<&p\u00a0are the same operator and are for duplicating the file descriptor (fd)\u00a0p\u00a0onto the file descriptor\u00a0n. Or said otherwise, they redirect the file descriptor\u00a0n\u00a0to whatever resource fd\u00a0p\u00a0is redirected to.

The\u00a0<\u00a0and\u00a0>\u00a0are not used to determine what direction (reading or writing) the redirected file descriptor will be used.\u00a0n\u00a0will get the same direction as\u00a0p. That is, if\u00a0p\u00a0was open for writing, so will be\u00a0n\u00a0even if the\u00a0n<&p\u00a0operator is used.

The only difference between the two operators is when\u00a0n\u00a0is not specified.\u00a0>&p\u00a0redirects stdout (is like\u00a01>&p\u00a0or\u00a01<&p) and\u00a0<&p\u00a0redirects stdin (is like\u00a00<&p\u00a0or\u00a00>&p).

So\u00a0<&0\u00a0is like\u00a00<&0, so redirects stdin to whatever resource stdin was redirected to, so does nothing useful, it's usually a no-op and doesn't make much sense.

But not always a no-op, not in every shell. When job control is disabled, POSIX requires stdin of command in the background to be redirected to\u00a0/dev/null\u00a0or an equivalent file. In Bash (tested in 4.4.12)\u00a0<&0\u00a0overrides this. Compare\u00a0(ls -l /proc/self/fd/0 &)\u00a0and\u00a0(<&0 ls -l /proc/self/fd/0 &). In some cases this is useful.

>&0\u00a0duplicates the fd 0 onto the fd 1. Because the fd 1 (stdout), is by convention only used for writing, that\u00a0>&0\u00a0only makes sense if fd 0 was open in read+write mode.

That would be the case in cases where fd 0 points to the terminal device, because terminal emulators or\u00a0getty\u00a0would generally open the terminal device in read+write mode and assign fds 0, 1 and 2 to it.

So maybe whoever wrote that wanted to redirect stdout to the terminal assuming that stdin was pointing to it.

One place where\u00a0n>&n\u00a0makes sense is with zsh and its\u00a0mult_IOs\u00a0feature. In\u00a0zsh:

some-cmd >&1 > some-file\n# that is: some-cmd 1>&1 1> some-file\n

Redirects the standard output of\u00a0some-cmd\u00a0to both whatever stdout was before (&1) and\u00a0some-file, as if you had written:

some-cmd | tee some-file\n

While

some-cmd <&0 < some-file\n# that is: some-cmd 0<&0 0< some-file\n

would feed first the original stdin and then\u00a0some-file\u00a0as input to\u00a0some-cmd\u00a0as if you had written:

cat - some-file | some-cmd\n

But in\u00a0cmd <&0 >&0, fd 0 is redirected only once, so that does not apply.

n>&n\u00a0can also have an interesting side effect in some shells (ksh,\u00a0zsh, not\u00a0dash,\u00a0bash\u00a0nor\u00a0yash) in that it triggers an error and gives up running the command if the file descriptor\u00a0n\u00a0is not open. So, in those shells,

cmd 0<&0\n

would avoid running\u00a0cmd\u00a0in the pathological condition where\u00a0stdin\u00a0is closed:

$ ksh -c 'cat file - <&0' <&-\nksh: 0: cannot open [Bad file descriptor]\n$ mksh -c 'cat file - <&0' <&-\nmksh: <&0 : bad file descriptor\n$ zsh -c 'cat file - <&0' <&-\nzsh:1: 0: bad file descriptor\n\n$ bash -c 'cat file - <&0' <&-\ncontents of file\ncat: -: Bad file descriptor\ncat: closing standard input: Bad file descriptor\n
"},{"location":"tech_accu/tool/Shell/#\u7ba1\u9053\u7b26--","title":"\u7ba1\u9053\u7b26 | |","text":"

\u524d\u9762\u8bb2\u4e86\u5982\u4f55\u5c06\u8f93\u5165\u8f93\u51fa\u91cd\u5b9a\u5411\u81f3 \u6587\u4ef6\uff0c\u5373\u6570\u636e\u7684\u6d41\u52a8\u662f \u4ece\u547d\u4ee4\u5230\u6587\u4ef6 \u6216\u662f \u4ece\u6587\u4ef6\u5230\u547d\u4ee4\u3002\u800c\u7ba1\u9053\u7b26 | \u5219\u5b9e\u73b0\u4e86\u5c06\u6570\u636e\u7684\u6d41\u52a8\u5b9a\u5411\u4e3a \u4ece\u547d\u4ee4\u5230\u547d\u4ee4\u3002

# \"command_1\" \u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a \"command_2\" \u7684\u8f93\u5165\n$ command_1 | command_2\n\n# \u4f7f\u7528 less \u6765\u67e5\u770b\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\n$ ls -al | less\n\n# \u4e00\u4e2a\u5e38\u7528\u7684\u7528\u6cd5\u662f\u642d grep \u5728\u65e5\u5fd7\u4e2d\u627e\u5230\u4f60\u60f3\u8981\u7684\u4e00\u884c\n# \u6bd4\u5982\u4e0b\u9762\u7684\u547d\u4ee4\u4f1a\u5728 xxx.log \u6587\u4ef6\u4e2d\u627e\u5230\u5e26\u6709\u5173\u952e\u8bcd \"lean_shell\" \u7684\u82e5\u5e72\u884c\n$ cat xxx.log | grep \"lean_shell\"\nLet us learn_shell together!\nLearn_shell means learn_shell and learn_shell!\n$ cat xxx.log\nCommand line is powerful!\nLet us learn_shell together!\nHave you ever see this?\nLearn_shell means learn_shell and learn_shell!\n\n# \u53c8\u6216\u8005\u8ba1\u7b97\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u591a\u5c11\u6587\u4ef6\u5939\u548c\u6587\u4ef6\n$ ls -a | wc -w\n5\n$ ls -a\n.   ..  x   xx  xxx.log\n\n# \u518d\u6bd4\u5982\uff0c\u7edf\u8ba1\u5f53\u524d\u76ee\u5f55\u4e0b\u5404\u4e2a\u6587\u4ef6\u5939\u7684\u5927\u5c0f\uff0c\u5e76\u8f93\u51fa\u4ece\u5927\u5230\u5c0f\u7684 10 \u9879\n$ du | sort -nr | head\n# \u627e\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\uff08\u9012\u5f52\uff09\u6240\u6709\u53eb\u505a \"xxx\" \u7684\u6587\u4ef6\u5e76\u5220\u9664\n$ find . -name \"xxx\"  | xargs rm -f\n
"},{"location":"tech_accu/tool/Shell/#\u7b5b\u9009\u5668","title":"\u7b5b\u9009\u5668","text":"

\u53ef\u4ee5\u53d1\u73b0\uff0c\u91cd\u5b9a\u5411\u7684\u529f\u80fd\u975e\u5e38\u5f3a\u5927\u3002\u540c\u65f6\uff0c\u8fd9\u91cc\u4e5f\u6709\u5f88\u591a\u7b5b\u9009\u5668\u4f9b\u4f60\u9009\u62e9\uff0c\u4ed6\u4eec\u7ecf\u5e38\u642d\u914d\u7ba1\u9053\u7b26\u4f7f\u7528\uff0c\u4ee5\u8f85\u52a9\u7ba1\u9053\u7b26\u8fdb\u884c\u4e00\u4e9b\u66f4\u590d\u6742\u7684\u5de5\u4f5c\u3002

Source: https://linuxcommand.org/lc3_lts0070.php

"},{"location":"tech_accu/tool/Shell/#\u811a\u672c-shell","title":"\u811a\u672c Shell","text":"

\u7b80\u5355\u6765\u8bf4\uff0cShell \u811a\u672c\u53ef\u4ee5\u770b\u4f5c\u4e00\u6761\u6761 Shell \u6307\u4ee4\u7684\u96c6\u5408\uff0c\u6211\u4eec\u5728\u8fd0\u884c Shell \u811a\u672c\u65f6\uff0cShell \u811a\u672c\u4e2d\u7684\u6307\u4ee4\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u4e00\u884c\u4e00\u884c\u7684\u88ab\u6267\u884c\u4e0b\u6765\u3002

Shell \u811a\u672c\u4e00\u822c\u662f\u4ee5 .sh \u4e3a\u540e\u7f00\u7684\u7eaf\u6587\u672c\u6587\u4ef6\uff0c\u800c\u6267\u884c Shell \u811a\u672c\u7684\u65b9\u6cd5\u5927\u81f4\u6709\u4e09\u79cd\uff1a

\u4ed6\u4eec\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a

"},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u6761\u4ef6\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u6761\u4ef6\u8bed\u53e5","text":"
# \u6761\u4ef6\u5206\u652f\u8bed\u53e5\nif condition1\nthen\ncommands\nelif condition2\nthen\ncommands else\ncommands\nfi\n
# \u5f53 $var \u4e3a \"A\" \u65f6\u6267\u884c\u7b2c\u4e00\u5757\uff0c\u5f53 $var \u4e3a \"B\" \u65f6\u6267\u884c\u7b2c\u4e8c\u5757\uff0c*) \u5373\u5176\u4ed6\u60c5\u51b5\ncase $var in \"A\")\ncommands\n    ;;\n\"B\")\ncommands\n    ;; *)\ncommands\n    ;;\nesac\n
"},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u5faa\u73af\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u5faa\u73af\u8bed\u53e5","text":"
# \u4f9d\u6b21\u679a\u4e3e\u82e5\u5e72 item\uff0cvar \u8868\u793a\u6b63\u5728\u679a\u4e3e\u7684\u5185\u5bb9\nfor var in item1 item2 ... itemN\ndo\ncommands\ndone\n
# \u8fd0\u884c\u5230 condition \u4e3a\u5047\u65f6\u7ed3\u675f\nwhile condition\ndo\ncommands\ndone\n
# \u8fd0\u884c\u5230 condition \u4e3a\u771f\u65f6\u7ed3\u675f\nuntil condition\ndo\ncommands\ndone\n
"},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u51fd\u6570","title":"\u6d41\u7a0b\u63a7\u5236 - \u51fd\u6570","text":"
# \u5b9a\u4e49\u4e86\u4e00\u4e2a\u53eb\u505a foo \u7684\u51fd\u6570\uff0cfunction \u53ef\u4ee5\u4e0d\u5199\nfunction foo(){\ncommands\n}\n
"},{"location":"tech_accu/tool/Shell/#\u53c2\u6570\u4f20\u9012","title":"\u53c2\u6570\u4f20\u9012","text":"

\u5bf9\u4e8e\u51fd\u6570\u6216\u547d\u4ee4\u53ef\u4ee5\u7528 $n \u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002\u4f46\u5f53 n \u4e0d\u6b62\u4e00\u4f4d\u6570\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 ${n} \u7684\u65b9\u5f0f\u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002

#! /bin/bash\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n
$ ./foo.sh a b c d e f g h i j\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
#! /bin/bash\nfunction foo(){\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n}\n\nfoo a b c d e f g h i j\n
$ ./script.sh\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
"},{"location":"tech_accu/tool/Shell/#\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","title":"\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","text":"

\u56de\u5fc6\u5faa\u73af\u8bed\u53e5\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u9700\u8981\u5199\u51fa\u679a\u4e3e\u7684\u6bcf\u4e00\u4e2a\u9879\u76ee\u3002\u663e\u7136\uff0c\u5728\u5927\u91cf\u679a\u4e3e\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\uff0c\u624b\u5199\u51fa\u5168\u90e8\u7684\u679a\u4e3e\u53ef\u80fd\u4e0d\u592a\u73b0\u5b9e\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u4f1a\u60f3\u8981\u4f7f\u7528\u6587\u4ef6\u503c\u6216\u662f\u547d\u4ee4\u7684\u8f93\u51fa\u6765\u5b9e\u73b0\u3002\u8fd9\u4e2a\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 ``` \u628a\u628a\u547d\u4ee4\u7ed9\u62ec\u8d77\u6765\u3002

A\nB\nC\n
for var in `cat file`\ndo\necho - var done\n
- A\n- B\n- C\n
"},{"location":"tech_accu/tool/Shell/#\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684-shell","title":"\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684 Shell","text":"

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u524d\u9762\u7ed9\u51fa\u7684\u82e5\u5e72\u811a\u672c\u6837\u4f8b\u4e2d\uff0c\u6211\u4eec\u7684\u7b2c\u4e00\u884c\u90fd\u6709\u4e00\u884c\u5947\u602a\u7684\u6ce8\u91ca\uff1a

#! /bin/bash\n

\u8fd9\u53e5\u8bdd\u7684\u610f\u601d\u662f\uff0c\u6307\u5b9a\u8be5\u811a\u672c\u9ed8\u8ba4\u4f7f\u7528 /bin/bash \u6765\u6267\u884c\u3002\u8fd9\u91cc\u9700\u8981\u4f7f\u7528\u7edd\u5bf9\u8def\u5f84\u6765\u7d22\u5f15 Shell \u7684\u53ef\u6267\u884c\u6587\u4ef6\u3002

"},{"location":"tech_accu/tool/Shell/#\u4e00\u4e2a\u6a21\u677f","title":"\u4e00\u4e2a\u6a21\u677f","text":"

\u8fd9\u91cc\u518d\u8d34\u4e00\u4e2a\u6211\u81ea\u5df1\u5199 Shell \u811a\u672c\u7684\u65f6\u5019\u4f1a\u91c7\u7528\u7684\u6a21\u677f\u3002

#! /bin/bash\n\n# get current direction\ncurDir=`pwd`\n# get shell direction\nworkDir=$(cd \"$(dirname \"$0\")\";pwd)\n\ncd $workDir\n\n# Write your script here.\n\ncd $curDir\n
"},{"location":"tech_accu/tool/Shell/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"

\u547d\u4ee4\u884c\u5e38\u89c1\u5feb\u6377\u952e\uff0cSource: https://lym.readthedocs.io/en/latest/startingcommands.html?highlight=mkdir#moving-around-in-the-command-line

"},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u8d44\u6599","title":"\u76f8\u5173\u8d44\u6599","text":""},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u77e5\u8bc6\u70b9","title":"\u76f8\u5173\u77e5\u8bc6\u70b9","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-\\.]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u6b22\u8fce\uff01","text":"

\u7ea6 108 \u4e2a\u5b57

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

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

\u63a8\u8350\u9605\u8bfb

\u7ad9\u70b9\u7edf\u8ba1

\u672c\u7ad9\u76ee\u524d\u5171 96 \u9875\uff0c\u7d2f\u8ba1 194588 \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 177 \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

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

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

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

\u7ea6 20 \u4e2a\u5b57

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

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

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

\u8bfe\u7a0b\u4fe1\u606f

Notes

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

x 0 1 P 1-p p

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u5982\u679c\uff1a

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u5747\u5300\u5206\u5e03

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

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

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

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

\u6b63\u6001\u5206\u5e03

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

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

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

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

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

\u5982\u679c\u5bf9\u4e8e\u4efb\u610f\u7684\u4e24\u4e2a\u5b9e\u6570\u96c6\u5408\\(D_1,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,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,Y\\)\u72ec\u7acb\u3002

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

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

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

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

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

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

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

\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\uff08Mathematical Expectation\uff09\u6216\u5747\u503c\uff08Mean\uff09\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\\)\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

\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\\)

\u5bf9\u4e8e\u968f\u673a\u53d8\u91cf\u51fd\u6570\uff0c\u53ea\u9700\u8981\u5c06\u5b9a\u4e49\u4e2d\\(x_i\\)\u6362\u4e3a\\(g(x_i)\\)\u5373\u53ef\uff0c\u5f53\u7136\u9700\u8981\u4fdd\u8bc1\u671f\u671b\u5b58\u5728\u3002\u800c\u9664\u4e86\u5b9a\u4e49\u8ba1\u7b97\uff0c\u4e5f\u6709\u4e00\u4e9b\u6027\u8d28\u53ef\u4ee5\u7b80\u5316\u8ba1\u7b97\u3002

\u6570\u5b66\u671f\u671b\u7684\u6027\u8d28\uff1a

  1. \u82e5\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(E(C) = C\\)\uff1b
  2. \u8bbe\\(X\\)\u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(E(C\u30fbX)=C\u30fbE(X)\\)\uff1b
  3. \u8bbe\\(X,Y\\)\u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219\\(E(X+Y)=E(X)+E(Y)\\)\uff1b
  4. \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(\\sum^n_i{c_i\u30fbX_i})=\\sum^n_i c_i\u30fbE(X_i)\\)\uff1b
  5. \u4e0a\u8ff0\u4e09\u6761\u5408\u5e76\u8d77\u6765\u5c31\u662f\\(E(aX+bY+c)=aE(X)+bE(Y)+c\\)\uff1b
  6. \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
  7. \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u968f\u673a\u53d8\u91cf\uff1a\\(E(\\prod_i^nX_i)=\\prod_i^nE(X_i)\\)\uff1b

\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)=E\\{[X-E(X)]^2\\}\\)\u3002\u8bb0\\(\\delta(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\u5b58\u5728\u3002

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

\u800c\u5176\u8ba1\u7b97\u65b9\u6cd5\u53ef\u4ee5\u5229\u7528\u671f\u671b\u7684\u6027\u8d28\uff0c\u8bb0\\(g(X)=(X-E(X))^2\\)\uff0c\u7136\u540e\u8ba1\u7b97\\(E(g(X))\\)\u3002\u5177\u4f53\u7684\uff1a

\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}\\)

\u65b9\u5dee\u7684\u6027\u8d28\uff1a

  1. \u82e5\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(Var(C) = 0\\)\uff1b
  2. \u8bbe\\(X\\)\u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\)\u662f\u5e38\u6570\uff0c\u5219\\(Var(C\u30fbX)=C^2\u30fbVar(X)\\)\uff1b
  3. \u8bbe\\(X,Y\\)\u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219\\(Var(X\\pm Y)=Var(X)+Var(Y)\\pm2E\\{[X-E(X)][Y-E(Y)]\\}\\\\=Var(X)+Var(Y)\\pm 2Cov(X,Y)\\)\uff1b
  4. \u7279\u522b\u7684\uff0c\u5982\u679c\\(X,Y\\)\u76f8\u4e92\u72ec\u7acb\uff0c\u5219\\(Var(X\\pm Y)=Var(X)+Var(Y)\\)\uff1b
  5. \u8fdb\u4e00\u6b65\u7684\uff0c\u5982\u679c\\(X_i\\;(i=1,2,...,n)\\)\u5f7c\u6b64\u72ec\u7acb\uff0c\u5219\\(Var(c_1X_1\\pm c_2X_2\\pm...\\pm c_nX_n)=c_1^2Var(X_1)+c_2^2Var(X_2)+...+c_n^2Var(X_n)\\)
  6. \u4e0a\u8ff0\u4e09\u6761\u5408\u5e76\u8d77\u6765\u5c31\u662f\\(Var(aX+bY+c)=a^2Var(X)+b^2Var(Y)\\)\uff1b
  7. \\(Var(X)\\leq E((X-c)^2)\\)\uff0c\u5e76\u4e14\u5f53\u4e14\u4ec5\u5f53\\(E(X)=c\\)\u65f6\u7b49\u53f7\u6210\u7acb\uff1b
  8. \\(Var(X)=0 \\;\\;\\;\\;\\;\\Leftrightarrow \\;\\;\\;\\;\\;P(X=c)=1 \\;\\;\\;and\\;\\;\\;c=E(X)\\)\uff1b

\u53d8\u5f02\u7cfb\u6570\u53c8\u53eb\u201c\u6807\u51c6\u5dee\u7387\u201d\uff0c\u662f\u8861\u91cf\u8d44\u6599\u4e2d\u5404\u89c2\u6d4b\u503c\u53d8\u5f02\u7a0b\u5ea6\u7684\u53e6\u5916\u4e00\u4e2a\u6570\u5b57\u7279\u5f81\u3002\u53d8\u5f02\u7cfb\u6570\\(Cv(X)=\\frac{\\sqrt{Var(X)}}{E(X)}\\)\u540c\u6837\u63cf\u8ff0\u79bb\u6563\u7a0b\u5ea6\uff0c\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

\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)}}\\)

\u534f\u65b9\u5dee\u7684\u6027\u8d28\uff1a

  1. \\(Cov(X,Y)=Cov(Y,X)\\)\uff1b
  2. \\(Cov(X,Y)=E(XY)-E(X)E(Y)\\)\uff1b
  3. \\(Cov(aX,bY)=abCov(X,Y)\\;,\\;\\;a,b\\in\\R\\)\uff1b
  4. \\(Cov(X+Y,Z)=Cov(X,Z)+Cov(Y,Z)\\)\uff1b
  5. \\(Cov(X,X)=Var(X)\\)\uff1b
  6. \\(Cov(c,Y)=E(cY)-E(c)E(Y)=0\\;,\\;\\;c\\in\\R\\)\uff1b
  7. \\(Cov(X+Y,X-Y)=Cov(X,X)-Cov(Y,Y)=Var(X)-Var(Y)\\)\uff1b
  8. \\(Cov(X^*,Y^*)=Cov(\\frac{X-E(X)}{\\sqrt{Var(X)}},\\frac{Y-E(Y)}{\\sqrt{Var(Y)}})=\\frac{Cov(X,Y)}{\\sqrt{Var(X)}\\sqrt{Var(Y)}}=\\rho_{_{XY}}\\)\uff1b
  9. \\(Cov(aX+bY,cX+dY)=acVar(X)+bdVar(Y)+(ad+bc)Cov(X,Y)\\)\uff1b
  10. \\(D(aX+bY)=a^2Var(X)+b^2Var(Y)+2abCov(X,Y)\\)\uff1b

\u76f8\u5173\u7cfb\u6570\u7684\u6027\u8d28

  1. \\(|\\rho_{_{XY}}|\\leq 1\\)\uff1b
  2. \\(|\\rho_{_{XY}}|=1 \\;\\;\\; \\Leftrightarrow \\;\\;\\; \\exists a,b\\in \\R,\\;s.t.\\;P(Y=a+bX)=1|\\)\uff1b
  3. \\(\\rho_{_{XY}}=1\\)\u65f6\uff0c\\(b>0\\)\uff1b
  4. \\(\\rho_{_{XY}}=-1\\)\u65f6\uff0c\\(b<0\\)\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\uff1a

\\(X,Y\\text{\u4e92\u76f8\u72ec\u7acb} \\;\\; \\Rightarrow \\;\\; X,Y\\text{\u4e0d\u76f8\u5173}\\\\ X,Y\\text{\u4e0d\u72ec\u7acb}\\;\\;\\Leftarrow \\;\\;X,Y\\text{\u76f8\u5173}\\)

\u591a\u5143\u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81\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\u3002\u5b83\u662f\u4e00\u4e2a\u5bf9\u79f0\u7684\u975e\u8d1f\u5b9a\u77e9\u9635\u3002

\\(n\\)\u7ef4\u6b63\u6001\u53d8\u91cf\u91cd\u8981\u6027\u8d28

  1. \\(n\\)\u7ef4\u6b63\u6001\u53d8\u91cf\\((X_1,X_2,...,X_n)\\)\u7684\u6bcf\u4e00\u4e2a\u5206\u91cf\\(X_i\\)\u90fd\u662f\u6b63\u6001\u53d8\u91cf\uff1b
  2. \u53cd\u4e4b\uff0c\u5982\u679c\\(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
  3. \\(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\u8bbe\u4e0d\u5168\u4e3a\\(0\\)\u7684\\(l_i\\)\u5e38\u6570\uff0c\u5747\u6709\\(\\sum_i^n l_iX_i\\)\u670d\u4ece\u4e00\u7ef4\u6b63\u6001\u5206\u5e03\uff1b
  4. \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\uff1b
  5. \u82e5\\((X_1,X_2,...,X_n)\\)\u670d\u4ece\\(n\\)\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u5219\\(X_i\\)\u4e92\u76f8\u72ec\u7acb\u7684\u5145\u8981\u6761\u4ef6\u662f\\(X_i\\)\u4e24\u4e24\u4e0d\u76f8\u5173\uff1b
"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/","title":"[5.x] \u5927\u6570\u5b9a\u5f8b\u53ca\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","text":"

\u7ea6 1172 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

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

\u4f9d\u6982\u7387\u6536\u655b\u8bbe\\(\\{Y_n,n\\geq1\\}\\)\u4e3a\u4e00\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\\(c\\)\u4e3a\u4e00\u5e38\u6570\u3002\u82e5\\(\\forall\\varepsilon>0\\;\\;\\;s.t. \\;\\;\\lim_{n\\to+\\infty}P\\{|Y_n-c|\\geq\\varepsilon\\}=0\\)\uff0c\u5219\u79f0\\(\\{Y_n,n\\geq1\\}\\)\u4f9d\u6982\u7387\u6536\u655b(Convergence in Probability)\u4e8e\\(c\\)\uff0c\u8bb0\u505a\\(Y_n\\xrightarrow{P} c\\;,\\;\\;n\\to+\\infty\\)\u3002\u7b49\u4ef7\u7684\uff0c\u4e5f\u53ef\u4ee5\u5c06\u6761\u4ef6\u5199\u6210\\(\\forall\\varepsilon>0\\;\\;\\;s.t. \\;\\;\\lim_{n\\to+\\infty}P\\{|Y_n-c|<\\varepsilon\\}=1\\)\u3002

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

  1. \\(\\left\\{ \\begin{aligned} X_n\\xrightarrow{P} a\\\\ Y_n\\xrightarrow{P} b \\end{aligned} \\right. \\;\\;,\\;\\;n\\to+\\infty\\;\\;,\\;\\;a,b\\in\\mathbf{R}\\)\uff1b
  2. \u4e8c\u5143\u51fd\u6570\\(g(x,y)\\)\u5728\u70b9\\((a,b)\\)\u8fde\u7eed\uff08\u4f8b\u5982\u56db\u5219\u8fd0\u7b97\uff09\uff1b

\u5219\u6709\uff1a

\u8be5\u6027\u8d28\u5373\u4f9d\u6982\u7387\u6536\u655b\u53ef\u4ee5\u5728\u53cc\u76ee\u8fd0\u7b97\u7b26\u4e2d\u8fdb\u884c\u4e0b\u653e\u3002

\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\u5219\\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a\\(P \\{ |Y| \\geq \\varepsilon \\}\\leq \\frac{E(|Y|^k)}{\\varepsilon^k}\\;\\; or \\;\\; P\\{|Y| < \\varepsilon \\} \\geq 1 - \\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\u662f\u9a6c\u5c14\u53ef\u592b\u4e0d\u7b49\u5f0f\u7684\u63a8\u8bba\u82e5\u968f\u673a\u53d8\u91cf\\(X\\)\u7684\u6570\u5b66\u671f\u671b\u548c\u65b9\u5dee\u5b58\u5728\uff0c\u5206\u522b\u8bb0\\(E(X)=\\mu\\;,\\; Var(X) = \\sigma^2\\)\uff0c\u5219\\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a\\(P\\{ |X-\\mu|\\geq \\varepsilon \\} \\leq \\frac{\\sigma^2}{\\varepsilon^2}\\;\\;or\\;\\;P\\{ |X-\\mu|< \\varepsilon \\} \\geq1- \\frac{\\sigma^2}{\\varepsilon^2}\\) \u53ef\u4ee5\u8bb0\u5fc6\u4e3a\\(P\\{ \\sigma^2\\geq \\varepsilon^2 \\} \\leq \\frac{\\sigma^2}{\\varepsilon^2}\\;\\;or\\;\\;P\\{ \\sigma^2< \\varepsilon^2 \\} \\geq1- \\frac{\\sigma^2}{\\varepsilon^2}\\)

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u5927\u6570\u5b9a\u7406","title":"\u5927\u6570\u5b9a\u7406","text":"

\u5927\u6570\u5b9a\u7406\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\\(\\forall \\varepsilon > 0\\)\uff0c\u6709;\\(\\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|\\geq \\varepsilon\\}=0 \\;\\; or \\;\\; \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|< \\varepsilon\\}=1\\) \u5373\uff1a\\((\\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\u89c2\u5bdf\u5230\u5982\u679c\u4ee4\\(Z_n=\\frac{1}{n}\\sum_{i=1}^{n}Y_i\\)\uff0c\u5219\u8868\u8fbe\u5f0f\u7684\u542b\u4e49\u4e3a\\(Z_n\\xrightarrow{P}c\\;\\;,\\;\\;n\\to+\\infty\\)\uff0c\u5373\u5927\u6570\u5b9a\u5f8b\u4e5f\u53ef\u4ee5\u8868\u8ff0\u4e3a\uff1a

\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\\)

\u4f2f\u52aa\u5229(Bernoulli)\u5927\u6570\u5b9a\u5f8b\u8bbe\\(n_A\\)\u8868\u793a\\(n\\)\u91cd\u8d1d\u52aa\u529b\u5b9e\u9a8c\u4e2d\u4e8b\u4ef6\\(A\\)\u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0\\(P(A)=p\\)\uff0c\u5219\\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a\\(\\lim_{n\\to+\\infty}P\\{|\\frac{n_A}{n}-p|\\geq \\varepsilon\\}=0\\)

\u8f9b\u94a6(Khinchin)\u5927\u6570\u5b9a\u5f8b*\u5373\u4f7f\u968f\u673a\u53d8\u91cf\u7684\u65b9\u5dee\u4e0d\u5b58\u5728\uff0c\u671f\u671b\u5b58\u5728\u5373\u53ef\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\\(\\forall\\varepsilon>0\\)\uff0c\u6709\uff1a\\(\\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}X_i-\\mu|\\geq \\varepsilon\\}=0\\;\\;\\;or\\;\\;\\;\\frac{1}{n}\\sum_{i=1}^{n}X_i\\xrightarrow{P}\\mu\\;\\;,\\;\\;n\\to+\\infty\\)

\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\\(\\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\\;\\;\\;or\\;\\;\\;\\frac{1}{n}\\sum_{i=1}^{n}h(X_i)\\xrightarrow{P}a\\;\\;,\\;\\;n\\to+\\infty \\\\ where\\;\\;\\;a=E(|h(X_1)|)\\)

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

\u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8bbe\\(\\{X_i,i\\geq 1\\}\\)\u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14\\(E(X_i)=\\mu\\;\\;,\\;\\;Var(X_i)=\\sigma^2\\;\\;(\\sigma>0)\\)\uff0c\u5219\\(\\forall x\\in \\mathbf{R}\\)\uff0c\u6709\uff1a

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

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

\\[ \\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} \\]

\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5199\u6210\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":"

\u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u6709\u5982\u4e0b\u63a8\u8bba\uff1a\u68e3\u83ab\u5f17-\u62c9\u666e\u62c9\u65af\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8bbe\\(n_A\\)\u8868\u793a\\(n\\)\u91cd\u8d1d\u52aa\u529b\u5b9e\u9a8c\u4e2d\u4e8b\u4ef6\\(A\\)\u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0\\(P(A)=p\\)\uff0c\u5219

\\[ \\forall x\\in\\mathbf{R}$\uff0c\u6709\uff1a<br />$\\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) \\]"},{"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_{+\\infty}\\frac{1}{B_n^{2+\\varepsilon}}\\sum_{i=1}^{n}E|X_i-\\mu_i|^{2+\\varepsilon}=0\\;\\;\\;where\\;\\;\\;B_n^{2}=\\sum_{i=1}^{n}\\sigma_i^2\\) \u5219\uff1a

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/","title":"[6.x] \u7edf\u8ba1\u91cf\u4e0e\u62bd\u6837\u5206\u5e03","text":"

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

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

\u603b\u4f53(Population)\u4e2a\u4f53(Individual)\u603b\u4f53\u5bb9\u91cf\u6709\u9650\u603b\u4f53(Finite Population)\u65e0\u9650\u603b\u4f53(Infinite Population)\u6837\u672c(Sample)

\u6837\u672c\u5bb9\u91cf\u968f\u673a\u6837\u672c(Random Sample)\u7b80\u5355\u968f\u673a\u6837\u672c(Simple Random Sample)\u6837\u672c\u503c / \u89c2\u5bdf\u503c\u6837\u672c\u7684\u8054\u5408\u5206\u5e03\u51fd\u6570\uff1a\\(F(x_1,x_2,...,x_n)=\\prod_{i=1}^{n} F(x_i).\\)

\u5b9a\u4e49\u8bbe\u603b\u4f53\\(X\\)\u662f\u5177\u6709\u5206\u5e03\u51fd\u6570\\(F(\u00b7)\\)\u7684\u968f\u673a\u53d8\u91cf\uff0c\\(X_1,X_2,...,X_n\\)\u662f\u6765\u81ea\u603b\u4f53\\(X\\)\u7684\u968f\u673a\u6837\u672c\uff0c\u82e5\u6ee1\u8db3\uff1a

  1. \\(X_1,X_2,...,X_n\\)\u662f\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff1b
  2. \u6bcf\u4e00\u4e2a\\(X_i\\)\u4e0e\\(X\\)\u6709\u76f8\u540c\u7684\u5206\u5e03\u51fd\u6570\uff1b

\u5219\u79f0\\(X_1,X_2,...,X_n\\)\u4e3a\u53d6\u81ea\u603b\u4f53\\(X\\)\u7684\u7b80\u5355\u968f\u673a\u6837\u672c\u3002

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

\u7edf\u8ba1\u91cf(Statistic)\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\u6837\u672c\\(X_1,X_2,...,X_n\\)\u7684\u51fd\u6570\uff0c\u82e5\\(g\\)\u4e2d\u4e0d\u542b\u672a\u77e5\u53c2\u6570\uff0c\u5219\u79f0\\(g(X_1,X_2,...,X_n)\\)\u662f\u4e00\u7edf\u8ba1\u91cf\u3002

\u5982\u4e0b\u4e3a\u51e0\u79cd\u5e38\u89c1\u7684\u91cd\u8981\u7edf\u8ba1\u91cf\uff1a

  1. \u6837\u672c\u5747\u503c\uff08\u5e38\u4f5c\u4e3a\u603b\u4f53\u503c\\(\\mu\\)\u7684\u4f30\u8ba1\uff09

\\(\\overline{X}=\\frac{1}{n}\\sum_{i=1}^{n}X_i\\) \\(E(\\overline x)=\\mu\\;\\;,\\;\\;Var(\\overline x)=\\sigma^2/n\\)

\\[ S^2=\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2=\\frac{1}{n-1}(\\sum_{i=1}^{n}X_i^2-n\\overline{X}^2) \\] \\[ E(S^2)=\\sigma^2 \\]

\\(\\sum(x_i-\\overline x)^2=\\sum x_i^2-\\frac{(\\sum x_i)^2}{n}=\\sum x_i^2-n\\overline x^2\\)

  1. \u6837\u672c\u6807\u51c6\u5dee

\\(S=\\sqrt{S^2}=\\sqrt{\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2}\\)

  1. \u6837\u672c\\(k\\)\u9636\uff08\u539f\u70b9\uff09\u77e9\uff08\u5e38\u4f5c\u4e3a\u603b\u4f53\u539f\u70b9\u77e9\\(\\mu_k\\)\u7684\u4f30\u8ba1\uff09

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

  1. \u6837\u672c\\(k\\)\u9636\u4e2d\u5fc3\u8ddd\uff08\u5e38\u4f5c\u4e3a\u603b\u4f53\u4e2d\u5fc3\u77e9\\(\\nu_k\\)\u7684\u4f30\u8ba1\uff09\uff08\\(B_2\\)\u53ef\u4f5c\u4e3a\u603b\u4f53\u65b9\u5dee\\(\\sigma^2\\)\u7684\u6709\u504f\u4f30\u8ba1\uff09

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

\\(A_k=\\frac{1}{n}\\sum_{i=1}^{n}X_i^k\\xrightarrow{P}\\mu_k,\\;\\;k=1,2,...\\)

"},{"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\u6210\u4e3a\u62bd\u6837\u5206\u5e03(Sampling Distribution)\uff0c\u5728\u4f7f\u7528\u7edf\u8ba1\u91cf\u8fdb\u884c\u63a8\u65ad\u65f6\u9700\u8981\u77e5\u9053\u62bd\u6837\u5206\u5e03\u3002

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

\\(\\chi^2\\)\u5206\u5e03 / \u5361\u65b9\u5206\u5e03\u8bbe\\(X_1,X_2,...,X_n\\)\u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u670d\u4ece\\(N(0,1)\\)\u3002\u8bb0\\(Y=X_1^2+X_2^2+...+X_n^2\\)\uff0c\u5219\u79f0\\(Y\\)\u670d\u4ece\u81ea\u7531\u5ea6\u4e3a\\(n\\)\u7684\\(\\chi^2\\)\u5206\u5e03\uff0c\u8bb0\\(Y\\sim \\chi^2(n)\\)\u3002\\(\\chi^2\\)\u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\u4e3a\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,&other, \\end{aligned} \\right. \\]

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

  1. \\(\\chi^2\\)\u5206\u5e03\u53ef\u52a0\uff1a\u8bbe\\(Y_1 \\sim \\chi^2(m),\\;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
  2. \\(\\chi^2\\)\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u4e0e\u65b9\u5dee\uff1a\\(E(\\chi^2(n))=n,\\;Var(\\chi^2(n))=2n\\)\uff1b
  3. \\(\\chi^2\\)\u5206\u5e03\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)\\)*\u4fa7\uff09\\(\\alpha\\)\u5206\u4f4d\u6570*\u3002

  1. \u8bbe\\(X_1,X_2,...,X_n\\)\u4e3a\u6765\u81ea\u6b63\u6001\u603b\u4f53\\(N(\\mu,\\sigma^2)\\)\u7684\u7b80\u5355\u968f\u673a\u6837\u672c\uff0c\\(\\overline{X}\\)\u662f\u6837\u672c\u5747\u503c\uff0c\\(S^2\\)\u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a
  2. \\(\\overline X\\)\u4e0e\\(S^2\\)\u76f8\u4e92\u72ec\u7acb\uff1b
  3. \\(\\overline X\\sim N(\\mu,\\sigma^2/n)\\)\uff1b
  4. \\(\\frac{\\sum_{i=1}^n(X_i-\\overline X)^2}{\\sigma^2}=\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\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":"

\\(t\\)\u5206\u5e03 / \u5b66\u751f\u6c0f(Student)\u5206\u5e03\u8bbe\\(X\\sim N(0,1),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)\\)\uff0c\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a\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}\\) \\(t\\)\u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

  1. \\(t\\)\u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\\(f_t(x)\\)\u662f\u5076\u51fd\u6570\uff0c\u5173\u4e8e\\(y\\)\u8f74\u5bf9\u79f0\uff1b
  2. \u7531\\(t\\)\u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\u53ef\u4ee5\u5f97\u5230\uff1a\\(\\lim_{n\\to+\\infty}f_t(x)=\\frac{1}{\\sqrt{2\\pi}}e^{-{x^2}/{2}}\\)\uff1b
  3. \u5f53\\(n\\)\u8db3\u591f\u5927\u65f6\uff0c\\(t\\)\u5206\u5e03\u8fd1\u4f3c\u4e8e\u6807\u51c6\u6b63\u6001\u5206\u5e03\\(N(0,1)\\)\uff1b
  4. \\(t\\)\u5206\u5e03\u5206\u4f4d\u6570\uff0c\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u6b63\u6570\\(\\alpha,\\;\\;0<\\alpha<1\\)\uff0c\u79f0\u6ee1\u8db3\u6761\u4ef6\\(P\\{t>t_\\alpha(n)\\}=\\int_{t_\\alpha(n)}^{+\\infty}f_t(x)\\mathrm{d}x=\\alpha\\)\u7684\u70b9\\(t_\\alpha(n)\\)\u4e3a\\(t(n)\\)\u5206\u5e03\u7684\u4e0a\uff08\u4fa7\uff09\\(\\alpha\\)\u5206\u4f4d\u6570\uff1b

  1. \\(t^2\\sim F(1,n)\\)\uff1b
  2. \u81ea\u7531\u5ea6\u4e3a\\(1\\)\u7684\\(t\\)\u5206\u5e03\u5c31\u662f\u6807\u51c6\u67ef\u897f\u5206\u5e03\uff0c\u5176\u5747\u503c\u4e0d\u5b58\u5728\uff1b
  3. \\(n>1\\)\u65f6\\(t\\)\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u5b58\u5728\u4e14\u4e3a\\(0\\)\uff1b
  4. \\(n>2\\)\u65f6\\(t\\)\u5206\u5e03\u7684\u65b9\u5dee\u5b58\u5728\u4e14\u4e3a\\(\\frac{n}{n-2}\\)\uff1b
  5. \u5f53\u81ea\u7531\u5ea6\u6bd4\u8f83\u5927\u65f6\uff0c\\(t\\)\u5206\u5e03\u53ef\u4ee5\u7528\\(N(0,1)\\)\u5206\u5e03\u8fd1\u4f3c\uff1b

\u63a8\u8bba\uff1a

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

\\(F\\)\u5206\u5e03\u8bbe\\(U\\sim\\chi^2(n_1)\\)\uff0c\\(V\\sim \\chi^2(n_2)\\)\uff0c\u4e14\\(U\\)\u548c\\(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\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a \\(F\\)\u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

  1. \u5982\u679c\\(F\\sim F(n_1,n_2)\\)\uff0c\u5219\\(\\frac{1}{F}\\sim F(n_2,n_1)\\)\uff1b
  2. \u5982\u679c\\(X\\sim t(n)\\)\uff0c\u5219\\(X^2\\sim F(1,n)\\)\uff1b

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

  1. \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff1b
  2. \\(\\overline{X}\\)\u4e0e\\(S^2\\)\u76f8\u4e92\u72ec\u7acb\uff1b
  3. \\(\\frac{\\overline X - \\mu}{S/\\sqrt n}\\sim t(n-1)\\)\uff1b

\u8bbe\\(X_1,X_2,...,X_n\\)\u548c\\(Y_1,Y_2,...,Y_n\\)\u4e3a\u6765\u81ea\u6b63\u6001\u603b\u4f53\\(N(\\mu_1,\\sigma_1^2)\\)\u548c\\(N(\\mu_2,\\sigma_2^2)\\)\u7684\u4e24\u4e2a\u76f8\u4e92\u72ec\u7acb\u7684\u7b80\u5355\u968f\u673a\u6837\u672c\uff0c\\(\\overline{X},\\overline Y\\)\u662f\u6837\u672c\u5747\u503c\uff0c\\(S_1^2,S_2^2\\)\u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a

  1. \\(\\frac{S_1^2/\\sigma_1^2}{S_2^2/\\sigma^2_2}\\sim F(n_1-1,n_2-2)\\)\uff1b
  2. \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)\\) \u5176\u4e2d\\(S^2_\\omega=\\frac{(n_1-1)S_1^2+(n_2-n_1)S^2_2}{n_1+n_2-2}\\)

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/","title":"[7.x] \u53c2\u6570\u4f30\u8ba1","text":"

\u7ea6 1368 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \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\\)\u662f\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\u6784\u9020\u4e00\u4e2a\u9002\u5f53\u7684\u7edf\u8ba1\u91cf\\(\\hat{\\theta}(X_1,X_2,...,X_n)\\)\uff0c\u7528\u6765\u4f30\u8ba1\u672a\u77e5\u53c2\u6570\\(\\theta\\)\uff0c\u6211\u4eec\u79f0\\(\\hat{\\theta}(X_1,X_2,...,X_n)\\)\u4e3a\\(\\theta\\)\u7684\u4f30\u8ba1\u91cf\u3002\u5982\u679c\u628a\u5176\u4e2d\u7684\u6837\u672c\u503c\u7528\\(x_1,x_2,...,x_n\\)\u4ee3\u66ff\uff0c\u5219\u79f0\\(\\hat\\theta(x_1,x_2,...,x_n)\\)\u4e3a\\(\\theta\\)\u7684\u4e00\u4e2a\u4f30\u8ba1\u503c\u3002\u5728\u4e0d\u5bfc\u81f4\u6df7\u6dc6\u7684\u60c5\u51b5\u4e0b\uff0c\u4e24\u8005\u90fd\u53ef\u4ee5\u88ab\u79f0\u4e3a\u201c\u4f30\u8ba1\u201d\uff0c\u5e76\u90fd\u53ef\u4ee5\u7b80\u8bb0\u4e3a\\(\\hat\\theta\\)\u3002

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

\u505a\u9898\u6b65\u9aa4\uff1a

  1. \u5047\u8bbe\u6709\\(k\\)\u4e2a\u5f85\u6c42\u672a\u77e5\u53c2\u6570\uff1b
  2. \u5217\u5173\u4e8e\\(\\mu_1,\\mu_2,...,\\mu_k\\)\u7684\u65b9\u7a0b\u7ec4\uff1b
  3. \u4ece\u65b9\u7a0b\u7ec4\u4e2d\u89e3\u51fa\u8fd9\\(k\\)\u4e2a\u53c2\u6570\uff1b
  4. \u5982\u679c\u65b9\u7a0b\u4e2d\u5b58\u5728\u6052\u7b49\u5f0f\uff0c\u5219\u53ef\u4ee5\u987a\u5ef6\u6c42\\(\\mu_{k+1}\\)\uff1b
  5. \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":"

\u505a\u9898\u6b65\u9aa4\uff1a

  1. \u6784\u9020\u5bf9\u6570\u4f3c\u7136\u51fd\u6570(Likelihood Function)\\(L(\\theta)=\\ln p(x_1,...,x_n,\\theta)\\)\uff1b
  2. \u6c42\\(\\hat\\theta\\;\\;s.t.\\;\\;L(\\hat\\theta;x_1,x_2,...,x_n)=\\max_{\\theta\\in\\Theta}L(\\theta;x_1,x_2,...,x_n)\\)\uff1b
  3. \u89e3\u5bf9\u6570\u4f3c\u7136\u65b9\u7a0b(Log-likelihood Equation)\\(\\frac{\\mathrm{d}L(\\theta)}{\\mathrm{d}\\theta}=0\\)\uff0c\u68c0\u9a8c\u6781\u5927\u503c\u70b9\uff1b
  4. \u68c0\u9a8c\u7aef\u70b9\uff1b
  5. \u6c42\u6700\u5927\u503c\u70b9\uff1b

\u6027\u8d28\uff1a

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

\u8bbe\\(\\theta\\)\u662f\u603b\u4f53\\(X\\)\u7684\u5f85\u4f30\u53c2\u6570\uff0c\\(X_1,X_2,...,X_n\\) \u662f\u6765\u81ea\u603b\u4f53\\(X\\)\u7684\u6837\u672c\uff0c\u82e5\u4f30\u8ba1\u91cf\\(\\hat\\theta=\\hat\\theta(X_1,X_2,...,X_n)\\)\u7684\u6570\u5b66\u671f\u671b\u5b58\u5728\uff0c\u6ee1\u8db3\\(E(\\hat\\theta)=\\theta,\\;\\;\\forall\\theta\\in\\Theta\\)\uff0c\u5219\u79f0\\(\\hat\\theta\\)\u662f\\(\\theta\\)\u7684\u65e0\u504f\u4f30\u8ba1\u91cf\u6216\u65e0\u504f\u4f30\u8ba1(Unbiased Estimation)\u3002

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

\u8bbe\\(\\theta_1\\)\u548c\\(\\theta_2\\) \u662f\u53c2\u6570\\(\\theta\\)\u7684\u65e0\u504f\u4f30\u8ba1\uff0c\u82e5\\(\\forall \\theta\\in\\Theta\\)\uff0c\\(Var_\\theta(\\hat\\theta_1)\\leq Var_\\theta(\\hat\\theta_2)\\)\uff0c\u4e14\u4e0d\u6052\u53d6\u201c=\u201d\uff0c\u5219\u79f0\\(\\hat\\theta_1\\)\u6bd4\\(\\hat\\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] =Var(\\hat\\theta)+(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\u82e5\\(Mse(\\hat\\theta_1)\\leq Mse(\\hat\\theta_2)\\)\u4e14\u4e0d\u6052\u53d6\u201c=\u201d\uff0c\u5219\u79f0\\(\\hat\\theta_1\\)\u4f18\u4e8e\\(\\hat\\theta_2\\)\u3002

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

\u82e5\\(\\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)\u3002\u6709\u5982\u4e0b\u5b9a\u7406\uff1a

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

\u91c7\u7528\u4e0a\u4fa7\u5206\u4f4d\u6570\\(X\\sim N(\\mu,\\sigma^2)\\)

\\(\\sigma\\)\u5df2\u77e5\u65f6\\(\\mu\\)\u7684\u7f6e\u4fe1\u533a\u95f4\\(\\overline x \\sim N(\\mu,\\sigma^2/n)\\;\\;\\rightarrow\\;\\; \\frac{\\overline x-\\mu}{\\sigma/\\sqrt{n}}\\sim N(0,1)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=[\\;\\;\\overline x-\\frac{z_{\\alpha/2}\u00b7\\sigma}{\\sqrt{n}}\\;\\;,\\;\\;\\overline x + \\frac{z_{\\alpha/2}\u00b7\\sigma}{\\sqrt{n}}\\;\\;]\\) \\(\\sigma\\)\u672a\u77e5\u65f6\\(\\mu\\)\u7684\u7f6e\u4fe1\u533a\u95f4\\(\\frac{\\sqrt{n}(\\overline x - \\mu)}{\\sqrt{s^2} }\\sim t(n-1)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\left[\\;\\; \\overline x - \\frac{t_{\\alpha/2}(n-1)s}{\\sqrt{n}} \\;\\;,\\;\\; \\overline x + \\frac{t_{\\alpha/2}(n-1)s}{\\sqrt{n}} \\;\\;\\right]\\) \\(\\sigma^2\\)\u7684\u7f6e\u4fe1\u533a\u95f4\uff08\u5f53\u4f5c\\(\\mu\\)\u672a\u77e5\uff09\\(\\frac{(n-1)s^2}{\\sigma^2}\\sim \\chi^2(n-1)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\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]\\)

"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u7f6e\u4fe1\u533a\u95f4","title":"\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u7f6e\u4fe1\u533a\u95f4","text":"

\\(\\sigma_1^2,\\sigma_2^2\\)\u5df2\u77e5\u65f6\\(\\mu_1-\\mu_2\\)\u7684\u7f6e\u4fe1\u533a\u95f4\\(\\overline x - \\overline y \\sim N(\\mu_1-\\mu_2,\\frac{\\sigma_1^2}{n_1},\\frac{\\sigma_2^2}{n_2})\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\left[\\;\\;\\overline x - \\overline y+ z_{\\alpha/2}\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2}}\\;\\;,\\;\\;\\overline x - \\overline y- z_{\\alpha/2}\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2}}\\;\\;\\right]\\) \\(\\sigma_1^2,\\sigma_2^2\\)\u672a\u77e5\u4f46\u76f8\u540c(\\(\\sigma_1^2=\\sigma_2^2=\\sigma^2\\))\u65f6\\(\\mu_1-\\mu_2\\)\u7684\u7f6e\u4fe1\u533a\u95f4\u53d6\\(\\sigma^2\\)\u7684\u65e0\u504f\u4f30\u8ba1\u91cf\\(S^2_w=\\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2}\\) \\(\\frac{(\\overline x -\\overline y)-(\\mu_1-\\mu_2)}{S_w\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}}\\sim t (n_1+n_2-2)\\) \\([\\hat\\theta_L,\\hat\\theta_U]=\\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]\\) \\(\\sigma_1^2,\\sigma_2^2\\)\u672a\u77e5\u4e14\u4e0d\u540c(\\(\\sigma_1^2\\not=\\sigma_2^2\\))\u65f6\\(\\mu_1-\\mu_2\\)\u7684\u7f6e\u4fe1\u533a\u95f4

\\(\\frac{\\sigma^2_1}{\\sigma_2^2}\\)\u7684\u533a\u95f4\u4f30\u8ba1\\(\\frac{S_1^2/S_2^2}{\\sigma^2_1/\\sigma_2^2}\\sim F(n_1-1,n_2-1)\\)

\\[ [\\hat\\theta_L,\\hat\\theta_U]=\\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] \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap08/","title":"[8.x] \u5047\u8bbe\u68c0\u9a8c","text":"

\u7ea6 133 \u4e2a\u5b57

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

\u6216\u8005

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\u7ea6 12 \u4e2a\u5b57

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

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

\u8bfe\u7a0b\u4ecb\u7ecd

Course Website: \ud83d\udd17

Course Video: \ud83d\udd17

Course Description

Assignments

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

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

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

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

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

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

Distance Metric to compare images

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

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

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

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

K-Nearest Neighbors: \ud83d\udd17

Interactive Demo: \ud83d\udd17

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

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

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

Setting Hyperparameters (\u8c03\u53c2)

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

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

Parametric Approach

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

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

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

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

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

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

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

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

To solve it, we use regularization.

The regularization term.

Occam's Razor

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

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

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

In common use:

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

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

eg for Softmax Classifier.

Compare the two.

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

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

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

eg. for the linear classifier.

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

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

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

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

backprop (red lines)

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

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

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

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

\u53ef\u4ee5\u53d1\u73b0\uff0cmax() \u8fd0\u7b97\u5728\u68af\u5ea6\u4f20\u9012\u8fc7\u7a0b\u4e2d\u53ea\u8d77\u5230\u8def\u7531\u5668\u7684\u4f5c\u7528\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c06\u5176\u4f20\u9012\u5230\u8f83\u5927\u7684\u90a3\u4e2a\u53d8\u91cf\u90a3\u4e00\u4fa7\uff0c\u4f46\u4e0d\u6539\u53d8\u68af\u5ea6\u7684\u503c\uff1b\u800c\u5bf9\u4e8e\u8f83\u5c0f\u7684\u90a3\u4e2a\u53d8\u91cf\uff0c\u68af\u5ea6\u4f20\u9012\u88ab\u963b\u65ad\uff0c\u76ee\u6807\u53d8\u91cf\u7684\u68af\u5ea6\u4e3a \\(0\\)\u3002

\u5c06\u8fd9\u4e2a\u6d41\u7a0b\u8fc1\u79fb\u5230\u795e\u7ecf\u7f51\u7edc\u4e0a\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5c06\u8fd9\u4e9b\u6570\u5b57\u53d8\u4e3a Jacobian matrix \u5373\u53ef\u3002

\u5728\u5177\u4f53\u5b9e\u73b0\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u4f1a\u5b9e\u73b0\u4e00\u4e2a forward() \u7528\u4e8e\u8ba1\u7b97\u51fd\u6570\u7684\u8f93\u51fa\uff0c\u4ee5\u53ca\u4e00\u4e2a backward() \u7528\u4e8e\u6309\u7167\u4e0a\u9762\u63d0\u5230\u7684\u65b9\u6cd5\u8ba1\u7b97\u68af\u5ea6\u3002

Summary

"},{"location":"cour_note/D1SJ_StanfordCS231n/#neural-networks","title":"Neural Networks","text":"

\u901a\u8fc7\u51fd\u6570\u53e0\u52a0\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u795e\u7ecf\u7f51\u7edc\u3002

\u4e0e\u751f\u7269\u795e\u7ecf\u7684\u4e00\u4e2a\u7c7b\u6bd4

Summary

"},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-5-convolutional-neural-networks","title":"Lecture 5: Convolutional Neural Networks","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#convolutional-neural-networks","title":"Convolutional Neural Networks","text":"

\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 Fully Connected Layer \u4f1a\u5c06\u591a\u7ef4\u7684\u6570\u636e\u62c9\u4f38\u4e3a\u5411\u91cf\u7684\u5f62\u5f0f\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c Convolution Layer \u5219\u4f1a\u4fdd\u7559\u8f93\u5165\u6570\u636e\u7684\u5f62\u72b6 \u7279\u5f81\uff0c\u4e00\u822c\u6765\u8bf4\uff0cfilter \u4f1a\u4e0e\u6570\u636e\u5177\u6709\u76f8\u540c\u7684\u6df1\u5ea6\uff08\u4f8b\u5982 input \u662f 32x32x3\uff0c\u90a3\u4e48 filter \u53ef\u4ee5\u4e3a 5x5x3\uff09\u3002\u901a\u8fc7\u5c06 filter \u4e0e input \u7684\u67d0\u4e00\u4e2a\u540c\u5f62\u72b6\u7684\u5b50\u533a\u57df\u505a\u70b9\u79ef\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u6570\u5b57\u3002

\u5728\u67d0\u4e2a\u4f4d\u7f6e\u83b7\u5f97\u70b9\u79ef\uff0c\u5373 filter \u5982\u4f55\u4f5c\u7528\u4e8e input

\u91c7\u7528\u591a\u4e2a filters \u5e76\u5c06\u7ed3\u679c\u53e0\u52a0\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u591a\u4e2a\u6fc0\u6d3b\u56fe(activation maps)\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5904\u7406\u540e\u7684\u6570\u636e\u3002 - ConvNet is a sequence of Convolution Layers, interspersed with activation functions.

\u5173\u4e8e\u8f93\u51fa\u7684\u6fc0\u6d3b\u56fe\u7684\u5927\u5c0f\uff0c\u6709\u5982\u4e0a\u516c\u5f0f\u3002

\u901a\u8fc7\u9009\u62e9\u6b65\u957f\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236\u6ed1\u52a8\u7684\u901f\u7387\u3002\u4ece\u67d0\u79cd\u610f\u4e49\u4e0a\u6765\u8bb2\u8fd9\u4e5f\u662f\u5728\u63a7\u5236\u6ed1\u52a8\u7ed3\u679c\u7684\u5206\u8fa8\u7387\uff0c\u4e5f\u662f\u6c60\u5316\u64cd\u4f5c\u80cc\u540e\u7684\u601d\u60f3\u4e4b\u4e00\u3002\u800c\u5177\u4f53\u9009\u62e9\u5927\u6b65\u957f\u8fd8\u662f\u5c0f\u6b65\u957f\u662f\u4f60\u9700\u8981\u5bf9\u5404\u79cd\u56e0\u7d20\u8fdb\u884c\u8003\u91cf\u51b3\u5b9a\u7684\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u6b65\u957f\u4e3a 3 \u65f6\u65e0\u6cd5\u5339\u914d\u3002\u800c\u5728\u5b9e\u8df5\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u624b\u6bb5\u6765\u89e3\u51b3\u8fd9\u79cd\u65e0\u6cd5\u5339\u914d\u7684\u60c5\u51b5\uff0c\u5982\"zero pad to borders\"\u4ee5\u4f7f\u5927\u5c0f\u7b26\u5408\u6b65\u957f\u3002

\u6ce8\u610f\uff0c\u91c7\u7528\u96f6\u6269\u5c55\u4ee5\u540e\u4e0a\u4e00\u5f20\u56fe\u7684\u516c\u5f0f\u5c31\u65e0\u6cd5\u4f7f\u7528\u4e86\u3002\u8fd9\u4e5f\u6b63\u662f\u96f6\u6269\u5c55\u7684\u4e00\u4e2a\u7279\u70b9\uff0c\u5b83\u53ef\u4ee5\u8ba9\u56fe\u50cf\u7684\u5f62\u72b6\u4e0d\u5fc5\u7f29\u5c0f\u3002

\u4e00\u9053\u6d4b\u8bd5\u9898\uff1a

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97\u8fd9\u6837\u4e00\u5c42\u4e2d\u6709\u591a\u5c11\u53c2\u6570\u3002

Ans

"},{"location":"cour_note/D1SJ_StanfordCS231n/#pooling-layer","title":"Pooling layer","text":"

just downsample

A common way to do this is max pooling:

just take the max value

\u5bf9\u4e8e\u6c60\u5316\u5c42\uff0c\u5728\u8fdb\u884c\u6ed1\u52a8\u7a97\u53e3\u65f6\u6211\u4eec\u66f4\u5e0c\u671b\u6b65\u957f\u7684\u8bbe\u7f6e\u80fd\u4f7f filter \u6ca1\u6709\u91cd\u53e0\uff0c\u4ee5\u6ee1\u8db3\u5c0f\u8282\u5f00\u5934\u63d0\u5230\u7684\"independently\"\u3002

"},{"location":"cour_note/D1SJ_StanfordCS231n/#fully-connected-layer-fc-layer","title":"Fully Connected Layer (FC layer)","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/","title":"\ud83d\udc8e \u9ad8\u7ea7\u6570\u636e\u7ed3\u6784 | Advanced Data Structure","text":"

\u7ea6 148 \u4e2a\u5b57

\u8bfe\u7a0b\u4fe1\u606f

\u7ffb\u8f6c\u8bfe\u5802*

\u5206\u6570\u6784\u6210\uff1a

\u7b14\u8bb0\u76f8\u5173

\u53c2\u8003\u7b14\u8bb0\uff1a

List

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/","title":"Topic 1 | Amortized Analysis","text":"

\u7ea6 1041 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \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 29 \u5206\u949f

\u8bf4\u660e

\u539f\u5148\u5b89\u6392\u5728\u8fd9\u4e00\u7ae0\u8282\u7684\u644a\u8fd8\u5206\u6790\u73b0\u5728\u88ab\u8fc1\u79fb\u5230\u4e86\u8fd9\u4e2a\u5730\u65b9\uff1aTopic 1 | Amortized Analysis\u3002

\u9605\u8bfb\u6280\u5de7

\u56e0\u4e3a\u6ca1\u6cd5\u5728\u8fd9\u91cc\u7528\u4ee3\u7801\u5199\u52a8\u753b\uff0c\u6240\u4ee5\u6211\u7528 Tab \u6a21\u62df\u4e86\u4e00\u4e0b\u52a8\u753b\u5e27\uff0c\u53ef\u4ee5\u624b\u52a8\u5207\u6362\u8fd9\u4e9b\u6807\u7b7e\u6765\u52a8\u6001\u89c2\u5bdf\u3002\u4e00\u822c\u8fd9\u79cd\u5185\u5bb9\u7684 Tab \u6807\u9898\u90fd\u4f1a\u662f Frame {}\u3002

Frame 1Frame 2Frame 3

Like

Like this

Like this!

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#avl-\u6811","title":"AVL \u6811","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

link

OI Wiki: https://oi-wiki.org/ds/avl/

\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u68f5\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5176\u5bf9\u70b9\u7684\u64cd\u4f5c\u4ee3\u4ef7\u4e3a \\(O(\\log n)\\)\u3002\u7136\u800c\u5728\u6700\u574f\u60c5\u51b5\u4e0b\uff0c\u5b83\u4f1a\u9000\u5316\u6210 \\(O(n)\\)\uff0c\u4f8b\u5982\u8fd9\u662f\u4e00\u68f5\u53ea\u6709\u5de6\u5b69\u5b50\u6811\u7684\u94fe\u578b\u4e8c\u53c9\u6811\uff0c\u90a3\u4e48\u64cd\u4f5c\u8fd9\u91cc\u552f\u4e00\u7684\u53f6\u5b69\u5b50\u8282\u70b9\u5c31\u662f \\(O(n)\\)\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e00\u68f5\u4e8c\u53c9\u6811\u7684\u7ef4\u62a4\u6210\u672c\u57fa\u672c\u4e0a\u4e0e\u5176\u9ad8\u5ea6\u6b63\u76f8\u5173\u3002\u56e0\u800c\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u60f3\u6cd5\u662f\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8ba9\u4e00\u68f5\u4e8c\u53c9\u6811\u597d\u7ef4\u62a4\uff0c\u90a3\u4e48\u5c31\u5e0c\u671b\u5b83\u7684\u9ad8\u5ea6\u5c3d\u53ef\u80fd\u4f4e\uff0c\u800c\u5728\u70b9\u6570\u56fa\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u8ba9\u8282\u70b9\u5c3d\u53ef\u80fd\u201c\u5747\u5300\u201d\u5730\u5206\u5e03\u5728\u6811\u4e0a\u3002

height of a tree

\u6811\u7684\u9ad8\u5ea6(Height of Tree)\u7b49\u4e8e\u5176\u6839\u8282\u70b9\u5230\u53f6\u5b69\u5b50\u8282\u70b9\u7684\u82e5\u5e72\u8def\u5f84\u4e2d\uff0c\u6700\u5927\u7684\u8ddd\u79bb\uff08\u5373\u8fb9\u7684\u6570\u91cf\uff09\uff0c\u4e5f\u5c31\u662f\u6df1\u5ea6\u6700\u6df1\u7684\u8282\u70b9\u5230\u6839\u8282\u70b9\u5230\u8ddd\u79bb\u3002

\u7279\u522b\u7684\uff0c\u4e00\u68f5\u7a7a\u6811\u7684\u9ad8\u5ea6\u4e3a -1\u3002

\u8bf4\u7684\u901a\u4fd7\u4e00\u4e9b\uff0c\u5c31\u662f\u6811\u7684\u5c42\u6570\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#avl-\u6811_1","title":"AVL \u6811","text":"

\u800c AVL Tree \u662f\u4e00\u79cd\u5e73\u8861(balanced)\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u901a\u8fc7\u300c\u9ad8\u5ea6\u300d\u8fd9\u4e2a\u91cf\uff0c\u5b9a\u4e49\u4e86\u300c\u5e73\u8861\u300d\u8fd9\u4ef6\u4e8b\u3002

AVL Tree

  1. \u4e00\u4e2a\u7a7a\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a AVL \u6811\uff1b
  2. \u5982\u679c\u4e8c\u53c9\u6811 \\(T\\) \u662f\u4e00\u4e2a AVL \u6811\uff0c\u5219\u5176\u5de6\u53f3\u5b69\u5b50\u6811 \\(T_l\\) \u548c \\(T_r\\) \u4e5f\u90fd\u5e94\u8be5\u662f AVL \u6811\uff0c\u4e14\u6709 \\(|h(T_l) - h(T_r)| \\leq 1\\)\uff1b

Balance Factor

\u4e00\u4e2a\u8282\u70b9\u7684\u5e73\u8861\u56e0\u5b50(Balance Factor, BF)\u7528\u6765\u63cf\u8ff0\u4e00\u4e2a\u8282\u70b9\u7684\u5e73\u8861\u72b6\u6001\uff0c\u5bf9\u4e8e\u8282\u70b9 \\(T_p\\)\uff0c\u5b83\u7684\u5de6\u5b69\u5b50\u6811\u4e3a \\(T_l\\)\uff0c\u53f3\u5b69\u5b50\u6811\u4e3a \\(T_r\\)\uff0c\u5219\uff1a

\\[ BF(T_p) = h(T_l) - h(T_r) \\]

\u6240\u4ee5\u4e0a\u9762\u7684\u7b2c 2 \u6761\u53c8\u53ef\u4ee5\u5199\u6210\uff1a

\u8bf4\u7684\u901a\u4fd7\u4e00\u4e9b\u5c31\u662f\uff0cAVL \u6811\u7684\u6bcf\u4e00\u4e2a\u70b9\u90fd\u5e73\u8861\uff0c\u800c\u5e73\u8861\u4e0e\u5426\u53d6\u51b3\u4e8e\u8282\u70b9\u7684\u4e24\u4e2a\u5b69\u5b50\u6811\u5c42\u6570\u4e4b\u5dee\u662f\u5426\u8d85\u8fc7 1\u3002

\u5728\u8fd9\u79cd\u5b9a\u4e49\u4e0b\uff0cAVL \u6811\u7684\u9ad8\u5ea6\u53ef\u4ee5\u8bc1\u660e\u4e3a \\(O(\\log N)\\)\uff0c\u8bc1\u660e\u5982\u4e0b\uff1a

Height of AVL Trees

graph TD;\nA((\"Root\"))\nB[/\"Left Subtree\"\\]\nC[/\"Right Subtree\"\\]\nA === B\nA === C

\u6211\u4eec\u8bb0 \\(n_h\\) \u662f\u9ad8\u5ea6\u4e3a \\(h\\) \u7684 AVL \u6811\u6240\u5305\u542b\u7684\u6700\u5c11\u8282\u70b9\u6570\uff0c\u5219\u6709\u5982\u4e0b\u9012\u63a8\u5173\u7cfb\uff1a

\\[ n_h = \\left\\{ \\begin{array}{l} 1 & (h = 0) \\\\ 2 & (h = 1) \\\\ n_{h-1} + n_{h-2} + 1 & (h > 1) \\end{array} \\right. \\]

\u53d1\u73b0 \\(n_h + 1\\) \u7b26\u5408 Fibonacci \u6570\u5217\u7684\u9012\u63a8\u516c\u5f0f\uff08\u4f46\u662f\u521d\u59cb\u6761\u4ef6\u4e0d\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u7528 Fibonacci \u5bf9\u5176\u8fdb\u884c\u4e00\u4e2a\u4f30\u8ba1\u3002

\u800c\u5bf9\u4e8e\u5982\u4e0b Fibonacci \u6570\u5217\uff1a

\\[ F_i = \\left\\{ \\begin{array}{l} 1 & (i = 1) \\\\ 1 & (i = 2) \\\\ F_{i-1} + F_{i-2} & (i > 2) \\end{array} \\right. \\]

\u5176\u901a\u9879\u4e3a\uff1a

\\[ \\begin{aligned} F_n &= \\frac{1}{\\sqrt{5}} \\left( \\left( \\frac{1 + \\sqrt{5}}{2} \\right)^n - \\left( \\frac{1 - \\sqrt{5}}{2} \\right)^n \\right) \\\\ &\\approx \\frac{1}{\\sqrt{5}} \\left( \\frac{1 + \\sqrt{5}}{2} \\right)^n \\\\ \\log{(F_n)} &\\approx n \\end{aligned} \\]

\u800c \\(n_h + 1 \\approx F_{h+2}\\)\uff0c\u6240\u4ee5 \\(h \\approx \\log{(n_h)}\\)\uff0c\u4e5f\u5c31\u662f\u8bf4 \\(h \\approx \\log{N}\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u89c6\u89d2","title":"\u89c6\u89d2","text":"

\u800c\u6211\u4eec\u8c08\u8bba AVL \u6811\u65f6\uff0c\u6211\u4eec\u5e0c\u671b\u4ee5\u4e00\u4e2a\u52a8\u6001\u7684\u89c6\u89d2\u6765\u8c08\u8bba AVL \u6811\uff0c\u5373\u8ba8\u8bba\uff1a\u67d0\u4e00\u68f5\u6811\u662f\u5426\u662f AVL \u6811\uff1b\u5728\u67d0\u4e2a\u64cd\u4f5c\u540e\uff0c\u5b83\u662f\u5426\u4ecd\u7136\u662f AVL \u6811\uff1b\u82e5\u539f\u5148\u662f\uff0c\u800c\u7ecf\u8fc7\u64cd\u4f5c\u540e\u4e0d\u518d\u662f\uff0c\u90a3\u8981\u5982\u4f55\u5c06\u5b83\u91cd\u65b0\u53d8\u4e3a AVL \u6811\u3002

\u4ee5\u4e0a\u4e09\u4e2a\u6b65\u9aa4\u662f\u7b80\u5316\u540e\u7684\u5efa\u6a21\uff0c\u5b83\u6210\u4e3a\u6211\u4eec\u89e3\u51b3\u5176\u4ed6\u95ee\u9898\u7684\u6700\u5c0f\u5355\u5143\u548c\u57fa\u7840\u3002

\u6240\u4ee5\u5728\u8fd9\u79cd\u6a21\u578b\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e24\u4e2a\u4e1c\u897f\uff1a

Trouble Maker & Trouble Finder

\u4ee5 \ud83c\udf30 \u6765\u8bf4\u660e\u3002

Frame 1Frame 2

\u4e0b\u56fe\u4e3a\u4e00\u4e2a AVL \u6811\uff1a

graph TD;\nA((\"8, BF=1\"))\nB((\"4, BF=0\"))\nC((\"9, BF=0\"))\nD((\"2, BF=0\"))\nE((\"6, BF=0\"))\nA === B\nA === C\nB === D\nB === E

\u73b0\u5728\u6211\u4eec\u63d2\u5165 5\uff1a

graph TD;\nA((\"8, BF=2\"))\nB((\"4, BF=-1\"))\nC((\"9, BF=0\"))\nD((\"2, BF=0\"))\nE((\"6, BF=1\"))\nF((\"5, BF=0\"))\nA === B\nA === C\nB === D\nB === E\nE === F\nE === NULL

\u6211\u4eec\u53d1\u73b0\uff0c\u6b64\u65f6 8 \u7684\u300c\u5e73\u8861\u56e0\u5b50\u300d\u53d8\u6210\u4e862\uff0c\u4e0d\u518d\u7b26\u5408 AVL \u6811\u7684\u8981\u6c42\uff0c\u800c\u8fd9\u4e00\u5207\u90fd\u662f 5 \u7684\u63d2\u5165\u5bfc\u81f4\u7684\u2014\u2014\u4e8e\u662f\u6211\u4eec\u79f0\u50cf\u8fd9\u91cc\u7684 8 \u4e00\u6837\uff0c\u7531\u4e8e\u67d0\u4e2a\u70b9\u7684\u63d2\u5165\uff0c\u5176\u300c\u5e73\u8861\u56e0\u5b50\u300d\u4e0d\u518d\u7b26\u5408\u8981\u6c42\u7684\u70b9\uff0c\u4e3a Trouble Finder\uff1b\u800c\u50cf\u8fd9\u91cc\u7684 5 \u4e00\u6837\uff0c\u5bfc\u81f4 Trouble Finder \u51fa\u73b0\u7684\u70b9\uff0c\u88ab\u79f0\u4e4b\u4e3a Trouble Maker\u3002

\u5f62\u8c61\u5730\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u5c31\u662f\uff0c\u5728\u52a8\u6001\u63d2\u5165 5 \u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fa\u73b0\u4e86\u4e00\u4e2a \"Trouble\"\uff0c\u5bfc\u81f4\u8fd9\u4e2a\u6811\u4e0d\u518d\u662f AVL \u6811\uff0c\u800c 5 \u662f\u8fd9\u4e2a \"Trouble\" \u7684 \"Maker\"\uff0c8 \u662f \"Finder\"\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

\u672c\u5c0f\u8282\u6240\u9700\u8981\u8bb2\u7684\u5185\u5bb9\u5c31\u662f#\u89c6\u89d2\u4e2d\u63d0\u5230\u7684\u201c\u91cd\u65b0\u53d8\u4e3a AVL \u6811\u201d\u8fd9\u4e00\u89c6\u89d2\uff0c\u4e5f\u5c31\u662f AVL \u6811\u7684\u7ef4\u62a4\u3002

\u9996\u5148\uff0c \u6211\u4eec\u9700\u8981\u5bf9 AVL \u6811\u7684\u7834\u574f\u60c5\u51b5\u8fdb\u884c\u5206\u7c7b\uff0c\u6839\u636e \"Trouble Finder\"\u3001\"Related Trouble Finder's Child\"\u3001\"Trouble Maker\"\u8fd9\u4e09\u4e2a\u70b9\u7684\u76f8\u5bf9\u5173\u7cfb\uff0c\u5206\u4e3a LL\u3001RR\u3001LR\u3001RL \u56db\u79cd\uff1a

\u540c\u5fc3\u5706\u8868\u793a\u8fd9\u4e2a\u70b9\u662f\u9700\u8981\u6211\u4eec\u5728\u540e\u7eed\u64cd\u4f5c\u4e2d\u5173\u6ce8\u7684\u3002

\u6b64\u5916\uff0c\u867d\u7136\u5b9e\u9645\u60c5\u51b5\u4e0b\u53ef\u80fd\u51fa\u73b0\u591a\u4e2a Trouble Finder\uff0c\u4f46\u662f\u6211\u4eec\u53ea\u5173\u6ce8\u4ee5\u300c\u8ddd\u79bb\u6848\u53d1\u73b0\u573a\u6700\u8fd1\u7684 Trouble Finder\u300d\u4e3a\u6839\u7684\u5b69\u5b50\u6811\uff08\u8fd9\u53e5\u8bdd\u975e\u5e38\u91cd\u8981\uff09\u3002

LLRRLRRL
flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B(((\"Left\\nChild\")))\n    C((\"Right\\nChild\"))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA === H\n    B === E === EA\n    C === F === FA\n    C === G === GA
flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B((\"Left\\nChild\"))\n    C(((\"Right\\nChild\")))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA\n    C === F === FA\n    C === G === GA === H
flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B(((\"Left\\nChild\")))\n    C((\"Right\\nChild\"))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E(((\"L Right\\nChild\")))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA === H\n    C === F === FA\n    C === G === GA
flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B((\"Left\\nChild\"))\n    C(((\"Right\\nChild\")))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F(((\"R Left\\nChild\")))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA\n    C === F === FA === H\n    C === G === GA

\u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f8b\u5982 LR\uff0c\u8868\u793a\u7684\u662f Trouble Maker \u5728 Trouble Finder \u7684 L \u5b69\u5b50\u8282\u70b9\u7684 R \u5b69\u5b50\u6811\u4e2d\u3002

\u53e6\u5916\uff0c\u5bf9\u4e8e\u6211\u53ea\u5728 LR \u548c RL \u4e2d\u7740\u91cd\u4e8c\u7ea7\u5b69\u5b50\u8282\u70b9\uff0c\u5e76\u4e0d\u662f\u7b14\u8bef\u3002\u4e4b\u540e\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#ll--rr","title":"LL & RR","text":"

\u5e9f\u8bdd

\u5927\u90e8\u5206\u6559\u6750\u90fd\u503e\u5411\u4e8e\u7ee7\u7eed\u7528\u201c\u65cb\u8f6c\u201d\u6765\u6982\u62ec\u8fd9\u4e9b\u65b9\u6cd5\uff0c\u786e\u5b9e\u5176\u5b9e\u4ece\u62bd\u8c61\u89d2\u5ea6\u6765\u8bb2\u81f3\u5c11 LL \u548c RR \u90e8\u5206\u4e5f\u8fd8\u662f\u50cf\u7684\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u8fd9\u5e76\u4e0d\u5229\u4e8e\u8bb0\u5fc6\u548c\u7406\u89e3\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u5c24\u5176\u662f\u5bf9\u4e8e LR \u548c RL \u7684\u90e8\u5206\u3002

\u6240\u4ee5\u5728 LL \u548c RR \u90e8\u5206\uff0c\u6211\u8fd8\u662f\u4f1a\u5148\u4ecb\u7ecd\u4e00\u4e0b\u6bd4\u8f83\u4f20\u7edf\u7684\uff0c\u7528\u201c\u65cb\u8f6c\u201d\u7684\u65b9\u5f0f\u6765\u7406\u89e3\uff0c\u4e4b\u540e\u6211\u5c06\u5c1d\u8bd5\u7740\u7528\u6211\u81ea\u5df1\u7684\u601d\u8def\u6765\u8bb2\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u65cb\u8f6c\u89c6\u89d2","title":"\u201c\u65cb\u8f6c\u201d\u89c6\u89d2","text":"

LL \u548c RR \u8fd9\u4e24\u79cd\u60c5\u51b5\u76f8\u5bf9\u76f4\u89c2\u3002\u7531\u4e8e\u5b83\u4eec\u7684\u64cd\u4f5c\u662f\u5bf9\u79f0\u7684\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u4ee5 LL \u4e3a\u4f8b\u3002

    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        subgraph SA[\"New Left Subtree\"]\n\n            subgraph SB[\"New L Left Subtree\"]\n                D[/\"L Left Subtree\"\\]\n                H((\"Trouble\\nMaker\"))\n            end\n\n            B(((\"Left\\nChild\")))\n            E[/\"L Right Subtree\"\\]\n        end\n\n        A === B\n        A === C\n        B === D === H\n        B === E

\u6839\u636e\u76f8\u5173\u6027\u8d28\uff0c\u6211\u4eec\u5f97\u5230\u8fd9\u4e2a\u6a21\u578b\u6709\u5982\u4e0b\u6027\u8d28\uff1a

\u4e00\u4e9b\u6027\u8d28

  1. \\(BF(\\text{Trouble Finder}) = h(\\text{New Left Subtree}) - h(\\text{Right Subtree}) = 2\\)\uff1b
  2. \\(h(\\text{New L Left Subtree}) - h(\\text{L Right Subtree}) = 1\\)\uff1b
    • \u5982\u679c\u6b64\u5dee\u4e3a 0\uff0c\u5219\u4e0d\u5e94\u5f53\u6210\u4e3a Trouble Maker\uff0c\u82e5\u6b64\u5dee\u4e3a 2\uff0c\u5219 Left Child \u5e94\u5f53\u4e3a Trouble Finder\uff1b

\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728\u4fdd\u7559\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u4e0b\uff0c\u8981\u8ba9 \\(|BF(\\text{Trouble Finder})|\\) \u53d8\u5c0f\uff0c\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9 \\(h(\\text{New Left Subtree})\\) \u53bb -1\uff0c\u8ba9 \\(h(\\text{Right Subtree})\\) \u53bb +1\u3002

\u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u6837\u7684\u64cd\u4f5c\u521a\u597d\uff1a

LL Single Rotation

\u5728 Frame 2 \u548c Frame 3 \u4e4b\u95f4\u6dfb\u52a0\u7684\u7ec6\u7ebf\u662f\u4e3a\u4e86\u8868\u793a\u8fd9\u91cc L Right Subtree \u7684\u8f6c\u79fb\u65b9\u6cd5\uff0c\u8ba9 2 ~ 3 \u5e27\u7684\u201c\u65cb\u8f6c\u201d\u8fc7\u7a0b\u4e2d\u66f4\u52a0\u6e05\u6670\u3002

\u6b64\u5916\uff0c\u8fd9\u91cc\u8981\u7d20\u7684\u547d\u540d\u90fd\u662f\u57fa\u4e8e Frame 1 \u7684\uff0c\u5bf9\u4e8e Frame 4 \u6765\u8bf4 L Right Subtree \u663e\u7136\u5df2\u7ecf\u4e0d\u662f L Right Subtree \u4e86\u3002

Frame 1Frame 2Frame 3Frame 4
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === H\n        B === E
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        A === B\n        A --- E\n        A === C\n        B === D === H\n        B === E
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B --- E\n        B === A\n        A === E\n        A === C\n
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B === A\n        A === E\n        A === C\n

\u4f60\u751a\u81f3\u80fd\u4ece\u6574\u4e2a\u6846\u5728 2 ~ 3 \u5e27\u7684\u53d8\u77ed\u611f\u53d7\u5230\u8fd9\u4e2a\u6811\u7684\u9ad8\u5ea6\u51cf\u5c11\u4e86x\uff08\u9003\uff09

\u90a3\u4e48\u8fd8\u6709\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5982\u4f55\u8bc1\u660e\u8fd9\u6837\u53d8\u6362\u80fd\u591f\u4fdd\u6301 AVL \u7684\u6027\u8d28\u5462\uff1f

\u6211\u4e2a\u4eba\u8ba4\u4e3a\u4e3b\u8981\u6709\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u4e00\u662f\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u4e8c\u662f\u4fdd\u6301\u5e73\u8861\u7684\u6027\u8d28\uff0c\u6211\u7684\u8bc1\u660e\u5185\u5bb9\u6298\u53e0\u8d77\u6765\u4e86\uff0c\u5efa\u8bae\u8bfb\u8005\u53ef\u4ee5\u5148\u81ea\u5df1\u601d\u8003\u4e00\u4e0b\u518d\u5c55\u5f00\u770b\u770b\u6211\u7684\u60f3\u6cd5\u3002

\u4e8c\u53c9\u641c\u7d22\u6811\u6027\u8d28\u7684\u4fdd\u6301

\u4e0d\u77e5\u9053\u8bfb\u8005\u662f\u5426\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u6392\u5217\u5f97\u5f53\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5982\u679c\u6211\u4ece\u5de6\u5230\u53f3\uff0c\u4f7f\u7528\u4e00\u6761\u7ad6\u76f4\u7684\u626b\u63cf\u7ebf\u626b\u63cf\u6574\u4e2a\u6811\uff0c\u5c06\u4f1a\u5f97\u5230\u4e00\u4e2a\u5355\u8c03\u5e8f\u5217\uff0c\u8fd9\u4e5f\u6b63\u5bf9\u5e94\u7740\u8fd9\u4e2a\u4e8c\u53c9\u641c\u7d22\u6811\u6240\u7ef4\u62a4\u7684\u6709\u5e8f\u6570\u5217\u3002

\u57fa\u4e8e\u8fd9\u79cd\u8bba\u8c03\uff0c\u518d\u56de\u5934\u770b\u4e0a\u9762\u90a3\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u751a\u81f3\u662f\u89c2\u5bdf\u6211\u5728 2 ~ 3 \u5e27\u753b\u51fa\u6765\u7684\u8fd9\u4e2a\u4e09\u89d2\u5f62\u7684\u65cb\u8f6c\uff0c\u5c31\u4f1a\u53d1\u73b0\u8fd9\u79cd\u65cb\u8f6c\u5b9e\u9645\u4e0a\u53ea\u662f\u5728\u5c06\u8282\u70b9\u4e0a\u4e0b\u79fb\u52a8\uff0c\u6240\u4ee5\u4e0d\u6539\u53d8\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u3002

\u5e73\u8861\u7684\u4fdd\u6301

\u8ba9\u6211\u4eec\u5148\u56de\u987e\u4e00\u4e0b\u5728\u4e0a\u9762\u7ed9\u51fa\u7684\u4e00\u4e9b\u6027\u8d28\u4e2d\u7684\u7b2c 2 \u6761\uff1a \\(h(\\text{New L Left Subtree}) - h(\\text{L Right Subtree}) = 1\\)\u3002

\u5728\u4ed4\u7ec6\u601d\u8003\u6574\u4e2a\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\u6bcf\u4e00\u4e2a Subtree \u7684\u9ad8\u5ea6\u7684\u53d8\u5316\uff0c\u5373\u53ef\u5f97\u5230\u8bc1\u660e\u3002

\u800c RR Single Rotation \u5b8c\u5168\u5bf9\u79f0\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u6362\u6839\u89c6\u89d2","title":"\u201c\u6362\u6839\u201d\u89c6\u89d2","text":"

\u73b0\u5728\u6211\u60f3\u5c1d\u8bd5\u7740\u7528\u6211\u81ea\u5df1\u7684\u65b9\u5f0f\u6765\u7406\u89e3\u8fd9\u4e2a\u95ee\u9898\u3002

\u9996\u5148\u8ba9\u6211\u4eec\u4eba\u529b\u52a8\u753b\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff08\u5212\u6389\uff09\uff1a

LL Single Rotation

\u6b64\u5916\uff0c\u8fd9\u91cc\u8981\u7d20\u7684\u547d\u540d\u90fd\u662f\u57fa\u4e8e Frame 1 \u7684\uff0c\u5bf9\u4e8e Frame 4 \u6765\u8bf4 L Right Subtree \u663e\u7136\u5df2\u7ecf\u4e0d\u662f L Right Subtree \u4e86\u3002

Frame 1Frame 2Frame 3Frame 4Frame 5
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === H\n        B === E
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A --- B\n        A === C\n        B === D === H\n        B === E
    flowchart TD\n        B(((\"Left\\nChild\")))\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === H\n        B === E
    flowchart TD\n        B(((\"Left\\nChild\")))\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === H\n        A === E
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B === A\n        A === E\n        A === C\n

\u9996\u5148\uff0c\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\u662f\u4ec0\u4e48\uff1f\u662f Trouble Maker \u8fdb\u6765\u4ee5\u540e\uff0cTrouble Finder \u53d1\u73b0 \\(h(T_l) - h(T_r) = 2\\)\u4e86\uff0c\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\u5c31\u662f\u5de6\u5b69\u5b50\u6811\u592a\u9ad8\u4e86\uff0c\u7136\u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5de6\u5b69\u5b50\u6811\u4f9d\u7136\u8fd8\u7ad9\u5728\u4e00\u4e2a\u53f0\u5b50\uff08Trouble Finder\uff09\u4e0a\u548c Trouble Finder \u6bd4\u8eab\u9ad8\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u5b83\u4ece\u53f0\u5b50\u4e0a\u8bf7\u4e0b\u6765\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u65e2\u7136\u5de6\u5b69\u5b50\u6811\u592a\u9ad8\u4e86\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4e0d\u5e0c\u671b\u8ba9\u5b83\u518d\u6210\u4e3a\u8c01\u7684\u5b69\u5b50\u6811\uff0c\u56e0\u4e3a\u6210\u4e3a\u8c01\u7684\u5b69\u5b50\u6811\u5fc5\u7136\u610f\u5473\u7740\u8fd9\u6761\u8def\u5f84\u4f1a\u66f4\u957f\u3002

\u90a3\u4e48\u73b0\u5728\u6211\u4eec\u628a\u5b83\u4ece\u53f0\u5b50\u4e0a\u8bf7\u4e0b\u6765\uff0c\u4e5f\u5c31\u662f\u8bf4\u5272\u88c2\u5b83\u548c Trouble Finder \u7684\u4eb2\u5b50\u5173\u7cfb\uff08\u5bf9\u5e94 Frame 2\uff09\u8ba9\u5b83\u4eec\u540c\u53f0\u201c\u5bf9\u6297\u201d\uff08\u8fd9\u4e00\u6b65\u5728 LL \u548c RR \u53ef\u80fd\u663e\u5f97\u6bd4\u8f83\u591a\u4f59\uff0c\u4f46\u662f\u5728 LR \u548c RL \u5c31\u4f1a\u8ba9\u95ee\u9898\u6e05\u6670\u5f88\u591a\uff09\u3002

\u7136\u800c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u8ba9\u8fd9\u4e2a\u68ee\u6797\u91cd\u65b0\u53d8\u56de\u4e00\u4e2a\u6811\uff0c\u6240\u4ee5\u5c31\u9700\u8981\u91cd\u65b0\u4ece\u91cc\u9762\u627e\u5230\u6839\u8282\u70b9\uff0c\u663e\u7136\uff0c\u53ea\u80fd\u9009\u62e9 Trouble Finder \u65c1\u8fb9 \u7684 Left Child\u3002\u4f46\u662f\u4e3a\u4e86\u7ee7\u7eed\u7ef4\u62a4\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 L Right Subtree \u79fb\u690d\u5230 Trouble Finder \u5fc5\u5b9a\u7a7a\u7f3a\uff08\u56e0\u4e3a\u8fd9\u91cc\u539f\u5148\u662f Left Child\uff09\u7684\u5de6\u6307\u9488\u4e0a\u3002

OK\uff0c\u4f60\u53ef\u80fd\u89c9\u5f97\u8fd9\u4e2a\u89e3\u91ca\u5bf9\u4e8e LL Single Rotation \u6765\u8bf4\u663e\u5f97\u5341\u5206\u591a\u6b64\u4e00\u4e3e\uff0c\u4f46\u662f\u8fd9\u90fd\u662f\u4e3a\u4e86\u7ed9\u540e\u9762\u505a\u7684\u94fa\u57ab\uff0c\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u7e41\u7410\u5197\u4f59\uff0c\u4f46\u662f\u5df2\u7ecf\u8db3\u4ee5\u89e3\u91ca\u539f\u5148\u7684 Single Rotation \u65e0\u6cd5\u89e3\u91ca\u7684 LR & RL \u64cd\u4f5c\u65b9\u6cd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#lr--rl","title":"LR & RL","text":"

\u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\u4e3a\u4ec0\u4e48\u4e4b\u524d\u7684\u65b9\u6cd5\u4e0d\u884c\uff0c\u4e5f\u662f\u6211\u89c9\u5f97\u201c\u65cb\u8f6c\u201d\u8fd9\u4e2a\u505a\u6cd5\u5728\u8fd9\u4e2a\u63a8\u8fdb\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u5272\u88c2\u7684\u5730\u65b9\uff1a\uff08\u5bf9\u7167 #\u65cb\u8f6c\u89c6\u89d2 \u7684\u5185\u5bb9\u9605\u8bfb\uff09\u6211\u4eec\u53d1\u73b0\uff0c\u7531\u4e8e LL \u4e2d\u7684 Trouble Maker \u5728\u5de6\u4fa7\u5b69\u5b50\u6811\u4e0a\uff0c\u6240\u4ee5\u5728\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\uff0c\u76f8\u5f53\u4e8e\u628a\u5b83\u201c\u62fd\u201d\u4e0a\u6765\u4e86\u3002\u7136\u800c\u5bf9\u4e8e L Right Subtree\uff0c\u65e0\u8bba\u662f\u65cb\u8f6c\u524d\u8fd8\u662f\u65cb\u8f6c\u540e\uff0c\u4e3a\u4e86\u7ef4\u62a4\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u5b83\u90fd\u88ab\u63a5\u5728\u4e86\u6df1\u5ea6\u4e3a 1 \u7684\u8282\u70b9\u4e0a\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4 L Right Subtree \u8d21\u732e\u7684\u9ad8\u5ea6\u5e76\u6ca1\u6709\u6539\u53d8\u3002\u5bf9\u4e8e RL \u7684\u60c5\u51b5\u4e5f\u662f\u540c\u7406\u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528 LL Single Rotation \u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u5173\u4e8e\u65cb\u8f6c\u89c6\u89d2

\u5982\u679c\u4ece\u65cb\u8f6c\u89c6\u89d2\u6765\u8003\u8651\uff0c\u786e\u5b9e\u4e5f\u80fd\u8003\u8651\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u4e00\u65b9\u9762\u8fc7\u4e8e\u590d\u6742\uff0c\u4e00\u65b9\u9762\u5b9e\u9645\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u4e5f\u5b8c\u5168\u53ef\u4ee5\u88ab\u4f18\u5316\uff0c\u6240\u4ee5\u6211\u5e0c\u671b\u4f7f\u7528\u6362\u6839\u7684\u89c6\u89d2\u6765\u7406\u89e3\u8fd9\u4e2a\u95ee\u9898\u3002

\u90a3\u4e48\u6211\u4eec\u6362\u4e00\u4e2a\u601d\u8def\uff0c\u7528\u201c\u6362\u6839\u201d\u89c6\u89d2\u6765\u770b\u5f85\u8fd9\u4e2a\u95ee\u9898\uff1a

LR Rotation

\u8fd9\u91cc\u4e24\u4e2a Subtree \u63a5\u5230\u540c\u4e00\u4e2a Trouble Maker \u7684\u610f\u601d\u662f Trouble Maker \u53ef\u4ee5\u51fa\u73b0\u5728\u4e24\u8005\u4efb\u4e00\u4e2d\u3002

Frame 1Frame 2Frame 3Frame 4Frame 5
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === DA\n        B === E === EA --- H\n        E === EB --- H
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A --- B\n        A === C\n        B === D === DA\n        B --- E === EA --- H\n        E === EB --- H
    flowchart TD\n\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === DA\n        E === EA --- H\n        E === EB --- H
    flowchart TD\n\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === DA\n        E --- EA --- H\n        E --- EB --- H
    flowchart TD\n\n        D((\"L Left\\nChild\"))\n        B(((\"Left\\nChild\")))\n        DA[/\"L Left Subtree\"\\]\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        E === B\n        E === A\n        B === D === DA\n        B === EA --- H\n        A === EB --- H\n        A === C
\u5173\u4e8e\u8bb0\u5fc6

\u8bb0\u5fc6\u8fd9\u4e2a\u64cd\u4f5c\u5982\u4f55\u505a\u7684\u8bdd\uff0c\u6211\u7684\u8bb0\u5fc6\u65b9\u6cd5\u662f\u8fd9\u6837\u7684\uff1a

Frame 1Frame 2Frame 3Frame 4
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === DA\n        B === E === EA --- H\n        E === EB --- H
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A --- B\n        A --- E\n        A === C\n        B === D === DA\n        B --- E === EA --- H\n        E === EB --- H
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        C[/\"Right Subtree\"\\]\n\n        A --- B\n        E --- B \n        E --- A\n        B === D === DA\n        B --- EA --- H\n        A --- EB --- H\n        A === C
    flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        C[/\"Right Subtree\"\\]\n\n        E --- B \n        E --- A\n        B === D === DA\n        B --- EA --- H\n        A --- EB --- H\n        A === C

\u7528\u8bed\u8a00\u6982\u62ec\u5c31\u662f\uff0c\u627e\u5230\u5173\u952e\u7684\u90a3\u4e09\u4e2a\u70b9\uff0c\u7136\u540e\u628a\u6700\u4e0b\u9762\u7684\u9876\u5230\u4e0a\u9762\u53bb\uff0c\u5269\u4e0b\u4e24\u4e2a\u4f5c\u4e3a\u5de6\u53f3\u5b69\u5b50\u6811\uff0c\u539f\u5148\u7684\u90a3\u4e2a\u70b9\u7684\u5de6\u53f3\u5b69\u5b50\u6811\u5219\u5bf9\u5e94\u5730\uff0c\u5de6\u5b69\u5b50\u6811\u63a5\u5230\u5de6\u8fb9\u7a7a\u7f3a\u7684\u53f3\u5b69\u5b50\u6811\u4e0a\uff0c\u53f3\u5b69\u5b50\u6811\u63a5\u5230\u53f3\u8fb9\u7a7a\u7f3a\u7684\u5de6\u5b69\u5b50\u6811\u4e0a\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u5176\u4ed6\u95ee\u9898","title":"\u5176\u4ed6\u95ee\u9898","text":"

\u5982\u679c\u4e00\u4e2a Trouble \u4ea7\u751f\u540e\uff0c\u51fa\u73b0\u4e86\u591a\u4e2a Trouble Finder\uff0c\u8be5\u5982\u4f55\u5904\u7406\uff1f

\u9996\u5148\uff0c\u8bf7\u56de\u987e\u4e00\u4e0b #\u64cd\u4f5c \u4e2d\u88ab\u52a0\u7c97\u7684\u8fd9\u4e00\u53e5\u8bdd\uff0c\u300c\u4ee5\u300e\u8ddd\u79bb\u6848\u53d1\u73b0\u573a\u6700\u8fd1\u7684 Trouble Finder\u300f\u4e3a\u6839\u7684\u5b69\u5b50\u6811\u300d\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86\u89e3\u51b3\u6700\u8fd1\u7684 Trouble Finder \u7684\u65b9\u6848\u3002

\u611f\u6027\u7684\u601d\u8003\uff0cAVL \u7684\u201c\u5e73\u8861\u201d\u53ef\u4ee5\u7531\u9012\u5f52\u5f62\u5f0f\u5b9a\u4e49\uff0c\u5177\u4f53\u6765\u8bf4\u8861\u91cf\u7684\u662f\u5de6\u53f3\u5b69\u5b50\u6811\u7684\u201c\u9ad8\u5ea6\u201d\u5dee\u3002\u5f53\u6211\u4eec\u89e3\u51b3\u4e86\u4e00\u4e2a Trouble Finder\uff0c\u610f\u5473\u7740\u6211\u4eec\u8ba9 Trouble Finder \u7684\u6700\u9ad8\u7684\u90a3\u4e2a\u5b69\u5b50\u6811\u9ad8\u5ea6 -1\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u4ee5 Trouble Finder \u4e3a\u6839\u7684\u90a3\u4e2a\u5b69\u5b50\u6811\u9ad8\u5ea6 -1\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5176\u6240\u6709\u7236\u8282\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u90fd\u4f1a\u76f8\u5e94\u5730\u53d8\u5316\u3002

\u4e00\u4e2a Trouble \u5f53\u4e14\u4ec5\u6709\u4e00\u4e2a Trouble Maker\uff0c\u800c\u4e14\u5b83\u5fc5\u5b9a\u662f Trouble Finder \u6240\u5173\u6ce8\u7684\u90a3\u4e2a\u201c\u6700\u957f\u8def\u5f84\u201d\u7684\u7aef\u70b9\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u5b50 Trouble Finder \u90fd\u5728\u5bf9\u5e94\u7684\u7236 Trouble Finder \u7684\u201c\u6700\u957f\u8def\u5f84\u201d\u4e0a\u3002\u800c\u73b0\u5728\u6211\u4eec\u8ba9\u5b50 Trouble Finder \u552f\u4e00\uff08\u5982\u679c\u4e0d\u552f\u4e00\uff0c\u90a3\u5728\u8fd9\u4e2a Trouble Maker \u5230\u6765\u4e4b\u524d\u5c31\u5df2\u7ecf\u5b58\u5728 Trouble \u4e86\uff09\u7684\u6700\u957f\u8def\u5f84\u4e5f\u5e94\u5f53\u4f1a -1\u3002\u800c\u8fd9\u5fc5\u5c06\u5bfc\u81f4\u5176\u5e73\u8861\u56e0\u5b50\u7684\u7edd\u5bf9\u503c -1\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#splay-\u6811","title":"Splay \u6811","text":"

link

OI Wiki: https://oi-wiki.org/ds/splay/

Splay \u6811\uff0c\u5373\u4f38\u5c55\u6811\uff0c\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\u548c AVL \u6811\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7 Splay \u6811\u5e0c\u671b\u8fbe\u5230\u7684\u76ee\u6807\u662f\u5728\u644a\u8fd8(Amortized)\u590d\u6742\u5ea6\\(O(\\log N)\\)\u7684\u60c5\u51b5\u4e0b\u5b8c\u6210\u5927\u90e8\u5206\u5bf9\u70b9\u64cd\u4f5c\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4f7f AVL \u4fdd\u6301\u5e73\u8861\uff0c\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4ece\u6839\u8282\u70b9\u5230 Trouble Maker \u8fd9\u6761\u8def\u5f84\u4e0a\u6240\u6709\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u3002\u800c Splay \u5219\u4e0d\u518d\u7ef4\u62a4\u8fd9\u4e9b\u4fe1\u606f\uff0c\u8fd9\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u4fdd\u8bc1 Splay \u6811\u7684\u72b6\u6001\u90fd\u662f\u5e73\u8861\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5b83\u5c3d\u53ef\u80fd\u5e73\u8861\u3002\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u5bf9\u4e8e \\(M\\) \u6b21\u4efb\u610f\u64cd\u4f5c\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(M\\log N)\\)\uff0c\u5747\u644a\u4e0b\u6765\u8fd9 \\(M\\) \u4e2a\u64cd\u4f5c\u6bcf\u4e00\u4e2a\u90fd\u9700\u8981 \\(O(\\log N)\\)\u3002

\u5bf9\u4e8e\u4e00\u4e2a\u6811\uff0c\u6211\u4eec\u5bf9\u5176\u8282\u70b9\u8fdb\u884c\u7684\u64cd\u4f5c\u53ef\u80fd\u662f\uff1a\u589e\u70b9\u3001\u5220\u70b9\u3001\u6539\u70b9\u3001\u67e5\u70b9\u7b49\u7b49\uff0c\u800c\u4e0d\u540c\u7c7b\u578b\u7684\u64cd\u4f5c\u5f00\u9500\u53ef\u80fd\u4e0d\u5c3d\u76f8\u540c\u3002\u7b80\u5355\u7684\u8ba1\u7b97\u5176\u5e73\u5747\u503c\u5219\u5ffd\u7565\u4e86\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u4e92\u76f8\u7684\u5f71\u54cd\u6216\u8005\u662f\u64cd\u4f5c\u9891\u7387\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u6211\u4eec\u8fd9\u91cc\u4f7f\u7528\u644a\u8fd8\u590d\u6742\u5ea6\u6765\u63cf\u8ff0\u5176\u6548\u7387\u3002

\u5173\u4e8e\u644a\u8fd8\u7684\u95ee\u9898\u6211\u4eec\u8fd8\u4f1a\u5728\u4e4b\u540e\u8fdb\u4e00\u6b65\u6df1\u5165\u3002

\u90a3\u4e48\u8bf4\u4e86\u8fd9\u4e48\u591a\uff0cSplay \u662f\u600e\u4e48\u5b9e\u73b0\u8fd9\u4e00\u76ee\u6807\u7684\u5462\uff1f

Splay \u7684\u6838\u5fc3\u601d\u60f3\u5c31\u662f\uff0c\u6bcf\u5f53\u6211\u4eec\u8bbf\u95ee\u4e00\u4e2a\u8282\u70b9\uff08\u6bd4\u5982\u67e5\u8be2\u67d0\u4e2a\u70b9\u3001\u63d2\u5165\u67d0\u4e2a\u70b9\uff0c\u751a\u81f3\u662f\u5220\u9664\u67d0\u4e2a\u70b9\uff09\uff0c\u6211\u4eec\u5c31\u901a\u8fc7\u4e00\u7cfb\u5217\u64cd\u4f5c\u5c06\u76ee\u6807\u70b9\u8f6c\u79fb\u5230\u6839\u90e8\uff0c\u5f62\u8c61\u4e0a\u7406\u89e3\u5c31\u662f\u4e0d\u65ad\u65cb\u8f6c\u6574\u4e2a\u6811\u7684\u6784\u9020\uff0c\u77e5\u9053\u628a\u70b9\u8f6c\u5230\u6839\u90e8\u3002

\u4f8b\u5982\u6211\u4eec\u67e5\u8be2\u70b9 \\(k_1\\)\uff0c\u5219\u4f1a\u901a\u8fc7\u65cb\u8f6c\u5c06\u5b83\u8f6c\u5230\u6839\u3002

Frame 1Frame 2Frame 3

\u53ef\u4ee5\u53d1\u73b0\uff0cFrame 1 ~ 2 \u5c31\u662f\u6211\u4eec\u524d\u9762\u63d0\u5230\u8fc7\u7684 LR Rotation\uff0c\u800c Frame 2 ~ 3 \u5c31\u662f\u7ecf\u8fc7\u4e86\u4e24\u6b21 LL Rotation\u3002\u5f53\u7136\uff0c\u5728 Splay \u91cc\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u6709\u4e86\u65b0\u7684\u540d\u5b57\u3002

\u8fd9\u4e2a\u4f8b\u5b50\u53ea\u662f\u4e3a\u4e86\u7ed9\u8bfb\u8005\u4e00\u4e2a\u521d\u59cb\u5370\u8c61\uff0c\u4e4b\u540e\u6211\u4eec\u5c06\u66f4\u8be6\u7ec6\u3001\u51c6\u786e\u7684\u4ecb\u7ecd\u64cd\u4f5c\u3002

\uff08\u6ca1\u73a9\u8fc7\u53ef\u80fd\u542c\u4e0d\u592a\u61c2\uff09\u4e0d\u77e5\u9053\u5927\u5bb6\u6709\u6ca1\u6709\u73a9\u8fc7\u90a3\u79cd\u7535\u5b50\u6e38\u620f\uff0c\u5c31\u662f\u6709\u597d\u591a\u8f6c\u76d8\uff0c\u76f8\u90bb\u8f6c\u76d8\u4e4b\u95f4\u6709\u4ea4\u754c\u5904\uff0c\u8fd9\u4e9b\u4ea4\u754c\u70b9\u4e0a\u90fd\u4f1a\u6709\u5706\u7403\uff0c\u5f53\u4e00\u4e2a\u8f6c\u76d8\u65cb\u8f6c\u7684\u65f6\u5019\uff0c\u5176\u5706\u5468\u4e0a\u7684\u7403\u4f53\u90fd\u4f1a\u8ddf\u7740\u8fd9\u4e2a\u5706\u5468\u8f6c\u52a8\u3002\u901a\u8fc7\u4e0d\u505c\u8f6c\u52a8\u76f8\u90bb\u7684\u5706\u76d8\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9e\u73b0\u628a\u67d0\u4e2a\u4f4d\u7f6e\u7684\u5706\u7403\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u4f4d\u7f6e\u3002\u800c Splay \u5dee\u4e0d\u591a\u662f\u8fd9\u4e48\u4e2a\u611f\u89c9\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"

\u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u7ea6\u5b9a\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u8282\u70b9 X\uff0c\u6211\u4eec\u8bb0\u5176\u7236\u8282\u70b9\u4e3a P(Parent)\uff0c\u5176\u7236\u8282\u70b9\u7684\u7236\u8282\u70b9\u4e3a G(Grandparent)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u5177\u4f53\u64cd\u4f5c\u57fa\u672c\u5c31\u548c AVL \u6811\u7684\u76f8\u5173\u64cd\u4f5c\u6709\u5f88\u5927\u91cd\u5408\u3002

\u6548\u679c

Splaying not only moves the accessed node to the root, but also roughly halves the depth of most nodes on the path.

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u5bf9\u70b9\u64cd\u4f5c","title":"\u5bf9\u70b9\u64cd\u4f5c","text":"

\u7531\u4e8e Splay Tree \u9664\u4e86\u5728\u5b8c\u6210\u6240\u6709\u64cd\u4f5c\u4ee5\u540e\u90fd\u9700\u8981\u8fdb\u884c\u4e00\u6b21 Splay \u64cd\u4f5c\uff0c\u5176\u4ed6\u90e8\u5206\u90fd\u548c BST \u4e00\u6837\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e0b Splay \u7684\u90e8\u5206\u3002

Find X

\u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230 \\(X\\)\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u5c06 \\(X\\) \u4e0d\u65ad\u65cb\u8f6c\u81f3\u6839\uff0c\u6700\u7ec8\u76f4\u63a5\u53d6\u51fa Root \u5373\u4e3a\u7ed3\u679c\u3002

Remove X

\u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230 \\(X\\)\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u5c06 \\(X\\) \u4e0d\u65ad\u65cb\u8f6c\u81f3\u6839\uff0c\u63a5\u4e0b\u6765\u5220\u9664 Root \u8282\u70b9\uff0c\u5e76\u5728\u7ef4\u62a4 BST \u6027\u8d28\u7684\u60c5\u51b5\u4e0b\u9012\u5f52\u5730\u5408\u5e76\u5de6\u53f3\u5b69\u5b50\u6811\u5373\u53ef\u3002

Find Max

\u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230\u6700\u5927\u503c\uff0c\u5c06\u5b83\u65cb\u8f6c\u5230\u6839\u90e8\u4ee5\u540e\uff0c\u53ef\u4ee5\u53d1\u73b0\u5b83\u6ca1\u6709\u53f3\u5b69\u5b50\u6811\uff0c\u76f4\u63a5\u5220\u6389\u5c31\u884c\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

\u524d\u7f6e\u9605\u8bfb

\u5173\u4e8e\u644a\u8fd8\u5206\u6790\u7684\u57fa\u672c\u77e5\u8bc6\uff0c\u8bf7\u67e5\u770b Topic 1 | Amortized Analysis\u3002

\u6b64\u5904\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u52bf\u80fd\u6cd5\u6765\u5206\u6790 Splay \u7684\u644a\u8fd8\u590d\u6742\u5ea6\uff0c\u7531\u4e8e\u8bfe\u4ef6\u7701\u7565\u4e86\u5f88\u591a\u7ec6\u8282\u4e0a\u7684\u89e3\u91ca\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u4f1a\u8865\u5145\u975e\u5e38\u591a\u5185\u5bb9\u3002

reference

http://www2.hawaii.edu/~nodari/teaching/f19/scribes/notes06.pdf

\u5f00\u59cb\u5206\u6790\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u660e\u786e\u5206\u6790\u7684\u76ee\u6807\uff1a

\u5bf9\u4e8e Splay\uff0c\u5b83\u4e0d\u50cf\u6211\u4eec\u5728 Topic 1 | Amortized Analysis \u63d0\u5230\u7684\u90a3\u4e9b\u6848\u4f8b\u4e00\u6837\uff0c\u5b58\u5728\u660e\u663e\u7684\u51cf\u52bf\u548c\u589e\u52bf\u884c\u4e3a\u3002\u5bf9\u4e8e Splay \u6765\u8bf4\uff0c\u6240\u6709\u6211\u4eec\u63d0\u5230\u7684\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u5c06\u76ee\u6807\u70b9\u65cb\u8f6c\u5230\u6839\u6765\u5b9e\u73b0\uff0c\u800c\u8fd9\u4e5f\u6210\u4e3a\u5176\u4e3b\u8981\u5f00\u9500\uff08\u90e8\u5206\u5e38\u6570\u64cd\u4f5c\u663e\u7136\u88ab\u8986\u76d6\uff0c\u63d2\u5165\u4e4b\u7c7b\u7684\u64cd\u4f5c\u4e4b\u6240\u4ee5\u80fd\u88ab\u5ffd\u7565\u7684\u539f\u56e0\uff0c\u53ef\u4ee5\u53c2\u8003 ltgg \u7684\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002\u5176\u4e2d\u6211\u4eec\u4f1a\u7528\u5230\u82e5\u5e72\u6b21 zig\u3001zig-zag\u3001zig-zig \u7684\u64cd\u4f5c\u3002

\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u6211\u4eec\u8981\u5206\u6790\u7684\u76ee\u6807\u4e3a\uff1a

\\[ T_{\\text{rotate }x\\text{ to root}} = T_{\\text{zig}} + \\sum{ {T_{\\text{zig-zag}}}_i } + \\sum{ {T_{\\text{zig-zig}}}_i } \\]

\u4e0a\u9762\u4e09\u4e2a\u90e8\u5206\u6bcf\u4e00\u4e2a\u90fd\u6709\u53ef\u80fd\u662f \\(0\\)\uff0c\u800c zig \u6700\u591a\u53ea\u4f1a\u53d1\u751f\u4e00\u6b21\uff01

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u52bf\u80fd\u51fd\u6570 \\(\\Phi(x)\\)\uff0c\u5e76\u4e14\u6839\u636e\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u52bf\u80fd\u5206\u6790\u6cd5\u7684\u7279\u6027\uff0c\\(\\Phi(x)\\) \u5e94\u8be5\u5177\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

\u4e8e\u662f\u8fd9\u91cc\u6211\u4eec\u8bbe\u8ba1\u7684\u52bf\u80fd\u51fd\u6570\u4e3a\uff1a

\\[ \\Phi(T) = \\sum_{des \\in T} \\log Size(des) = \\sum_{des \\in T} Rank(des)\\\\ \\begin{aligned} &\\text{Where } des \\text{ means the descendant of } T \\text{,}\\\\ &\\text{and } Size(des) \\text{ means the number of the nodes of } des \\text{.} \\\\ &\\text{And we note } Rank(des) = \\log Size(des) \\approx Height(des) \\text{.} \\end{aligned} \\]

\u7528\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u5c31\u662f\uff0c\u5bf9\u4e8e\u67d0\u4e2a\u5b69\u5b50\u6811 \\(T\\)\uff0c\u5176\u52bf\u80fd\u51fd\u6570 \\(\\Phi(T)\\) \u7b49\u4e8e\u4ee5\u6240\u6709\u5b83\u7684\u540e\u4ee3\u4e3a\u6839\u7684\u5b69\u5b50\u6811\u7684\u5927\u5c0f\u53d6\u5bf9\u6570\u4ee5\u540e\u6c42\u548c\u3002

Rank v.s. Height

\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u7684\u4e00\u4e2a\u70b9\u662f\uff0c\u867d\u7136 \\(Rank(des) \\approx Height(des)\\)\uff0c\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u8be5\u7528 \\(Height()\\) \u6765\u4ee3\u66ff \\(Rank()\\)\uff0c\u4e3b\u8981\u539f\u56e0\u662f\u5728\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\uff0c\\(Rank()\\) \u4e0d\u4f1a\u53d8\u5316\uff08\u56e0\u4e3a \\(Size()\\) \u4e0d\u4f1a\u53d8\u5316\uff09\uff0c\u4f46\u662f \\(Height()\\) \u53ef\u80fd\u53d8\u5316\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u9009\u7528 \\(Height()\\) \u4f5c\u4e3a\u52bf\u80fd\u51fd\u6570\uff0c\u6211\u4eec\u5c31\u4e0d\u5f97\u5df2\u8003\u8651\u6574\u68f5\u6811\uff0c\u800c\u975e\u53ea\u9700\u8981\u8003\u8651\u5f53\u524d\u65cb\u8f6c\u6d89\u53ca\u7684\u5b69\u5b50\u6811\u3002

\u5173\u4e8e\u6b63\u786e\u6027\u7684\u8bf4\u660e\uff0c\u6211\u4f1a\u653e\u5728\u4e4b\u540e\u7684\u8fc7\u7a0b\u4e2d\u4e00\u4e2a\u4e2a\u63d2\u5165\uff0c\u5b83\u4eec\u4f1a\u88ab\u5305\u88f9\u5728 key-point \u6587\u5b57\u6846\u4e2d\uff0c\u8bf7\u6ce8\u610f\u8fd9\u4e9b\u5185\u5bb9\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u53ef\u4ee5\u5f00\u59cb\u5206\u6790\u4e86\uff0c\u6839\u636e\u6211\u4eec\u7ed9\u5b9a\u7684\u76ee\u6807\uff1a

\\[ T_{\\text{rotate }x\\text{ to root}} = T_{\\text{zig}} + \\sum{ {T_{\\text{zig-zag}}}_i } + \\sum{ {T_{\\text{zig-zig}}}_i } \\]

\u6211\u4eec\u5229\u7528\u5747\u644a\u5206\u6790\uff0c\u9700\u8981\u5f97\u5230\u4e00\u4e2a\u5e73\u6ed1\u4e0a\u754c\uff1a

\\[ \\hat{c}_{\\text{rotate }x\\text{ to root}} = \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\]

\u800c\u6211\u4eec\u9700\u8981\u8bc1\u660e \\(\\hat{c}_{\\text{rotate }x\\text{ to root}} = O(\\log{N})\\)\uff0c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5206\u522b\u5206\u6790 zig\u3001zig-zag\u3001zig-zig\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig","title":"zig","text":"

Amortized Analysis for Zig

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= {c_{\\text{zig}}}_i + \\Phi_{i}(X) - \\Phi_{i-1}(P) \\\\ &= 1 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) \\end{aligned} \\]

\u89c2\u5bdf\u914d\u56fe\uff0c\\(X\\) \u591a\u4e86 \\(P\\) \u548c \\(C\\) \u4f5c\u4e3a\u5b50\u55e3\uff0c\u800c \\(P\\) \u60b2\u60e8\u5730\u5931\u53bb\u4e86 \\(X\\) \u4e00\u65cf\uff0c\u751a\u81f3\u6210\u4e86 \\(X\\) \u7684\u540e\u4ee3\uff0c\u5373 \\(X\\) \u76db \\(P\\) \u8870\uff0c\u56e0\u6b64\u5c31\u6709\u4e0d\u7b49\u5f0f\uff1a

\\[ \\left\\{ \\begin{aligned} & Rank_{i}(X) - Rank_{i-1}(X) \\geq 0\\\\ & Rank_{i}(P) - Rank_{i-1}(P) \\leq 0 \\end{aligned} \\right. \\]

\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u505a\u7b80\u5355\u7684\u7f29\u653e\uff1a

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= 1 + \\underbrace{Rank_{i}(X) - Rank_{i-1}(X)}_{\\geq 0} + \\underbrace{Rank_{i}(P) - Rank_{i-1}(P)}_{\\leq 0} \\\\ &\\leq 1 + Rank_{i}(X) - Rank_{i-1}(X) \\end{aligned} \\]

\u4e3a\u4ec0\u4e48\u4e0d\u662f\u53e6\u5916\u4e00\u79cd\u9009\u62e9 / \u4e3a\u4f55\u8fd9\u6837\u7f29\u653e\uff1f

\u8fd9\u4e00\u90e8\u5206\u5728 cy \u7684 PPT \u91cc\u5e76\u6ca1\u6709\u8be6\u7ec6\u8bf4\u660e\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u8fd9\u662f\u8fd9\u4e2a\u5206\u6790\u65b9\u6cd5\u6210\u7acb\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u56e0\u7d20\uff01

\u4e5f\u8bb8\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u53c8\u6216\u8005\u4f60\u4e86\u89e3\u4e86\u4e4b\u540e\u4e24\u79cd\u5206\u6790\uff0c\u53c8\u56de\u8fc7\u5934\u6765\u601d\u8003\u53d1\u73b0\uff0c\u8fd9\u91cc\u5176\u5b9e\u5b58\u5728\u53e6\u5916\u4e00\u79cd\u66f4\u7d27\u51d1\u7684\u7f29\u653e\u65b9\u6cd5\uff08\u751a\u81f3\u4e0d\u80fd\u8bf4\u201c\u7f29\u653e\u201d\uff09\uff0c\u89c2\u5bdf\u5230 \\(Size_{i}(X) =Size_{i-1}(P)\\)\uff0c\u6240\u4ee5\uff1a

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= 1 + Rank_{i}(P) - Rank_{i-1}(X) + \\underbrace{Rank_{i}(X) - Rank_{i-1}(P)}_{= 0} \\\\ &= 1 + Rank_{i}(P) - Rank_{i-1}(X) \\end{aligned} \\]

\u4f46\u662f\u8fd9\u4e0d\u4fbf\u4e8e\u6211\u4eec\u4e4b\u540e\u7684\u4f20\u9012\u3002\u8fd8\u8bb0\u5f97\u6211\u4eec\u8981\u6c42\u7684\u76ee\u6807\u5417\uff1f

\\[ \\hat{c}_{\\text{rotate }x\\text{ to root}} = \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\]

\u6211\u4eec\u4e4b\u540e\u9700\u8981\u5bf9\u5404\u79cd \\(\\hat{c}\\) \u8fdb\u884c\u6c42\u548c\uff0c\u800c\u6bcf\u4e00\u6b21\u7684 \\(X,\\;P,\\;G\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u4e3a\u4e86\u5728\u6c42\u548c\u7684\u65f6\u5019\u5b9e\u73b0\u9519\u4f4d\u76f8\u51cf\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u7f29\u653e\u5f97\u5230\u7684\u7ed3\u679c\u5177\u6709\u4e00\u5b9a\u7684\u4f20\u9012\u6027\u8d28\uff0c\u6216\u8005\u8bf4\u5728\u6c42\u548c\u8fc7\u7a0b\u4e2d\u80fd\u591f\u8fbe\u5230\u88c2\u9879\u76f8\u6d88\u7684\u6548\u679c\u3002

\u800c\u5bf9\u4e8e Splay \u6765\u8bf4\uff0c\u6211\u4eec\u7684\u64cd\u4f5c\u4f20\u9012\uff0c\u6b63\u662f\u901a\u8fc7\u4e0d\u65ad\u5c06\u6211\u4eec\u5173\u6ce8\u7684 \\(X\\) \u70b9\u9012\u5f52\u5730\u5411\u4e0a\u65cb\u8f6c\u5b9e\u73b0\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\\(\\Phi_{i}(X)\\) \u4e2d\u7684 \\(X\\)\uff0c\u5c31\u662f \\(\\Phi_{i-1}(X)\\) \u4e2d\u7684 \\(X\\)\uff0c\u5982\u6b64\u6211\u4eec\u6700\u7ec8\u53ef\u4ee5\u5f97\u5230 \\(\\Phi_{n}(X) - \\Phi_{0}(X)\\)\uff0c\u800c\u5176\u4e2d\u4e00\u4e2a\u662f\u6839\uff0c\u4e00\u4e2a\u662f\u6211\u4eec\u4e00\u5f00\u59cb\u6253\u7b97\u64cd\u4f5c\u7684\u90a3\u4e2a\u70b9\u3002

\u4e8e\u662f\u6211\u4eec\u7406\u60f3\u7684\u7f29\u653e\u76ee\u6807\u5c31\u662f \\(k(Rank_{i}(X) - Rank_{i-1}(X)) \\;\\; \\text{where } k \\text{ is fixed for all the terms}\\)\u3002

\u4e0d\u8fc7\u4f60\u53ef\u80fd\u53c8\u8981\u63d0\u95ee\u4e86\uff0czig \u5206\u6790\u7684\u7ed3\u679c\u91cc\u4e0d\u662f\u6709\u4e2a \\({c_{\\text{zig}}}_i = 1\\) \u5417\uff1f

\u8fd9\u662f\u56e0\u4e3a zig \u6700\u591a\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u6240\u4ee5\u8fd9\u4e2a\u5e38\u6570\u662f\u6ca1\u6709\u5f71\u54cd\u7684\u3002

\u771f\u7684\u9700\u8981\u90fd\u7f29\u653e\u5230\u76f8\u540c\u7684 k \u5417

\u968f\u4e4b\u800c\u6765\u7684\uff0c\u4e00\u4e2a\u9700\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u662f\u300c\\(\\text{where } k \\text{ is fixed for all the terms}\\)\u300d\u771f\u7684\u91cd\u8981\u5417\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u4e09\u4e2a\u90e8\u5206\u7f29\u653e\u51fa\u6765\u90fd\u5177\u6709\u76f8\u540c\u7684 \\(k\\) \u5417\uff1f

\u9996\u5148\uff0c\u91cd\u8981\u80af\u5b9a\u662f\u91cd\u8981\u7684\uff0c\u53ea\u4e0d\u8fc7\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u7531\u4e8e\u6211\u4eec\u65cb\u8f6c\u7684\u65b9\u5411\u90fd\u662f\u5411\u4e0a\uff0c\u6240\u4ee5 \\(Rank_{i}(X) \\geq Rank_{i-1}(X)\\)\uff0c\u56e0\u6b64\u6211\u4eec\u53ea\u9700\u8981\u6700\u540e\u5c06\u5b83\u4eec\u4e00\u8d77\u90fd\u7f29\u653e\u5230 \\(k_{overall} = \\max\\{k_\\text{zig}, k_\\text{zig-zag}, k_\\text{zig-zig} \\}\\) \u5c31\u53ef\u4ee5\u4e86\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig-zag","title":"zig-zag","text":"

Amortized Analysis for Zig-Zag

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zag}}}_i &= {c_{\\text{zig-zag}}}_i + \\Phi_{i}(X)- \\Phi_{i-1}(G) \\\\ &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\end{aligned} \\]

\u89c2\u5bdf\u914d\u56fe\uff0c\\(X\\) \u53c8\u4e00\u6b21\u7edd\u5730\u53cd\u51fb\uff0c\u6210\u4e3a\u5b83\u5bb6\u957f\u548c\u5b83\u5bb6\u957f\u7684\u5bb6\u957f\u5171\u540c\u7684\u5bb6\u957f\uff1b\\(G\\) \u635f\u5931\u6700\u60e8\u91cd\uff0c\u4e22\u6389\u4e86 \\(A,\\;B\\) \u4e24\u65cf\u5b50\u55e3\u3002

\u5728\u8fd9\u6b21\u7684\u7f29\u653e\u4e2d\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u5728 key-point \u91cc\u63d0\u5230\u7684\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u7f29\u653e\u5230 \\(k(Rank_{i}(X) - Rank_{i-1}(X))\\) \u7684\u5f62\u5f0f\uff0c\u5e76\u4e14\u7531\u4e8e zig-zig \u4f1a\u591a\u6b21\u53d1\u751f\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u5f97\u60f3\u529e\u6cd5\u641e\u6389\u8fd9\u91cc\u7684 \\({c_{\\text{zig-zag}}}_i = 2\\)\uff0c\u5426\u5219\u6700\u540e\u5c31\u4f1a\u51fa\u73b0\u4e00\u4e2a \\(2p(n)\\) \u7684 term\uff0c\u800c\u6211\u4eec\u7684\u8bc1\u660e\u76ee\u6807\u662f \\(\\log{N}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u5c06\u8fd9\u4e2a \\(2\\) \u6d88\u6389\u3002\u800c\u4e3a\u4e86\u6d88\u9664\u8fd9\u4e2a \\(2\\)\uff0c\u6211\u4eec\u9700\u8981\u5148\u5f15\u5165\u4e00\u4e2a\u5f15\u7406\uff1a

Lemma 1

\u7531\u4e8e \\(y = \\log{x}\\) \u662f\u5355\u8c03\u7684\u51f8\u51fd\u6570\uff0c\u6240\u4ee5\u6709 \\(\\frac{\\log{x} + \\log{b}}{2} \\leq \\log {\\frac{a+b}{2}}\\)\u3002

\u800c\u5728 Splay \u7684\u5747\u644a\u590d\u6742\u5ea6\u5206\u6790\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684 \\(\\log{x}\\) \u6307\u7684\u662f \\(\\log_2{x}\\)\uff0c\u56e0\u6b64\u6709\uff1a

\\[ \\begin{aligned} \\log{a} + \\log{b} &= 2\\left( \\frac{\\log{a} + \\log{b}}{2} \\right) \\\\ &\\leq 2\\left( \\log{\\frac{a+b}{2}} \\right) \\\\ &= 2\\left( \\log{(a+b)} - \\log{2} \\right) \\\\ &= 2 \\log{(a+b)} - 2 \\\\ \\end{aligned} \\]

\u770b\u5230\u8fd9\u91cc\u51fa\u73b0\u4e86\u4e00\u4e2a \\(-2\\) \u6211\u4eec\u5c31\u80fd\u957f\u8212\u4e00\u53e3\u6c14\u4e86\uff0c\u8fd9\u4e0b \\({c_{\\text{zig-zag}}}_i = 2\\) \u6b7b\u5230\u4e34\u5934\u54af\uff01\u5bf9\u7167\u914d\u56fe\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

\\[ \\begin{aligned} Rank_{i}(P) + Rank_{i}(G) &= \\log{Size_{i}(P)} + \\log{Size_{i}(G)} \\\\ &\\leq 2\\log{\\left(Size_{i}(P)+Size_{i}(G)\\right)} - 2 & \\text{(Lemma 1)}\\\\ &\\leq 2\\log{\\left(Size_{i}(P)+Size_{i}(G)+1\\right)} - 2 \\\\ &\\leq 2\\log{Size_{i}(X)} - 2 \\\\ &\\leq 2Rank_{i}(X) - 2 \\\\ \\end{aligned} \\]

\u56e0\u6b64\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\u8fd9\u4e9b\u76f8\u7b49\u6216\u4e0d\u7b49\u5173\u7cfb\uff1a

\\[ \\left\\{ \\begin{aligned} Rank_{i}(X) &= Rank_{i-1}(G) \\\\ Rank_{i}(P) + Rank_{i}(G) &\\leq 2Rank_{i}(X) - 2 \\\\ Rank_{i-1}(P) + Rank_{i-1}(X) &\\geq 2Rank_{i-1}(X) \\end{aligned} \\right. \\]

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u5b9e\u73b0\u7f29\u653e\uff1a

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zag}}}_i &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\\\ &= 2 + \\left( Rank_{i}(X) - Rank_{i-1}(G)\\right ) + \\left( Rank_{i}(P) + Rank_{i}(G) \\right) - \\left( Rank_{i-1}(P) + Rank_{i-1}(X) \\right) \\\\ &\\leq 2 + 0 + 2Rank_{i}(X) - 2 + 2Rank_{i-1}(X) \\\\ &= 2\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\end{aligned} \\]

\u7686\u5927\u6b22\u559c\uff01

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig-zig","title":"zig-zig","text":"

Amortized Analysis for Zig-Zig

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zig}}}_i &= {c_{\\text{zig-zig}}}_i + \\Phi_{i}(X)- \\Phi_{i-1}(G) \\\\ &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\end{aligned} \\]

\u4e3a\u4e86\u5b9e\u73b0 zig-zig \u7684\u7f29\u653e\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5bf9 Lemma 1 \u8fdb\u884c\u4e00\u4e2a\u6d3b\u7528\u3002\u5bf9\u7167\u914d\u56fe\uff0c\u5f97\u5230\uff1a

\\[ \\begin{aligned} Rank_{i}(G) + Rank_{i-1}(X) &\\leq 2\\log{\\left( \\underbrace{Size_{i}(G)}_{\\mathbf{C}+\\mathbf{D}+G} + \\underbrace{Size_{i-1}(X)}_{\\mathbf{A}+\\mathbf{B}+X} \\right)} - 2 & \\text{(Lemma 1)} \\\\ &\\leq 2\\log{\\left( Size_{i}(G) + Size_{i-1}(X) + 1 \\right)} - 2 & \\\\ &= 2\\log{\\left( Size_{i}(X) \\right)} - 2 \\\\ &= 2Rank_{i}(X) - 2 \\\\ Rank_{i}(G) &\\leq 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\end{aligned} \\]

\u8fd9\u4e00\u6b65\u5f88\u96be\u60f3\uff0c\u4f46\u662f\u4e5f\u975e\u5e38\u5173\u952e\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u8fd9\u4e9b\u4e0d\u7b49\u5f0f\uff1a

\\[ \\left\\{ \\begin{aligned} Rank_{i}(X) &= Rank_{i-1}(G) \\\\ Rank_{i}(G) &\\leq 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\\\ Rank_{i}(P) &\\leq Rank_{i}(X) \\\\ Rank_{i-1}(P) &\\geq Rank_{i-1}(X) \\end{aligned} \\right. \\]

\u4e8e\u662f\u6211\u4eec\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u8be1\u5f02\u7684\u7f29\u653e\uff1a

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zig}}}_i &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\\\ &= 2 + \\left( Rank_{i}(X) - Rank_{i-1}(G) \\right) + Rank_{i}(G) + Rank_{i}(P) - Rank_{i-1}(P) - Rank_{i-1}(X) \\\\ &\\leq 2 + 0 + \\left( 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\right) + Rank_{i}(X) - Rank_{i-1}(X) - Rank_{i-1}(X) \\\\ &= 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\end{aligned} \\]

\ud83d\ude29 \u81f3\u6b64\uff0c\u6211\u4eec\u603b\u7b97\u662f\u628a\u725b\u9b3c\u86c7\u795e\u7684 zig-zig \u7684\u8bc1\u660e\u4e5f\u7ed9\u641e\u5b9a\u4e86\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u7ed3\u8bba","title":"\u7ed3\u8bba","text":"

Amortized Analysis for Splay

\u81f3\u6b64\uff0c\u5bf9\u4e8e\u4e09\u79cd\u64cd\u4f5c\uff0c\u6211\u4eec\u90fd\u5f97\u5230\u4e86\u5b83\u4eec\u7684\u5747\u644a\u4e0a\u754c\uff1a

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &\\leq 1 + Rank_{i}(X) - Rank_{i-1}(X) \\\\ {\\hat{c}_{\\text{zig-zag}}}_i &\\leq 2\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\\\ {\\hat{c}_{\\text{zig-zig}}}_i &\\leq 3\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\end{aligned} \\]

\u6839\u636e\u6211\u4eec\u5728 key-point \u6846\u300c\u771f\u7684\u9700\u8981\u90fd\u7f29\u653e\u5230\u76f8\u540c\u7684 k \u5417\u300d\u4e2d\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\u5c06\u5b83\u4eec\u7684 \\(k\\) \u90fd\u7f29\u653e\u4e3a \\(3\\)\uff1a

\\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &\\leq 1 + 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\\\ {\\hat{c}_{\\text{zig-zag}}}_i &\\leq 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\\\ {\\hat{c}_{\\text{zig-zig}}}_i &\\leq 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\end{aligned} \\]

\u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684\u5747\u644a\u4e0a\u754c\uff1a

\\[ \\begin{aligned} \\hat{c}_{\\text{rotate }x\\text{ to root}} &= \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\\\ &= O(1) + 3\\left( Rank_{N}(X) - Rank_{0}(X) \\right) \\\\ &= O(\\log{N}) \\end{aligned} \\]

\u53ef\u4ee5\u4ed4\u7ec6\u60f3\u60f3\u6c42\u548c\u5f0f\u662f\u5982\u4f55\u201c\u76f8\u6d88\u201d\u5f97\u5230\u6700\u540e\u7684\u5f0f\u5b50\u7684\uff0c\u8fd9\u91cc\u7684 \\(\\sum {\\hat{c}_\\text{...}}_i\\) \u7684 \\(i\\) \u5e76\u4e0d\u662f\u5728\u6c42\u548c\u5f0f\u4e2d\u5404\u81ea\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4e09\u4e2a term \u653e\u5728\u4e00\u8d77\uff0c\u5219\u53ef\u4ee5\u56ca\u62ec \\(i\\in\\{1,2,...,N\\}\\)

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/","title":"Lecture 2 | Red Black Tree & B+ Tree","text":"

\u7ea6 4971 \u4e2a\u5b57 43 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

\u8bf4\u660e

\u800c\u4e3a\u4e86\u63d0\u9ad8\u7b14\u8bb0\u6574\u7406\u6548\u7387\uff0c\u53ef\u80fd\u4f1a\u8003\u8651\u7528\u66f4\u591a\u7684\u5f15\u7528\u548c\u66f4\u7b80\u5355\u7684\u8bed\u8a00\u3002\u5982\u679c\u60a8\u89c9\u5f97\u6709\u54ea\u91cc\u8bf4\u7684\u4e0d\u591f\u6e05\u695a\uff0c\u8bf7\u76f4\u63a5\u5728\u8bc4\u8bba\u533a\u72e0\u72e0 blame \u6211\uff01

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u7ea2\u9ed1\u6811","title":"\u7ea2\u9ed1\u6811","text":"

link

OI Wiki: https://oi-wiki.org/ds/rbtree/

Wikipedia: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

\u987e\u540d\u601d\u4e49\uff0c\u7ea2\u9ed1\u6811(Red Black Tree)\u5c31\u662f\u4e00\u79cd\u8282\u70b9\u5206\u7c7b\u4e3a\u7ea2\u9ed1\u4e24\u8272\u7684\uff0c\u6bd4\u8f83\u5e73\u8861\u7684\u4e8c\u53c9\u641c\u7d22\u6811\u3002\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e AVL \u6811\uff0c\u7ea2\u9ed1\u6811\u7684\u201c\u5e73\u8861\u201d\u6027\u8d28\u662f\u901a\u8fc7\u9ed1\u9ad8(black height)\u6765\u5b9a\u4e49\u7684\u3002\u63a5\u4e0b\u6765\u4f9d\u6b21\u7ed9\u51fa\u7ea2\u9ed1\u6811\u7684\u5b9a\u4e49\u548c\u9ed1\u9ad8\u7684\u5b9a\u4e49\u3002

Red Black Tree

\u7ea2\u9ed1\u6811\u662f\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\u7684\u4e00\u79cd\u4e8c\u53c9\u641c\u7d22\u6811\uff1a

Properties of RBTree

@cy's PPT

  1. Every node is either red or black.
  2. The root is black.
  3. Every leaf (NIL) is black.
  4. if a node is red, then both its children are black.
  5. For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.

ch \u8001\u5e08\u8bf4\uff0c\u5e0c\u671b\u6211\u4eec\u80fd\u628a\u8fd9\u4e94\u6761\u6027\u8d28\u719f\u7ec3\u8bb0\u4f4f\uff0c\u600e\u4e48\u53ef\u80fd\uff08\u9003\uff09\u3002

\u8bf4\u660e

\u7531\u4e8e\u8fd9\u91cc\u7684\u201c\u53f6\u5b50\u7ed3\u70b9\u201d\u88ab\u91cd\u65b0\u5b9a\u4e49\u4e86\uff0c\u4e3a\u4e86\u63cf\u8ff0\u65b9\u4fbf\uff0c\u6211\u73b0\u5728\u79f0\u6240\u6709\u4e24\u4e2a\u5b50\u7ed3\u70b9\u90fd\u662f NIL \u7684\u7ed3\u70b9\u4e3a\u672b\u7aef\u7ed3\u70b9\uff08\u4e5f\u5c31\u662f\u901a\u4fd7\u610f\u4e49\u4e0a\u7684\u53f6\u5b50\u7ed3\u70b9\uff09\u3002\u800c\u8fd9\u4e2a\u5b9a\u4e49\u53ea\u662f\u6211\u81ea\u5df1\u8bf4\u8bf4\u7684\uff01

@Wiki
  1. Every node is either red or black.
  2. All NIL nodes (figure above) are considered black.
  3. A red node does not have a red child.
  4. Every path from a given node to any of its descendant NIL nodes goes through the same number of black nodes.
@OI Wiki
  1. \u6bcf\u4e00\u4e2a\u8282\u70b9\u8981\u4e48\u662f\u7ea2\u8272\uff0c\u8981\u4e48\u662f\u9ed1\u8272\uff1b
  2. NIL \u8282\u70b9\uff08\u7a7a\u53f6\u5b50\u8282\u70b9\uff09\u4e3a\u9ed1\u8272\uff1b
  3. \u7ea2\u8272\u8282\u70b9\u7684\u5b50\u8282\u70b9\u5fc5\u987b\u4e3a\u9ed1\u8272\uff1b
  4. \u4ece\u6839\u8282\u70b9\u5230 NIL \u8282\u70b9\u7684\u6bcf\u6761\u8def\u5f84\u4e0a\u7684\u9ed1\u8272\u8282\u70b9\u6570\u91cf\u76f8\u540c\uff1b

black height, bh

\u7279\u5b9a\u8282\u70b9\u7684\u9ed1\u9ad8\uff0c\u7b49\u4e8e\u8be5\u8282\u70b9\u5230\u53f6\u7ed3\u70b9\u5230\u7b80\u5355\u8def\u5f84\u4e2d\uff08\u4e0d\u5305\u62ec\u81ea\u8eab\uff09\uff0c\u9ed1\u8272\u8282\u70b9\u7684\u6570\u91cf\u3002

\u63a5\u4e0b\u6765\u4e3a\u4e86\u52a0\u6df1\u7406\u89e3\uff0c\u6709\u4e00\u4e9b\u8fa8\u6790\u53ef\u4ee5\u505a\uff1a

T1T2 \u9898\u9762\u7b54\u6848

\u4e0b\u56fe\u7684\u7ea2\u9ed1\u6811\u662f\u5426\u5408\u6cd5\uff1f

\u4e0d\u5408\u6cd5\u3002

16 \u53f7\u8282\u70b9\u7684\u53f3\u513f\u5b50\u662f\u4e00\u4e2a\u9ed1\u53f6\u5b50\uff0c\u800c\u8fd9\u4e2a\u53f6\u5b50\u5230\u6839\u7684\u8def\u5f84\u4e0a\u53ea\u6709 3 \u4e2a\u9ed1\u8282\u70b9\uff0c\u800c\u5176\u4ed6\u53f6\u5b50\u5230\u6839\u90fd\u6709 4 \u4e2a\u9ed1\u8282\u70b9\u3002

\u6240\u4ee5\u6211\u4eec\u9700\u8981\u8b66\u60d5\u53ea\u6709\u4e00\u4e2a\u975e\u53f6\u513f\u5b50\u7684\u7ea2\u8272\u8282\u70b9\u3002

\u9898\u9762\u7b54\u6848

\u4e0b\u56fe\u7684\u7ea2\u9ed1\u6811\u662f\u5426\u5408\u6cd5\uff1f

\u5408\u6cd5\u3002

\u6839\u636e T1 \u7684\u89e3\u6790\uff0c\u6211\u4eec\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u7ed3\u8bba\uff1a

\u5408\u6cd5\u7ea2\u9ed1\u6811\u4e0d\u5b58\u5728\u53ea\u6709\u4e00\u4e2a\u975e\u53f6\u5b50\u8282\u70b9\u7684\u7ea2\u8272\u8282\u70b9\uff01

or

\u5408\u6cd5\u7ea2\u9ed1\u6811\u7684\u7ea2\u8272\u8282\u70b9\u7684\u4e24\u4e2a\u5b50\u8282\u70b9\u4e00\u5b9a\u90fd\u662f\u53f6\u5b50\u6216\u90fd\u4e0d\u662f\u53f6\u5b50\uff01

\u6b64\u5916\uff0c\u5173\u4e8e\u7ea2\u9ed1\u6811\u7684\u9ad8\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u6027\u8d28\uff1a

property about height of RBTree

\u4e00\u4e2a\u6709 \\(N\\) \u4e2a\u5185\u90e8\u8282\u70b9\uff08\u4e0d\u5305\u62ec\u53f6\u5b50\u7ed3\u70b9\uff09\u7684\u7ea2\u9ed1\u6811\uff0c\u5176\u9ad8\u5ea6\u6700\u5927\u4e3a \\(2\\log_2 (N+1)\\)\u3002

the proof of the property

\u5173\u4e8e\u9ed1\u9ad8\u548c\u70b9\u6570\u7684\u5173\u7cfb\u3002

  1. \u9996\u5148\u6211\u4eec\u6709 \\(N \\geq 2^{bh}-1\\)\uff0c\u4e5f\u5c31\u662f \\(bh \\leq \\log_2 (N+1)\\)\uff1b
  2. \u7136\u540e\u663e\u7136\u6709 \\(2 bh(Tree) >= h(Tree)\\)
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

\u63d0\u9192

\u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u7684\u90fd\u662f bottom-up \u7684\u601d\u8def\uff0c\u4e0d\u540c\u4e8e AVL \u6811\uff0c\u7ea2\u9ed1\u6811\u662f\u5b58\u5728 top-down \u7684\u64cd\u4f5c\u65b9\u6cd5\u7684\uff0c\u800c\u8fd9\u4e5f\u662f\u7ea2\u9ed1\u6811\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u4f18\u52bf\uff0c\u5b58\u5728 top-down \u7684\u5904\u7406\u65b9\u6cd5\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u8fdb\u884c\u66f4\u5feb\u7684\u5e76\u884c\u64cd\u4f5c\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5728\u8fd9\u91cc\u8be6\u7ec6\u5c55\u5f00\u3002

\u540c AVL \u6811\u7684\u8c03\u6574\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u7ea2\u9ed1\u6811\u7684\u8c03\u6574\u64cd\u4f5c\u4e5f\u662f\u5de6\u53f3\u5bf9\u79f0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4ecd\u7136\u53ea\u8ba8\u8bba\u4e00\u4fa7\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u63d2\u5165","title":"\u63d2\u5165","text":"

\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u9ed1\u9ad8\u6709\u8d21\u732e\u7684\u53ea\u6709\u9ed1\u8272\u8282\u70b9\uff0c\u56e0\u6b64 NIL \u8282\u70b9\u88ab\u4e00\u4e2a\u7ea2\u8272\u8282\u70b9\u7f6e\u6362\u5e76\u4e0d\u4f1a\u6539\u53d8\u4e00\u9897\u7ea2\u9ed1\u6811\u7684\u9ed1\u9ad8\uff0c\u56e0\u4e3a\u7ea2\u8272\u8282\u70b9\u8fd8\u4f1a\u6709\u4e00\u5c42 NIL \u5b50\u8282\u70b9\uff1b\u7136\u800c\u5bf9\u4e8e\u7ea2\u8272\u8282\u70b9\uff0c\u5374\u6709\u7740\u7ea2\u8272\u7ed3\u70b9\u4e92\u4e0d\u76f8\u90bb\u7684\u9650\u5236\u3002

\u56e0\u6b64\uff0c\u201c\u63d2\u5165\u201d\u64cd\u4f5c\u7684\u4e3b\u8981\u601d\u8def\u5c31\u662f\uff0c\u5148\u5c06\u6574\u4e2a\u7ea2\u9ed1\u6811\u5f53\u4f5c\u4e00\u4e2a\u666e\u901a\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5c06\u76ee\u6807\u6570\u636e\u63d2\u5165\u5230\u6811\u7684\u672b\u7aef\uff08\u4e5f\u5c31\u662f\u7f6e\u6362\u4e00\u4e2a NIL \u8282\u70b9\uff09\uff0c\u5e76\u5c06\u5b83\u67d3\u4e3a\u7ea2\u8272\uff0c\u518d\u8c03\u6574\u4f7f\u4e4b\u5728\u4fdd\u8bc1\u9ed1\u9ad8\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u6ee1\u8db3\u7ea2\u8272\u8282\u70b9\u4e0d\u80fd\u76f8\u90bb\u7684\u8981\u6c42\u3002

\u73b0\u5728\uff0c\u6211\u4eec\u8bb0\u8fd9\u4e2a\u88ab\u63d2\u5165\u7684\u8282\u70b9\u4e3a x\uff0c\u4efb\u610f\u4e00\u4e2a\u8282\u70b9 node \u7684\u5bb6\u957f\u8282\u70b9\u4e3a node.p\uff0c\u5219\uff1a

  1. \u5982\u679c x.p \u662f\u9ed1\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4e0d\u9700\u8981\u505a\u4efb\u4f55\u8c03\u6574\uff1b
  2. \u5982\u679c x.p \u662f\u7ea2\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u8fdb\u884c\u8c03\u6574\uff1b
    • \u6b64\u65f6\u56e0\u4e3a\u539f\u6765\u7684\u6811\u7b26\u5408\u7ea2\u9ed1\u6027\u8d28\uff0cx.p.p \u5fc5\u5b9a\u5b58\u5728\uff08\u7ea2 x.p \u4e0d\u80fd\u662f\u6839\uff09\u4e14\u5fc5\u5b9a\u662f\u9ed1\u8272\u7684\uff1b

\u6839\u636e\u8fd9\u4e9b\u8ba8\u8bba\uff0c\u6211\u4eec\u5c31\u80fd\u5217\u4e3e\u51fa\u6765\u4e00\u4e2a\u7ea2\u8272\u7684\u70b9\u88ab\u63d2\u5165\u540e\uff0c\u5728 2. \u7684\u60c5\u51b5\u4e0b\u6240\u6709\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u5373\u4e0b\u9762\u7b2c\u4e00\u5f20\u56fe\u3002

\u7531\u4e8e\u7ea2\u9ed1\u6811\u7684\u64cd\u4f5c\u4e2d\uff0c\u6709\u4e00\u90e8\u5206\u9700\u8981\u8fdb\u884c\u9012\u5f52\u8f6c\u79fb\uff0c\u800c\u5176\u4e2d\u4e2d\u95f4\u6b65\u9aa4\u51fa\u73b0\u4e86\u5f88\u591a\u540c\u6784\u7684\u7ed3\u6784\uff0c\u6240\u4ee5\u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\uff0c\u6211\u4eec\u5bf9\u5176\u8fdb\u884c\u7edf\u4e00\uff0c\u6240\u6709\u60c5\u51b5\u90fd\u88ab\u5f52\u7eb3\u4e3a\u4e0a\u9762\u7b2c\u4e8c\u5f20\u56fe\u3002

\u800c\u7b2c\u4e8c\u5f20\u56fe\u4e2d\u63d0\u5230\u7684\u6a59\u8272\u7ed3\u70b9\uff0c\u4e5f\u5c31\u662f\u6807\u4e3a\u201c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u201d\u7684\u7ed3\u70b9\uff0c\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u4e00\u5b9a\u6307\u7684\u662f\u88ab\u300c\u63d2\u5165\u300d\u7684\u90a3\u4e2a\u70b9\uff0c\u4e5f\u53ef\u80fd\u662f\u5728 case 1 \u5411\u4e0a\u9012\u5f52\u65f6\uff0c\u7b80\u5316\u7684\u539f\u6765\u90a3\u9897\u5b50\u6811\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684\u201c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u53ca\u5176\u5b50\u6811\u201d\uff0c\u5b9e\u9645\u4e0a\u53ef\u80fd\u662f\u6307\u300c\u5bfc\u81f4\u7ea2\u9ed1\u6027\u8d28\u88ab\u7834\u574f\u7684\u7ea2\u6839\u5b50\u6811\u300d\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u8ba8\u8bba\u5404\u79cd\u60c5\u51b5\u8981\u600e\u4e48\u5904\u7406\u3002

\u8bf4\u660e

\u8fd9\u91cc case 1 ~ case 3 \u7684\u7f16\u53f7\u4e3b\u8981\u662f\u4e3a\u4e86\u548c\u8bfe\u7a0b ppt \u5bf9\u6807\uff0c\u4f46\u662f\u63a5\u4e0b\u6765\u4f60\u4f1a\u53d1\u73b0\u6211\u662f\u6309\u7167 case 3 -> case 1 \u6765\u4ecb\u7ecd\u64cd\u4f5c\u7684\uff0c\u8fd9\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u8fd9\u6837\u5b89\u6392\u66f4\u5408\u7406\uff0c\u800c\u975e\u6392\u7248\u6df7\u4e71\u3002

Insertion / case 3

\u5bf9\u4e8e case 3\uff0c \u6211\u4eec\u9ad8\u5174\u5730\u53d1\u73b0\uff0c\u8fd9\u6837\u7684\u4e00\u6b21\u67d3\u8272\u548c\u4e00\u6b21\u65cb\u8f6c\u521a\u597d\u80fd\u8ba9\u8fd9\u68f5\u5b50\u6811\u5b8c\u6210\u8c03\u6574\uff01

Insertion / case 2

\u5bf9\u4e8e case 2\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u4e00\u4e2a Rotation \u64cd\u4f5c\u5c06\u5b83\u8f6c\u5316\u4e3a case 3\u3002

\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u7ec6\u5fc3\u7684\u5c0f\u670b\u53cb\u5df2\u7ecf\u53d1\u73b0\u4e86\uff0c\u4ece case 2 -> case 3 -> done \u7684\u8fc7\u7a0b \u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a LR Rotation\uff01

Insertion / case 1

\u5bf9\u4e8e case 1\uff0c\u56fe\u4e2d\u7684\u4e24\u79cd\u60c5\u51b5\u662f\u7b49\u4ef7\u7684\u3002\u6240\u4ee5\u6211\u4eec\u53ea\u5c55\u793a\u5176\u4e2d\u4e00\u79cd\u3002

\u6211\u4eec\u53ea\u9700\u8981\u5c06\u56fe\u4e2d\u7684\u6839\u8282\u70b9\u67d3\u7ea2\uff0c\u5c06\u6839\u7684\u4e24\u4e2a\u5b50\u8282\u70b9\u67d3\u9ed1\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u9ed1\u8282\u70b9\u201c\u4e0b\u653e\u201d\u3002

\u901a\u8fc7\u7b2c\u4e00\u6b65\u64cd\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u8fd9\u6574\u4e2a\u5b50\u6811\u5fc5\u5b9a\u5e73\u8861\u3001\u4e0d\u5f71\u54cd\u5bb6\u957f\u8282\u70b9\u7684\u9ed1\u9ad8\uff08\u9664\u4e86\u5bb6\u957f\u662f\u6839\u7684\u60c5\u51b5\uff09\u4e14\u7ea2\u70b9\u4e0d\u90bb\u7684\u3002

\u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6839\u7684\u5bb6\u957f\u8282\u70b9\u662f\u5426\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u56e0\u6b64\u505a\u5206\u7c7b\u8ba8\u8bba\u3002\u5018\u82e5\u5176\u6839\u7684\u5bb6\u957f\u8282\u70b9\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u8fd8\u9700\u8981\u5411\u4e0a\u9012\u5f52\uff0c\u7ee7\u7eed\u8c03\u6574\uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8f6c\u5316\u4e3a\u5176\u4ed6 case\uff1b\u82e5\u8fd9\u5b50\u6811\u7684\u6839\u6ca1\u6709\u5bb6\u957f\u8282\u70b9\uff0c\u5219\u76f4\u63a5\u67d3\u9ed1\u7ea2\u6839\u5373\u53ef\uff1b\u800c\u5018\u82e5\u5b50\u6811\u6839\u8282\u70b9\u7684\u5bb6\u957f\u8282\u70b9\u662f\u9ed1\u8282\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u8c03\u6574\u5b8c\u6bd5\u4e86\u3002

\u5728\u8fd9\u4e09\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u53ea\u6709 case 1 \u7684\u8f6c\u5316\u4f1a\u5bfc\u81f4\u6211\u4eec\u9012\u5f52\u5411\u4e0a\uff0c\u800c case 2 \u5411 case 3 \u7684\u8f6c\u5316\u5e76\u4e0d\u4f1a\u5bfc\u81f4\u6211\u4eec\u6539\u53d8\u5173\u6ce8\u7684\u5b50\u6811\u7684\u8303\u56f4\u3002

\u4e3a\u4e86\u66f4\u6e05\u6670\u5730\u770b\u51fa\u5404\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u753b\u4e00\u4e2a\u72b6\u6001\u673a\uff1a

graph LR;\nA[\"case 1\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD([\"finish\"])\n\nA ===>|\"C\"| B --->|\"R\"| C\nA ===>|\"C\"| A --->|\"C\"| D\nA ===>|\"C\"| C --->|\"C&R\"| D

\u6ce8\u610f\uff0c\u72b6\u6001\u673a\u4e2d\u7684\u7c97\u7ebf\u8868\u793a\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u201c\u5b50\u6811\u201d\u5411\u4e0a\u6500\u5347\u4e86\u4e00\u7ea7\uff1b\u800c\u7ec6\u7ebf\u8868\u793a\u6211\u4eec\u5173\u6ce8\u7684\u5b50\u6811\u4ecd\u7136\u662f\u8fd9\u4e00\u5c42\u7684\u90a3\u4e00\u68f5\u3002\u4ee5\u53ca\uff0cC \u8868\u793a\u67d3\u8272\u64cd\u4f5c\uff0cR \u8868\u793a\u65cb\u8f6c\u64cd\u4f5c\u3002

\u5176\u4e2d\uff0c\u4efb\u4f55\u4e00\u4e2a\u60c5\u51b5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u60c5\u51b5\u3002\u6240\u4ee5\u53ef\u4ee5\u6570\u51fa\uff0c\u5230\u8fbe finish \u7684\u8def\u5f84\u4e2d\uff0c\u6700\u591a\u51fa\u73b0 2 \u6b21 Rotation\uff08case 2 -> case 3 -> finish\uff09\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u5220\u9664","title":"\u5220\u9664","text":"

\u5173\u4e8e\u5220\u9664\u64cd\u4f5c\uff0c\u4e0b\u9762\u8fd9\u4e2a\u89c6\u9891\u8bb2\u7684\u5f88\u6e05\u6670\uff01\u53ea\u4e0d\u8fc7 case 1 \u53ef\u80fd\u8fd8\u6709\u4e9b\u7ec6\u8282\u9700\u8981\u6ce8\u610f\u3002

\ud83d\udc49 \u7ea2\u9ed1\u6811\u5feb\u901f\u5165\u95e8 - 04\u5220\u9664

\u8981\u5220\u9664\u67d0\u4e2a\u8282\u70b9 x\uff0c\u6211\u4eec\u9996\u5148\u8981\u627e\u5230\u5b83\uff0c\u5728 BST \u4e2d\u627e\u5230\u67d0\u4e2a x \u7684\u5f00\u9500\u4e3a \\(O(\\log N)\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u8981\u5220\u9664\u8fd9\u4e2a\u4efb\u610f\u4f4d\u7f6e\u7684\u8282\u70b9\uff0c\u8fd9\u52bf\u5fc5\u8ba9\u7ea2\u9ed1\u6811\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\u3002\u6b64\u5916\uff0c\u7ea2\u9ed1\u6027\u8d28\u7684\u7ef4\u62a4\u4e5f\u662f\u4e00\u4e2a\u8ba9\u4eba\u5934\u75bc\u7684\u95ee\u9898\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u5bf9\u8fd9\u4e9b\u60c5\u51b5\u505a\u5206\u7c7b\u8ba8\u8bba\uff1a

\u6ca1\u6709\u975eNIL\u5b50\u8282\u70b9 \u6709\u4e00\u4e2a\u975eNIL\u5b50\u8282\u70b9 \u6709\u4e24\u4e2a\u975eNIL\u5b50\u8282\u70b9 \u76f4\u63a5\u7528NIL\u66ff\u4ee3 \u76f4\u63a5\u5220\u9664\uff0c\u7528\u5b50\u8282\u70b9\u66ff\u4ee3\u5b83 \u5c06\u503c\u4e0e\u5de6\u5b50\u6811\u6700\u5927\u503c\u6216\u53f3\u5b50\u6811\u6700\u5c0f\u503c\u4ea4\u6362\uff0c\u989c\u8272\u4e0d\u6362\uff0c\u7136\u540e\u5220\u9664\u76ee\u6807\u70b9

\u5176\u4e2d\uff0c\u6bcf\u4e00\u9879\u64cd\u4f5c\u90fd\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u70b9\u7684\u6d88\u5931\uff08\u6bd5\u7adf\u662f\u5220\u9664\uff09\uff0c\u800c\u5982\u679c\u6d88\u5931\u7684\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u5c06\u4e0d\u4f1a\u5f71\u54cd\u9ed1\u9ad8\uff1b\u800c\u5982\u679c\u6d88\u5931\u7684\u662f\u9ed1\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u5c06\u4f1a\u5bfc\u81f4\u9ed1\u9ad8\u51cf\u5c11\u4e00\uff0c\u6b64\u65f6\u6211\u4eec\u9700\u8981\u505a\u8fdb\u4e00\u6b65\u64cd\u4f5c\u3002

\u8bf4\u660e

\u867d\u7136\u6211\u60f3\u5c3d\u53ef\u80fd\u62df\u5408 cy \u7684 ppt\uff0c\u4f46\u662f\u6211\u7b2c\u4e00\u904d\u5b9e\u5728\u6ca1\u770b\u61c2\uff0c\u6240\u4ee5 case \u7684\u7f16\u53f7\u6211\u5c31\u6309\u7167\u4e0a\u9762\u90a3\u4e2a\u89c6\u9891\u6765\u4e86\u3002

\u8fd9\u662f case \u5e8f\u53f7\u7684\u5bf9\u5e94\u5173\u7cfb\uff1a

my cy's my cy's case 1 case 2 case 2 case 4 case 3 case 3 case 4 case 1

\u6211\u4eec\u6839\u636e\u60c5\u51b5\uff0c\u5c06\u60c5\u51b5\u5206\u4e3a\u56db\u79cd\uff1a

\u9700\u8981\u505a\u4e00\u4e0b\u7b80\u5355\u8bf4\u660e\uff0c\u7c7b\u6bd4\u6211\u4eec\u5728#\u63d2\u5165\uff0c\u5728\u5220\u9664\u8fc7\u7a0b\u4e2d\u4e5f\u5b58\u5728\u9700\u8981\u5411\u4e0a\u9012\u5f52\u7684\u60c5\u51b5\u3002\u4e0e\u300c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u300d\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u8fd9\u91cc\u7684\u300c\u9700\u8981\u88ab\u5220\u9664\u7684\u76ee\u6807\u70b9\u300d\uff0c\u4e5f\u5e94\u5f53\u88ab\u770b\u4f5c\u300c\u5bfc\u81f4\u8c03\u6574\u51fa\u73b0\u7684\u5b50\u6811\u300d\uff0c\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ef\u4ee5\u5b9a\u4e49\u6210\u300c\u7531\u4e8e\u5220\u9664\u4e86\u67d0\u4e2a\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\uff0c\u8bf7\u8bb0\u4f4f\u8fd9\u4e2a\u5b9a\u4e49\uff0c\u8fd9\u4f1a\u8ba9\u4e4b\u540e\u7684\u9012\u5f52\u64cd\u4f5c\u53d8\u5f97\u81ea\u7136\u3002

\u4f55\u65f6\u5220\u9664\u90a3\u4e2a\u7ed3\u70b9\uff1f

\u867d\u7136\u6211\u4eec\u5bf9\u300c\u9700\u8981\u88ab\u5220\u9664\u7684\u76ee\u6807\u70b9\u300d\u8fdb\u884c\u4e86\u9012\u5f52\u7684\u6269\u5c55\u5b9a\u4e49\uff0c\u4f46\u662f\u5728\u7b2c\u4e00\u5c42\u6211\u4eec\u5c31\u53ef\u4ee5\u76f4\u63a5\u5c06\u5b83\u5220\u6389\u4e86\u3002\u800c\u8fd9\u4e2a\u70b9\u88ab\u5220\u9664\u9020\u6210\u7684\u5f71\u54cd\uff0c\u5df2\u7ecf\u7531\u300c\u7531\u4e8e\u5220\u9664\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\u7ee7\u627f\u4e86\u3002

\u5728\u4e4b\u540e\u7684\u914d\u56fe\u4e2d\uff0c\u6211\u4eec\u90fd\u4e0d\u4f1a\u5c55\u793a x \u662f\u5982\u4f55\u88ab\u5220\u6389\u7684\uff0c\u800c\u662f\u5728\u7ed3\u679c\u56fe\u4e2d\u4fdd\u7559 x\u3002\u5982\u679c\u8bf4 x \u5c31\u662f\u6211\u4eec\u4e00\u5f00\u59cb\u8981\u5220\u9664\u7684\u90a3\u4e2a\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u5e94\u5f53\u5220\u6389 x\uff0c\u76f4\u63a5\u6362\u6210 NIL\uff1b\u5982\u679c x \u662f\u5728\u4f20\u9012\u8fc7\u7a0b\u4e2d\uff0c\u8868\u793a\u300c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\u7684\u6839\uff0c\u90a3\u4e48\u4e0d\u7528\u505a\u989d\u5916\u5904\u7406\u3002

\u7c7b\u4f3c\u4e8e\u6211\u4eec\u5728\u300cInsertion / case 3\u300d\u91cc\u63d0\u5230\u7684\u201c\u4e0b\u653e\u201d\u9ed1\u8282\u70b9\uff0c\u5220\u9664\u64cd\u4f5c\u7684\u601d\u8def\u57fa\u672c\u4e0a\u662f\u201c\u4e0a\u653e\u201d\u9ed1\u8282\u70b9\uff0c\u6216\u8005\u8bf4\u201c\u5438\u7eb3\u201d\u9ed1\u8282\u70b9\u3002\u8fd9\u4e2a\u201c\u5438\u7eb3\u201d\u7684\u884c\u4e3a\uff0c\u6307\u7684\u662f\u4e00\u4e2a\u9ed1\u70b9\uff0c\u539f\u6765\u53ea\u4e3a\u53f3\u5b50\u6811\u4e2d\u7684\u6240\u6709\u8def\u5f84\u63d0\u4f9b\u4e86\u9ed1\u9ad8\uff0c\u73b0\u5728\u7531\u4e8e\u5b83\u7684 sibling \u5b50\u6811\u4e2d\u5c11\u4e86\u4e00\u4e2a\u9ed1\u8272\u8282\u70b9\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u9ed1\u8272\u8282\u70b9\u8f6c\u79fb\u5230\u5b83\u4eec\u7684\u5bb6\u957f\u8282\u70b9\u8282\u70b9\uff0c\u4e8e\u662f\u8fd9\u4e2a\u8282\u70b9\u540c\u65f6\u4e3a\u5de6\u53f3\u5b50\u6811\u7684\u6240\u6709\u8def\u5f84\u90fd\u8d21\u732e\u4e86\u9ed1\u9ad8\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u9010\u4e2a\u5206\u6790\u53d8\u5316\uff1a

Deletion / case 1

\u867d\u7136\u5927\u90e8\u5206\u6559\u7a0b\u90fd\u628a case 1 \u5f53\u4f5c\u4e00\u4e2a case\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b8c\u5168\u53ef\u4ee5\u628a\u5b83\u6309\u7167 a \u8282\u70b9\u7684\u7ea2\u9ed1\uff0c\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\u3002

Deletion / case 1.1

\u5f53 a \u4e3a\u7ea2\u6839\u65f6\uff0c\u7531\u4e8e x \u8d21\u732e\u4e86\uff08\u76f8\u5bf9\u4e8e\u539f\u7ea2\u9ed1\u6811\uff09-1 \u7684\u9ed1\u9ad8\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6574\u4e2a\u5b50\u6811\u8d21\u732e\u7684\u9ed1\u9ad8\u4e0d\u53d8\uff0c\u6211\u4eec\u8003\u8651\u628a w \u7684\u9ed1\u9ad8\u201c\u4e0a\u653e\u201d\u5230 a \u4e0a\uff0c\u4e5f\u5c31\u662f\u4ece\u4e0b\u9762\u201c\u5438\u7eb3\u201d\u4e0a\u6765\u3002

Deletion / case 1.2

\u5f53 a \u4e3a\u9ed1\u6839\u65f6\uff0c\u6211\u4eec\u6ca1\u6709\u7a7a\u4f59\u7684\u4f4d\u7f6e\u6765\u201c\u5438\u7eb3\u201d w \u7684\u9ed1\u9ad8\uff0c\u4f46\u662f\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u7684\u4e0d\u5e73\u8861\u662f\u5fc5\u987b\u89e3\u51b3\u7684\uff0c\u800c\u6211\u4eec\u7edd\u4e0d\u80fd\u5bc4\u5e0c\u671b\u4e8e\u201c\u5728\u4e0d\u77e5\u9053\u6709\u6ca1\u6709\u7ea2\u8272\u8282\u70b9\u7684 b \u548c c \u7684\u5b50\u6811\u4e2d\u53bb\u5bfb\u627e\u7ea2\u8272\u8282\u70b9\u201d\u8fd9\u4e2a\u60f3\u6cd5\u3002

\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4eff\u7167\u300cInsertion / case 3\u300d\uff0c\u5c06\u6574\u4e2a\u6811\u6807\u8bb0\u4e3a\u7070\u8272\u2014\u2014\u300c\u7531\u4e8e\u5220\u9664\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\uff0c\u7136\u540e\u8fdb\u4e00\u6b65\u6839\u636e\u5176\u5bb6\u957f\u8282\u70b9\u7684\u60c5\u51b5\u9012\u5f52\u5230\u5176\u4ed6 case\u3002\u5176\u4e2d\uff0c\u5f53\u6211\u4eec\u9012\u5f52\u5230 a \u662f\u6574\u4e2a\u6811\u7684\u6839\u65f6\u53ef\u4ee5\u9000\u51fa\uff0c\u56e0\u4e3a\u8fd9\u76f8\u5f53\u4e8e\u6574\u4e2a\u6811\u7684\u9ed1\u9ad8 -1\uff0c\u4e0d\u5f71\u54cd\u7ea2\u9ed1\u6027\u8d28\u3002

Deletion / case 2

\u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

  1. \u5c06 w \u67d3\u4e3a a \u7684\u989c\u8272\uff0c\u518d\u5c06 a \u548c c \u67d3\u6210\u9ed1\u8272\uff1b
  2. \u5c06 a \u5de6\u65cb\uff0c\u4f7f w \u6210\u4e3a\u8fd9\u4e2a\u5b50\u6811\u65b0\u7684\u6839\uff0ca \u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff0cb \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff1b
  3. \u8c03\u6574\u7ed3\u675f\uff1b

Deletion / case 3

\u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

  1. \u4ea4\u6362 b \u548c w \u7684\u989c\u8272\uff1b
  2. \u5c06 w \u53f3\u65cb\uff0c\u4f7f b \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff0cw \u6210\u4e3a b \u7684\u53f3\u513f\u5b50\uff0cb \u7684\u53f3\u513f\u5b50\u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff1b
  3. \u6b64\u65f6\u60c5\u51b5\u8f6c\u5316\u4e3a case 2\uff1b

Deletion / case 4

\u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

  1. \u4ea4\u6362 a \u548c w \u7684\u989c\u8272\uff1b
  2. \u5c06 a \u5de6\u65cb\uff0c\u4f7f w \u6210\u4e3a\u8fd9\u4e2a\u5b50\u6811\u65b0\u7684\u6839\uff0ca \u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff0cb \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff1b
  3. \u6b64\u65f6\u6839\u636e\u5b50\u6811 a \u7684\u60c5\u51b5\uff0c\u8f6c\u5316\u4e3a case 1.1 / case 2 / case 3\uff1b
\u533a\u5206 case 1.1 \u548c case 1.2\u4e0d\u533a\u5206 case 1.1 \u548c case 1.2
graph LR;\nA1[\"case 1.1\"]\nA2[\"case 1.2\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD[\"case 4\"]\nE[\"finish\"]\n\nA1 --->|\"C\"| E\nA2 ===>|\"C\"| A1\nA2 ===>|\"C\"| A2\nA2 ===>|\"C\"| B\nA2 ===>|\"C\"| C\nA2 ===>|\"C\"| D\nC --->|\"C&R\"| B --->|\"C&R\"| E\nD ===>|\"C&R\"| A1\nD ===>|\"C&R\"| B\nD ===>|\"C&R\"| C
graph LR;\nA[\"case 1\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD[\"case 4\"]\nE[\"finish\"]\n\nA --->|\"C\\nfrom case 1.1\"| E\nA ===>|\"C\\nfrom case 1.2\"| A\nA ===>|\"C\\nfrom case 1.2\"| B\nA ===>|\"C\\nfrom case 1.2\"| C\nA ===>|\"C\\nfrom case 1.2\"| D\nC --->|\"C&R\"| B --->|\"C&R\"| E\nD ===>|\"C&R\\nto case 1.1 \"| A\nD ===>|\"C&R\"| B\nD ===>|\"C&R\"| C

\u6ce8\u610f\uff0c\u72b6\u6001\u673a\u4e2d\u7684\u7c97\u7ebf\u8868\u793a\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u201c\u5b50\u6811\u201d\u5411\u4e0a\u6216\u5411\u4e0b\u8f6c\u79fb\u4e86\u4e00\u7ea7\uff08\u7531 case 4 \u51fa\u53d1\u65f6\u4e0b\u964d\uff0c\u7531 case 1.2 \u51fa\u53d1\u65f6\u4e0a\u5347\uff09\uff1b\u800c\u7ec6\u7ebf\u8868\u793a\u6211\u4eec\u5173\u6ce8\u7684\u5b50\u6811\u4ecd\u7136\u662f\u8fd9\u4e00\u5c42\u7684\u90a3\u4e00\u68f5\u3002\u4ee5\u53ca\uff0cC \u8868\u793a\u67d3\u8272\u64cd\u4f5c\uff0cR \u8868\u793a\u65cb\u8f6c\u64cd\u4f5c\u3002

\u5176\u4e2d\uff0c\u4efb\u4f55\u4e00\u4e2a\u60c5\u51b5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u60c5\u51b5\u3002\u6240\u4ee5\u53ef\u4ee5\u6570\u51fa\uff0c\u5230\u8fbe finish \u7684\u8def\u5f84\u4e2d\uff0c\u6700\u591a\u51fa\u73b0 3 \u6b21 Rotation\uff08case 4 -> case 3 -> case 2 -> finish\uff09\u3002

\u6839\u636e\u524d\u9762\u72b6\u6001\u673a\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u4e0d\u96be\u5f97\u5230\u8fd9\u5f20\u8868\u683c\uff0c\u5b83\u7edf\u8ba1\u7684\u662f Rotation \u5728\u4e0d\u540c\u6570\u636e\u7ed3\u6784\u3001\u4e0d\u540c\u64cd\u4f5c\u4e2d\u51fa\u73b0\u7684\u6570\u91cf\uff1a

Option AVL Tree RB Tree Insertion \\(\\leq 2\\) \\(\\leq 2\\) Deletion \\(O(\\log N)\\) \\(\\leq 3\\)"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#b-tree","title":"B+ Tree","text":"

link

OI Wiki: https://oi-wiki.org/ds/bplus-tree/

Wiki: https://en.wikipedia.org/wiki/B%2B_tree

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u6982\u5ff5_1","title":"\u6982\u5ff5","text":"

B+ \u6811\u662f\u4e00\u79cd\u7528\u6811\u72b6\u5f62\u5f0f\u7ef4\u62a4\u6709\u5e8f\u6570\u5217\u6bd4\u8f83\u4fe1\u606f\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u589e\u6539\u64cd\u4f5c\u62e5\u76f8\u5bf9\u4e8e\u4e8c\u53c9\u6811\u7ed3\u6784\u66f4\u52a0\u7a33\u5b9a\u7684\u5bf9\u6570\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u901a\u5e38\u7528\u4e8e\u6570\u636e\u5e93\u548c\u64cd\u4f5c\u7cfb\u7edf\u7684\u6587\u4ef6\u7cfb\u7edf\u4e2d\u3002

B+ Tree

\u5982\u4e0b\u56fe\u5c31\u662f\u4e00\u9897 \\(M=4\\) \u7684 B+ \u6811\uff0c\u53ef\u4ee5\u5bf9\u7167\u7740\u8fd9\u4e2a\u4f8b\u5b50\u6765\u7406\u89e3\u6027\u8d28\u3002

\u66f4\u4e00\u822c\u5730\u6765\u8bf4\uff0cB+ \u6811\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

property of B+ Tree

@cy's PPT

  1. The root is either a leaf or has between \\(2\\) and \\(M\\) children.
  2. All nonleaf nodes (except the root) have between \\(\\lceil M/2 \\rceil\\) and M children.
  3. All leaves are at the same depth.

Assume each nonroot leaf also has between \\(\\lceil M/2 \\rceil\\) and \\(M\\) children.

\u6240\u6709\u771f\u5b9e\u7684\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u53f6\u5b50\u7ed3\u70b9\u4e2d\uff0c\u5f62\u6210\u4e00\u4e2a\u6709\u5e8f\u7684\u6570\u5217\u3002\u800c\u975e\u53f6\u5b50\u7ed3\u70b9\u4e2d\u7b2c i \u4e2a\u952e\u503c\u7b49\u4e8e\u5176\u7b2c i+1 \u68f5\u5b50\u6811\u7684\u6700\u5c0f\u503c\uff08\u5728\u4e0a\u56fe\u4e2d\u8868\u73b0\u4e3a\u989c\u8272\u76f8\u540c\u7684\u4e00\u5bf9\u4e0a\u4e0b\u7ed3\u70b9\uff09\uff0c\u56e0\u6b64\u975e\u53f6\u7ed3\u70b9\u6700\u591a\u5b58 \\(M-1\\) \u4e2a\u503c\u3002

\u53d1\u73b0

\u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u8fd9\u6837\u4e00\u4e2a\u6027\u8d28\uff1a\u5728\u5b58\u50a8\u6570\u503c\u4e0d\u91cd\u590d\u7684\u60c5\u51b5\u4e0b\uff0c\u975e\u53f6\u7ed3\u70b9\u5b58\u50a8\u7684\u952e\u503c\u90fd\u4e0d\u76f8\u540c\u3002

\u8bc1\u660e\u5f88\u7b80\u5355\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u975e\u53f6\u5b50\u7ed3\u70b9\uff0c\u5b83\u5b58\u50a8\u7684\u503c\u5fc5\u5b9a\u4e0d\u4f1a\u88ab\u5b83\u7684\u5b50\u8282\u70b9\u5b58\u50a8\uff08\u5982\u679c\u5b83\u7684\u5b50\u8282\u70b9\u4e0d\u662f\u53f6\u5b50\uff09\uff0c\u56e0\u4e3a\u5b83\u5b58\u7684\u662f\u5b83\u7684\u5b50\u8282\u70b9\u7684\u7b2c\u4e00\u4e2a\u5b50\u6811\u7684\u6700\u5c0f\u503c\uff0c\u800c\u5b83\u7684\u5b50\u8282\u70b9\u5b58\u7684\u662f\u7b2c\u4e8c\u4e2a\u5b50\u6811\u5f00\u59cb\u7684\u6700\u5c0f\u503c\u3002

\u6211\u4eec\u79f0\u8fd9\u6837\u7684\u6811\u4e3a\u4e00\u4e2a \\(M\\) \u9636(order) B+ \u6811\u3002\u5bf9\u4e8e\u5e38\u89c1\u7684 \\(M\\)\uff0c\u6bd4\u5982\u4e00\u68f5 \\(4\\) \u9636 B+ \u6811\uff0c\u6211\u4eec\u4e5f\u79f0\u4e4b\u4e3a\u4e00\u68f5 2-3-4 \u6811\uff0c\u4e00\u822c \\(M\\) \u7684\u9009\u62e9\u4e3a 3 \u6216 4\u3002

\u7279\u522b\u8bf4\u660e\uff0c\u5bf9\u4e8e B+ \u6811\uff0c\u5c06\u5b83\u7684\u53f6\u5b50\u7ed3\u70b9\u62fc\u63a5\u8d77\u6765\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u6709\u5e8f\u6570\u5217\u3002

\u62bd\u8c61\u5730\u6765\u8bf4\u5c31\u662f\uff0c\u6211\u4eec\u628a\u4e00\u4e2a\u6570\u5217\u76f8\u5bf9\u5747\u5300\u7684\u5206\u4e3a \\(m\\) \u5757\uff0c\u7136\u540e\u628a\u5206\u754c\u7684\u6570\u62ff\u51fa\u6765\u3002\u5f53\u6211\u4eec\u53bb\u67e5\u627e\u6216\u63d2\u5165\u65f6\uff0c\u53ea\u9700\u8981\u548c\u8fd9\u4e9b\u8fb9\u754c\u6570\u8fdb\u884c\u6bd4\u8f83\uff0c\u5c31\u77e5\u9053\u5b83\u5e94\u8be5\u653e\u5728\u54ea\u4e00\u5757\u91cc\u3002\u518d\u4e0d\u65ad\u7ec6\u5316\u7c92\u5ea6\uff0c\u7528\u7c7b\u4f3c\u4e8e\u201c\\(m\\) \u5206\u201d\u7684\u601d\u60f3\u6765\u627e\u5230\u76ee\u6807\u4f4d\u7f6e\u3002

\u5728\u6211\u770b\u6765\u8fd9\u4e2a\u5b9a\u4e49\u975e\u5e38\u6e05\u6670\uff0c\u5c31\u662f\u5c06\u6574\u4e2a\u5e8f\u5217\u6309\u7167\u4e0d\u540c\u7c92\u5ea6\u5212\u5206\uff0c\u7136\u540e\u7531\u5927\u5230\u5c0f\u8fdb\u884c\u903c\u8fd1\u3002

depth of B+ Tree

\u7531\u4e8e\u5b83\u5728\u7a7a\u95f4\u6700\u6d6a\u8d39\u7684\u60c5\u51b5\u4e0b\u662f\u4e00\u68f5 \\(\\lceil M/2 \\rceil\\) \u53c9\u6811\uff0c\u6240\u4ee5 B+ \u6811\u7684\u6df1\u5ea6\u662f \\(O(\\lceil \\log_{\\lceil M/2 \\rceil} N \\rceil)\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u64cd\u4f5c_1","title":"\u64cd\u4f5c","text":"

\u7531\u4e8e B+ \u6811\u7684\u6027\u8d28\u5341\u5206\u81ea\u7136\uff0c\u6240\u4ee5\u5b83\u7684\u64cd\u4f5c\u4ece\u601d\u60f3\u5c42\u9762\u4e0a\u6765\u8bf4\u4e5f\u975e\u5e38\u7b80\u5355\u3002\u5176\u66f4\u591a\u7684\u96be\u5ea6\u5728\u4e8e\u5b9e\u73b0\u4e0a\u3002

\u5173\u4e8e\u5b9e\u73b0\u7684\u5efa\u8bae

\u7531\u4e8e B+ \u6811\u5173\u4e8e\u5185\u90e8\u8282\u70b9\u548c\u53f6\u5b50\u7684\u5b9a\u4e49\u5341\u5206\u5272\u88c2\uff08\u867d\u7136\u7ea2\u9ed1\u6811\u53f6\u4e5f\u5f88\u5272\u88c2\uff0c\u4f46\u662f\u6bd5\u7adf\u7ea2\u9ed1\u6811\u7684\u53f6\u5b50\u4e0d\u9700\u8981\u4ec0\u4e48\u64cd\u4f5c\uff0c\u4f46\u662f B+ \u6811\u9700\u8981\uff09\uff0c\u6240\u4ee5\u5728\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u4f1a\u9047\u5230\u4e00\u4e9b\u9ebb\u70e6\u3002

\u6211\u4e2a\u4eba\u5efa\u8bae\uff0c\u5982\u679c\u4f60\u5341\u5206\u719f\u6089 oop\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c1d\u8bd5\u7528\u591a\u6001\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u53cd\u6b63\u6211\u5b9e\u73b0 B+ \u6811\u7684\u65f6\u5019\u5bf9 cpp \u7684 oop \u6211\u8bf4\u4e0d\u4e0a\u5341\u5206\u719f\u7ec3\uff0c\u6240\u4ee5\u6211\u76f4\u63a5\u65e0\u8111\u4f7f\u7528 struct with tag \u5b9e\u73b0\u4e86\u3002

\u800c\u5728\u5f00\u59cb\u5199\u4ee3\u7801\u4e4b\u524d\uff0c\u6211\u5f3a\u70c8\u5efa\u8bae\u5927\u5bb6\u6309\u7167\u6211\u4e0b\u9762\u505a\u56fe\u7684\u683c\u5f0f\uff0c\u6a21\u62df\u4e00\u904d\u5404\u4e2a\u64cd\u4f5c\uff01\u5e76\u5728\u6a21\u62df\u8fc7\u7a0b\u4e2d\uff0c\u89c2\u5bdf\u6570\u636e\u7684\u6d41\u52a8\u4ee5\u53ca\u8282\u70b9\u7684\u7ed3\u6784\u53d8\u5316\u3002

\u6b64\u5916\uff0c\u5728\u8ba8\u8bba\u8fd9\u4e9b\u64cd\u4f5c\u65f6\uff0c\u5148\u8ba9\u6211\u4eec\u5ffd\u7565\u5982\u4f55\u4ece\u7a7a\u5efa\u7acb\u8d77\u4e00\u4e2a B+ \u6811\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u67e5\u627e","title":"\u67e5\u627e","text":"

\u548c\u4e8c\u53c9\u6811\u7684\u67e5\u627e\u5341\u5206\u76f8\u4f3c\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u6a21\u62df\u4e00\u4e0b\u4e3e\u4e2a\u4f8b\u5b50\u3002

\u4f8b\u5982\uff0c\u6211\u4eec\u5728\u4e0a\u9762\u8fd9\u68f5\u6811\u4e2d\u627e 43 \u8fd9\u4e2a\u503c\uff0c\u6a59\u8272\u90e8\u5206\u8868\u793a\u6211\u4eec\u7684\u7126\u70b9\u3002

Find(43)

Frame 1Frame 2Frame 3

\u6211\u4eec\u53d1\u73b0\u6709 \\(21 \\leq 43 < 48\\)\uff0c\u6240\u4ee5\u987a\u7740\u6807\u8bc6\u7684\u6a59\u8272\u6307\u9488\u5411\u4e0b\u3002

\u6211\u4eec\u53d1\u73b0\u6709 \\(41 \\leq 43\\)\uff0c\u6240\u4ee5\u987a\u7740\u6807\u8bc6\u7684\u6a59\u8272\u6307\u9488\u5411\u4e0b\u3002

\u5df2\u7ecf\u8d70\u5230\u53f6\u5b50\u7ed3\u70b9\uff0c\u6700\u540e\u53d1\u73b0\u6211\u4eec\u8981\u627e\u7684 43\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u63d2\u5165_1","title":"\u63d2\u5165","text":"

\u63d2\u5165\u7684\u65b9\u6cd5\u4e5f\u76f8\u5bf9\u6734\u7d20\u7b80\u5355\uff0c\u5c31\u662f\u627e\u5230\u8be5\u63d2\u5165\u7684\u5730\u65b9\u4ee5\u540e\u63d2\u5165\u5373\u53ef\u3002

\u53ea\u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u4e00\u4ef6\u4e8b\uff0c\u5f53\u8fd9\u4e2a\u63d2\u5165\uff0c\u5bfc\u81f4\u4e86 B+ \u6811\u7684\u6027\u8d28\u4e0d\u518d\u6210\u7acb\u65f6\uff0c\u5373\u5bfc\u81f4\u5176\u5bb6\u957f\u8282\u70b9\u7684\u5b50\u8282\u70b9\u6570\u91cf\u4e3a \\(M+1\\) \u65f6\uff0c\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e2a\u7ed3\u70b9\u5e73\u5747\u5206\u88c2\u6210\u4e24\u4e2a\uff0c\u6b64\u65f6\u663e\u7136\u6709\u4e24\u4e2a\u5b50\u6811\u7684\u8282\u70b9\u6570\u91cf\u90fd\u4e0d\u5c0f\u4e8e \\(\\lceil M+1 \\rceil\\)\u3002\u4f46\u8fd9\u8fd8\u4e0d\u591f\uff0c\u5206\u88c2\u5bfc\u81f4\u5bb6\u957f\u8282\u70b9\u7684\u5bb6\u957f\u8282\u70b9\u7684\u5b50\u8282\u70b9\u53d8\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u5f97\u5411\u4e0a\u9012\u5f52\u3002

\u4f9d\u7136\u662f\u8fdb\u884c\u4e00\u4e2a\u6a21\u62df\uff0c\u6211\u4eec\u6a21\u62df\u63d2\u5165 46 \u548c 44\u3002

Insert(46), no split

Frame 1Frame 2Frame 3

\u540c\u67e5\u627e\uff0c\u7565\u3002

\u540c\u67e5\u627e\uff0c\u7565\u3002

\u627e\u5230\u8981\u585e\u7684\u4f4d\u7f6e\u4e86\uff0c\u53d1\u73b0\u8981\u585e\u7684\u5730\u65b9\u662f 45 \u7684\u540e\u9762\uff0c\u63d2\u5165\u4ee5\u540e\u53d1\u73b0\u4e00\u5171 4 \u4e2a\u6570\uff0c\u800c \\(M=4\\)\uff0c\u4e0d\u9700\u8981\u5206\u88c2\u3002

Insert(44), split

Frame 1Frame 2Frame 3Frame 4Frame 5Frame 6

\u540c\u67e5\u627e\uff0c\u7565\u3002

\u540c\u67e5\u627e\uff0c\u7565\u3002

\u627e\u5230\u8981\u585e\u7684\u4f4d\u7f6e\u4e86\uff0c\u53d1\u73b0\u8981\u585e\u7684\u5730\u65b9\u662f 45 \u7684\u524d\u9762\uff0c\u63d2\u5165\u4ee5\u540e\u53d1\u73b0\u4e00\u5171 5 \u4e2a\u6570\uff0c\u800c \\(M=4\\)\uff0c\u9700\u8981\u5206\u88c2\uff01

\u5411\u4e0a\u9012\u5f52\uff0c\u6211\u4eec\u60b2\u75db\u5730\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8282\u70b9\u5728\u5206\u88c2\u540e\u6709\u4e86 5 \u4e2a\u5b50\u8282\u70b9\uff0c\u4e0d\u5f97\u4e0d\u518d\u6b21\u5206\u88c2\u3002

\u5411\u4e0a\u9012\u5f52\uff0c\u6211\u7684\u8001\u5929\u7237\u5440\uff0c\u600e\u4e48\u8fd8\u6ca1\u5230\u5934\uff01\u8fd9\u4e0b\u6211\u4eec\u8981\u5206\u88c2\u6839\u90e8\u4e86\uff01

\u7531\u4e8e\u6839\u90e8\u88ab\u88c2\u5f00\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u6839\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6811\u7684\u5c42\u6570\u589e\u9ad8\u4e86\u3002

\u73b0\u5728\uff0c\u6211\u4eec\u7ec8\u4e8e\u5b8c\u6210\u4e86\u63d2\u5165\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/","title":"Lecture 3 | Inverted File Index","text":"

\u7ea6 1461 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \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 16 \u5206\u949f

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#leftist-heap","title":"Leftist Heap","text":"

link

OI Wiki: https://oi-wiki.org/ds/leftist-tree/

Wikipedia: https://en.wikipedia.org/wiki/Leftist_tree

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

\u5de6\u504f\u5806\uff0c\u6216\u8005\u8bf4\u5de6\u504f\u5806(Leftist Heap)\uff0c\u5b83\u76f8\u6bd4\u4e8e\u666e\u901a\u7684\u5806\uff0c\u66f4\u597d\u7684\u4e00\u70b9\u5728\u4e8e\u5b83\u652f\u6301\u5feb\u901f\u7684\u5806\u5408\u5e76\u64cd\u4f5c\u3002\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5c06\u65b0\u7684\u4e1c\u897f\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80\u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u76f8\u5bf9\u8bc1\u4e86\u8fd9\u4e2a

\u7531\u4e8e\u5de6\u504f\u5806\u4e0d\u518d\u662f\u4e00\u4e2a\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u7ef4\u62a4\u5927\u6839\u5806\u5c0f\u8ddf\u5806\u90a3\u6837\u7528\u6570\u7ec4\u6765\u7ef4\u62a4\u5b83\u4e86\u3002

\u4e00\u4e2a\u5de6\u504f\u5806\u7684\u7ed3\u70b9\u7ef4\u62a4\u4e86\u5de6\u53f3\u5b50\u5806\u7684\u5730\u5740\u3001\u81ea\u8eab\u7684\u952e\u503c\u3001\u548c\u4e00\u4e2a\u201c\u8ddd\u79bb(dist)\u201d\u3002

struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n

'dist' in leftist heap

  1. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u6216\u53f3\u5b69\u5b50\u4e3a\u7a7a\u7ed3\u70b9\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(0\\)\uff0c\u8fd9\u79cd\u7ed3\u70b9\u88ab\u79f0\u4e3a\u5916\u7ed3\u70b9\uff1b
  2. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u548c\u53f3\u5b69\u5b50\u90fd\u4e0d\u4e3a\u7a7a\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(\\min{(dist_\\text{left child}, dist_\\text{right child})} + 1\\)\uff1b

eg

\u800c\u5de6\u504f\u5806\u5c31\u5efa\u7acb\u5728\u8fd9\u4e9b\u6027\u8d28\u4e0a\uff1a

Leftist Heap

\u5de6\u504f\u5806\u662f\u7ed3\u70b9\u7684\u952e\u503c\u5e94\u5f53\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u7684\u4e8c\u53c9\u6811\uff08\u5373\u5806\u7684\u6027\u8d28\uff09\uff0c\u4e14\u6ee1\u8db3\u300c\u5de6\u504f\u300d\u6027\u8d28\u2014\u2014\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u7684 dist \u4e0d\u5c0f\u4e8e\u53f3\u5b69\u5b50\u7684 dist\u3002

\u56e0\u6b64\uff0c\u56de\u987e dist \u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6269\u5c55\u6027\u8d28\uff1a

properties

  1. \u7ed3\u70b9\u7684 dist \u7b49\u4e8e \\(dist_\\text{right child} + 1\\)\uff08\u5047\u8bbe \\(dist_\\text{NULL} = -1\\)\uff09\uff1b
  2. \u5982\u679c \\(dist_i = N\\)\uff0c\u5219\u4ee5 \\(i\\) \u4e3a\u6839\u7684\u5b50\u6811\u81f3\u5c11\u662f\u4e00\u4e2a \\(N+1\\) \u5c42\u7684\u5b8c\u7f8e\u4e8c\u53c9\u6811\uff0c\u81f3\u5c11\u6709 \\(2^{N+1}-1\\) \u4e2a\u7ed3\u70b9\uff1b

\u6ce8\u610f\uff0c\u5728\u793a\u610f\u56fe\u4e2d\u6211\u4eec\u7701\u7565\u4e86\u7ed3\u70b9\u81ea\u8eab\u952e\u503c\u7684\u6807\u8bb0\uff0c\u4f46\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u5806\uff0c\u5b83\u5c31\u9700\u8981\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373\u7ed3\u70b9\u7684\u952e\u503c\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u952e\u503c\u5f88\u53ef\u80fd\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u6570\uff0c\u5927\u5c0f\u5173\u7cfb\u53ef\u80fd\u8f6c\u5316\u4e3a\u504f\u5e8f\u5173\u7cfb\u3002

\u7b80\u5355\u601d\u8003\u4e00\u4e0b\uff0c\u4e3a\u4ec0\u4e48\u5de6\u504f\u5806\u4f1a\u8fd9\u4e48\u8bbe\u8ba1\u5462\uff1f\u5b9e\u9645\u4e0a\uff0c\u5408\u5e76\u5806\u9700\u8981\u8003\u8651\u7684\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u70b9\u5c31\u662f\u8981\u80fd\u5728\u4e4b\u540e\u7684\u64cd\u4f5c\u4e2d\u5c3d\u53ef\u80fd\u5730\u7ef4\u62a4\u5806\u7684\u201c\u5e73\u8861\u201d\uff0c\u5426\u5219\u6211\u4eec\u628a\u5806\u7ef4\u62a4\u6210\u4e86\u4e00\u4e2a\u94fe\uff0c\u90a3\u663e\u7136\u662f\u975e\u5e38\u7cdf\u7cd5\u7684\u3002

\u800c\u5de6\u504f\u5806\u901a\u8fc7\u7ef4\u62a4\u6574\u4e2a\u5806\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80 dist \u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u8bc1\u4e86\u8fd9\u4e2a\u5806\u7684\u76f8\u5bf9\u5e73\u8861\u6027\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

\u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\u5c31\u662f\u5408\u5e76\u3002\u800c\u5176\u5b83\u64cd\u4f5c\u90fd\u53ef\u4ee5\u770b\u4f5c\u662f\u5408\u5e76\u7684\u7279\u6b8a\u60c5\u51b5\u3002\u56e0\u6b64\u6211\u4eec\u9996\u5148\u8ba8\u8bba\u4efb\u610f\u4e24\u4e2a\u5de6\u504f\u5806\u7684\u5408\u5e76\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u5e76","title":"\u5408\u5e76","text":"

\u4f5c\u4e3a\u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\uff0c\u5408\u5e76\u64cd\u4f5c\u81ea\u7136\u5c31\u662f\u8981\u5728\u6ee1\u8db3\u6027\u8d28\u7684\u6761\u4ef6\u4e0b\uff0c\u5408\u5e76\u4e24\u4e2a\u5de6\u504f\u5806\u3002\u5927\u81f4\u601d\u8def\u5c31\u662f\u5148\u7ef4\u62a4\u5806\u7684\u6027\u8d28\uff0c\u5728\u56de\u6eaf\u65f6\u7ef4\u62a4\u5de6\u504f\u6027\u8d28\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5b83\u662f\u4e00\u4e2a\u5148\u81ea\u4e0a\u800c\u4e0b\u518d\u81ea\u4e0b\u800c\u4e0a\u7684\u8fc7\u7a0b\u3002

\u6309\u7167\u5b9e\u73b0\u65b9\u6cd5\uff0c\u5de6\u504f\u5806\u7684\u5408\u5e76\u53ef\u4ee5\u5206\u4e3a\u9012\u5f52\u5f0f\u548c\u8fed\u4ee3\u5f0f\u4e24\u79cd\u3002\u5176\u4e2d\u524d\u8005\u53ef\u80fd\u66f4\u4e3a\u76f4\u89c9\uff0c\u800c\u540e\u8005\u53ef\u89c6\u5316\u540e\u5219\u66f4\u4e3a\u76f4\u89c2\u3002

\u4e3a\u4e86\u65b9\u4fbf\u540e\u7eed\u7684\u4ee3\u7801\u63cf\u8ff0\uff0c\u6211\u4eec\u9996\u5148\u7ed9\u51fa\u5de6\u504f\u5806\u7ed3\u70b9\u5728\u672c\u6587\u4e2d\u7684\u5b9a\u4e49\uff1a

struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u9012\u5f52\u5f0f","title":"\u9012\u5f52\u5f0f","text":"

\u9012\u5f52\u5f0f\u5148\u6bd4\u8f83\u5f53\u524d\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u6839\u7ed3\u70b9\u7684\u952e\u503c\uff0c\u9009\u62e9\u8f83\u5c0f\uff08\u8f83\u5927\uff09\u7684\u90a3\u4e2a\u4f5c\u4e3a\u6839\u7ed3\u70b9\uff0c\u5176\u5de6\u5b50\u6811\u4f9d\u7136\u4e3a\u5de6\u5b50\u6811\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u53f3\u5b50\u6811\u548c\u53e6\u4e00\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

\u5f53\u7136\uff0c\u5728\u9012\u5f52\u5730\u66f4\u65b0\u5b8c\u540e\uff0c\u6211\u4eec\u9700\u8981\u68c0\u67e5\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u662f\u5426\u6ee1\u8db3 \\(dist_\\text{left child} \\geq dist_\\text{right child}\\) \u7684\u6027\u8d28\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\uff0c\u6211\u4eec\u5219\u9700\u8981\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u6765\u7ef4\u6301\u6027\u8d28\u3002

LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// Recursive exit. If any is NULL, return the other as the new root of subtree.\nif (x == NULL) return y;\nif (y == NULL) return x;\n\n// If `x`'s val is smaller than `y`'s, swap them, which means we always operates on `x`.\nif (x->val > y->val) {\nswap(x, y);\n}\n\n// Merge `x`'s right subtree and `y`, and set `x`'s right subtree to the result.\nx->rs = merge(x->rs, y);\n\n// If `x`'s left subtree's dist is smaller than `x`'s right subtree's dist, swap them.\nif (x->ls->dist == NULL || x->ls->dist < x->rs->dist) {\nswap(x->ls, x->rs);\n}\n\n// Update x's dist.\nx->dist = x->rs->dist + 1;\n\n// Return x as the new root of subtree.\nreturn x;\n}\n

\ud83c\udf30

\u73b0\u5728\u6211\u4eec\u6a21\u62df\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u73b0\u5728\u6211\u4eec\u6709\u4e0b\u9762\u4e24\u4e2a\u5de6\u504f\u5806\uff0c\u5c1d\u8bd5\u5408\u5e76\u5b83\u4eec\u3002

Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

\u6211\u4eec\u53d1\u73b0\uff0c\u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u7eff\u6811\u53f3\u5b50\u6811\u548c\u84dd\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

\u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u84dd\u6811\u53f3\u5b50\u6811\u548c\u7eff\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

\u6700\u540e\u8fd8\u5269\u4e0b\u4e24\u4e2a\u7ed3\u70b9\u5566\uff01\u5b9e\u9645\u4e0a\u8fd9\u91cc\u76f4\u63a5\u6a21\u62df\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff0c\u9996\u5148\u662f\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u5e76\u9009\u62e9\u4e86 \u277a \u4f5c\u4e3a\u65b0\u6839\uff1b\u63a5\u4e0b\u6765\u5728\u9012\u5f52\u7684\u8fc7\u7a0b\u4e2d\u53d1\u73b0\u9700\u8981\u5408\u5e76 NULL \u548c \u277b\uff0c\u6240\u4ee5\u76f4\u63a5\u8fd4\u56de\u4e86 \u277b\u3002

\u7136\u800c\u8fd8\u6ca1\u6709\u7ed3\u675f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5904\u7406\u5de6\u53f3\u5b50\u6811 dist \u5927\u5c0f\u5173\u7cfb\u95ee\u9898\u3002

\u6211\u4eec\u53d1\u73b0 \u277a \u7684\u5de6\u5b69\u5b50\u4e3a NULL\uff0c\u6211\u4eec\u8bb0 \\(dist_\\text{NULL} = -1\\)\uff0c\u53f3\u5b69\u5b50 \u277b \u6709 \\(dist_\\text{right child}=0\\)\uff0c\u6240\u4ee5\u9700\u8981\u4ea4\u6362\u4e24\u4e2a\u5b69\u5b50\u3002

\u8fd9\u91cc\u4e5f\u8df3\u8fc7\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff1a

\u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u277a \u7684 dist \u5c0f\u4e8e \u2779 \u7684 dist\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e0d\u9700\u8981\u6539\u53d8\u3002

\u7ee7\u7eed\u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u2777 \u548c \u2778 \u7684 dist \u76f8\u540c\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e5f\u4e0d\u9700\u8981\u6539\u53d8\u3002

\u4ece\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u770b\u51fa\u6765\uff0c\u5e76\u4e0d\u662f\u770b\u4e0a\u53bb\u66f4\u5927\u7684\u5b50\u6811\u4e00\u5b9a\u5728\u5de6\u4fa7\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u8fed\u4ee3\u5f0f","title":"\u8fed\u4ee3\u5f0f","text":"

\u8fed\u4ee3\u5f0f\u662f\u6839\u636e\u5b83\u7684\u5b9e\u73b0\u65b9\u6cd5\u6765\u547d\u540d\u7684\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fed\u4ee3\u5f0f\u53ef\u80fd\u66f4\u6709\u610f\u601d\u3002\u4e8b\u5b9e\u4e0a\u5728\u5f88\u591a\u9898\u76ee\u4e2d\u6211\u89c9\u5f97\u8fd9\u4e2a\u65b9\u6cd5\u505a\u9898\u66f4\u52a0\u65b9\u4fbf\u3002

\u8fed\u4ee3\u5f0f\u7ef4\u62a4\u4e24\u4e2a\u989d\u5916\u7684\u6307\u9488\uff0c\u5206\u522b\u6307\u5411\u4e24\u68f5\u6811\u8fd8\u6ca1\u88ab\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u5e76\u4e0d\u65ad\u9009\u62e9\u8f83\u5c0f\u7684\u90a3\u4e2a\u5408\u5e76\u8fdb\u53bb\uff0c\u76f4\u5230\u4e24\u4e2a\u6307\u9488\u90fd\u4e3a\u7a7a\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u548c\u5f52\u5e76\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\u975e\u5e38\u76f8\u4f3c\uff0c\u5b9e\u9645\u4e0a\u5f53\u6211\u4eec\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u53bb\u770b\u8fd9\u4ef6\u4e8b\u4ee5\u540e\uff0c\u4f1a\u53d1\u73b0\u8fd9\u91cc\u505a\u7684\u5c31\u662f\u4e00\u4e2a\u5f52\u5e76\u3002

LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// `tx` & `ty` are the pointers to the roots of the subtrees that haven't been merged.\nLeftistHeapNode * tx = x, * ty = y;\n// `res` is the root of the merged final tree, while `cur` is the latest node that has been merged.\nLeftistHeapNode * res = NULL, * cur = NULL;\n\n// Begin merging.\nwhie (tx != NULL && ty != NULL) {\n// If `tx`'s val is smaller than `ty`'s, swap them, which means we always operates on `tx`.\nif (tx->val > ty->val) {\nswap(tx, ty);\n}\n\n// Specially mark the root on the first merge.\nif (res == NULL) {\nres = tx;\ncur = tx;\n} else {\ncur->rs = tx;\ncur = cur->rs;\n}\n\n// Go on.\ntx = tx->rs;\n}\n\n// Merge the rest of the tree.\nwhile (ty != NULL) {\n// Specially mark the root on the first merge. (rarely happens but not impossible)\nif (res == NULL) {\nres = ty;\ncur = ty;\n} else {\ncur->rs = ty;\ncur = cur->rs;\n}\n\n// Go on.\nty = ty->rs;\n}\n\n// Adjust the left and right subtrees of all the nodes according to the properties of `dist`. \n// It does the same work as the adjust part in the recursive version. I ignore it here.\nres = adjust(res);\n\nreturn res;\n}\n

\u4f9d\u65e7\u662f\u4ee5\u4e0a\u9762\u8fdb\u884c\u6a21\u62df\u7684\u90a3\u4e2a\u5408\u5e76\u4e3a \ud83c\udf30 \u8fdb\u884c\u6a21\u62df\u3002

\ud83c\udf30

\u9996\u5148\uff0c\u6211\u4eec\u5bf9\u56fe\u7247\u7684\u6392\u7248\u7a0d\u5fae\u505a\u4e00\u4e9b\u6539\u53d8\uff0c\u6211\u4eec\u4e0d\u518d\u6309\u7167\u4e4b\u524d\u753b\u5806\u7684\u65b9\u5f0f\u53bb\u753b\uff0c\u800c\u662f\u201c\u5de6\u504f\u201d\u5730\u53bb\u753b\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u8c03\u6574\u4e4b\u524d

Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

\u7eff\u8272\u548c\u84dd\u8272\u7684\u7bad\u5934\u5206\u522b\u8868\u793a\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u5c1a\u672a\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u7d2b\u8272\u7bad\u5934\u8868\u793a\u6700\u8fd1\u7684\u5408\u5e76\u53d1\u751f\u7684\u4f4d\u7f6e\u3002

\u6bd4\u8f83 \u2776 \u548c \u2777\uff0c\u53d1\u73b0 \u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277a\u3002

\u548c\u4e0a\u4e00\u6b65\u7c7b\u4f3c\u7684\uff0c\u6bd4\u8f83 \u277a \u548c \u2777\uff0c\u53d1\u73b0 \u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u84dd\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277b\u3002

\u4f9d\u7136\u7c7b\u4f3c\u5730\uff0c\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u53d1\u73b0 \u277a \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u277a \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411 NULL\u3002

\u8fd9\u65f6\u5019\u6211\u4eec\u53d1\u73b0\u5df2\u7ecf\u6709\u4e00\u4e2a\u6307\u9488\u7a7a\u4e86\uff0c\u4e5f\u5c31\u662f\u7eff\u8272\u6307\u9488\u5df2\u7ecf\u6307\u5411\u4e86 NULL\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u6309\u987a\u5e8f\u628a\u84dd\u8272\u6307\u9488\u6307\u5411\u7684\u5185\u5bb9\u90fd\u63a8\u8fdb\u53bb\u5373\u53ef\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u8fd8\u9700\u8981\u7ef4\u62a4 dist \u4fe1\u606f\u5e76\u6839\u636e\u6027\u8d28\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002\u8fd9\u4e00\u90e8\u5206\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

\ud83c\udf30/\ud83d\udd25

\u5f53\u7136\uff0c\u8fd9\u4e48\u6765\u770b\u53ef\u80fd\u8fd8\u662f\u5f88\u4e71\uff0c\u8054\u60f3\u6211\u4eec\u4e4b\u524d\u53d1\u73b0\u5b83\u548c\u5f52\u5e76\u6392\u5e8f\u5f88\u50cf\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u7528\u4e00\u4e2a\u66f4\u52a0\u76f4\u89c2\u7684\u65b9\u5f0f\u6765\u770b\u8fd9\u4e2a\u8fc7\u7a0b\uff1a

Frame 0Frame 1Frame 2

\u540c\u6837\u4ece\u8fd9\u5f20\u56fe\u5f00\u59cb\uff0c\u7531\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u5b83\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9012\u5f52\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u6307\u5408\u5e76\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\u7684\u8fc7\u7a0b\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e24\u4e2a\u5de6\u504f\u5806\u6539\u5199\u6210\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\uff01

\u7531\u4e8e\u6211\u4eec\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u603b\u662f\u627e\u53f3\u5b69\u5b50\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u6cbf\u7740\u6700\u53f3\u6cbf\u8def\u5f84\u628a\u6ca1\u4e2a\u5de6\u504f\u5806\u62c6\u6210\u8fd9\u79cd\u201c\u60ac\u540a\u201d\u7684\u5e26\u72b6\u5f62\u5f0f\uff0c\u6bcf\u4e00\u201c\u6761\u201d\u7684\u503c\u53d6\u51b3\u4e8e\u6839\u7684\u952e\u503c\uff0c\u4e5f\u5c31\u662f\u8fd9\u4e00\u201c\u6761\u201d\u7684\u6700\u9876\u90e8\u3002

\u5728\u8fd9\u5f20\u56fe\u4e2d\uff0c\u6211\u4eec\u5f97\u5230\u7684\u4e24\u4e2a\u6709\u5e8f\u6570\u7ec4\u5206\u522b\u662f [1, 5] \u548c [2, 6]\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u4eec\u8fdb\u884c\u6392\u5e8f\u3002

\u7ecf\u8fc7\u6392\u5e8f\uff0c\u5c31\u4f1a\u53d1\u73b0\u5b83\u4eec\u521a\u597d\u7b26\u5408\u6211\u4eec\u5728\u4e0a\u9762\u6b65\u9aa4\u5f97\u5230\u7684\u7ed3\u679c\uff08\u53ef\u4ee5\u5bf9\u6bd4\u7740\u4e0a\u9762\u7684 Frame 4 \u770b\uff09\u3002\u5b9e\u9645\u4e0a\uff0c\u53ea\u8981\u4f60\u56de\u987e\u4e00\u4e0b\u5f52\u5e76\u6392\u5e8f\u7684\u8fc7\u7a0b\uff0c\u518d\u5bf9\u6bd4\u7740\u770b\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5c31\u4f1a\u53d1\u73b0\u4e00\u6a21\u4e00\u6837\u3002

\u518d\u6b21\u63d0\u9192\uff0c\u8fd9\u4e00\u5c0f\u8282\u8bb2\u7684\u90e8\u5206\u90fd\u5ffd\u7565\u4e86\u4e4b\u540e\u8c03\u6574\u5b50\u6811\u5de6\u504f\u6027\u8d28\u7684\u8fc7\u7a0b\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u5c31\u5355\u7eaf\u662f\u4e00\u4e2a\u7ef4\u62a4\u5806\u6027\u8d28\u7684\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

\u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u5220\u9664","title":"\u5355\u70b9\u5220\u9664","text":"

\u8ba9\u6211\u4eec\u4e00\u822c\u6027\u5730\u8003\u8651\u4e00\u4e2a\u7ed3\u70b9\uff0c\u4e0e\u5b83\u76f8\u5173\u7684\u4e3b\u8981\u6709\u4e09\u4e2a\u65b9\u5411\uff1a\u7236\u7ed3\u70b9\u548c\u4e24\u4e2a\u5b69\u5b50\u7ed3\u70b9\u3002

\u800c\u5355\u70b9\u5220\u9664\u7684\u64cd\u4f5c\u4e5f\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5408\u5e76\u9700\u8981\u88ab\u5220\u9664\u7684\u7ed3\u70b9\u7684\u4e24\u4e2a\u5b50\u7ed3\u70b9\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u65b0\u7684\u6811\u7684\u6839\u4ee3\u66ff\u88ab\u5220\u9664\u7684\u7ed3\u70b9\uff0c\u518d\u5728\u56de\u6eaf\u7684\u8fc7\u7a0b\u4e2d bottom-up \u5730\u66f4\u65b0 dist \u5373\u53ef\u3002

LeftistHeapNode * del(LeftistHeapNode * cur, ElementType x) {\nif (cur->val == x) {\n// Just return the merge of the children.\nreturn merge(cur->l, cur->r);\n} else {\n// Not this subtree.\nif (cur->val > x) return cur;\n\n// Otherwise, search the `x`.\nif (cur->l != NULL) del(cur->l, x);\nif (cur->r != NULL) del(cur->r, x);\n\n// Adjust the dist bottom-up.\nadjust(cur);\n}\n}\n
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#skew-heap","title":"Skew Heap","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Skew_heap

\u659c\u5806(Skew Hea)\u662f\u6bd4\u5de6\u504f\u5806\u66f4\u4e3a\u4e00\u822c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u540c\u6837\u6709\u7740\u80fd\u591f\u5feb\u901f\u5408\u5e76\u7684\u6027\u8d28\u3002

\u5934\u8111\u98ce\u66b4

\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u5de6\u504f\u5806\uff0c\u7531\u4e8e\u9700\u8981\u81ea\u4e0b\u800c\u4e0a\u5730\u7ef4\u62a4 dist\uff0c\u6240\u4ee5\u6211\u4eec\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\u3002\u56de\u987e AVL \u6811\uff0c\u540c\u6837\u4e3a\u4e86\u7ef4\u62a4\u5b83\u6bd4\u8f83\u4e25\u683c\u7684\u5e73\u8861\u6027\u8d28\uff0c\u6211\u4eec\u4e5f\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\uff0c\u800c\u7ea2\u9ed1\u6811\u5219\u901a\u8fc7\u4e00\u4e2a\u80fd\u591f\u4ec5\u4ec5\u901a\u8fc7\u53d8\u8272\u5c31\u80fd\u8c03\u6574\u7684\u9ed1\u9ad8\u6765\u89c4\u907f\u4e86\u5fc5\u987b\u81ea\u4e0b\u800c\u4e0a\u7ef4\u62a4\u7684\u95ee\u9898\uff0c\u5b9e\u73b0\u4e86\u5e76\u53d1\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u60f3\u5c06\u5de6\u504f\u5806\u6539\u53d8\u5730\u80fd\u591f\u8fdb\u884c\u81ea\u4e0a\u800c\u4e0b\u7ef4\u62a4\uff0c\u5c31\u9700\u8981\u6539\u53d8\u751a\u81f3\u653e\u5f03\u5b83\u7684\u5de6\u504f\u6027\u8d28\u7684\u4e25\u683c\u6027\u2014\u2014\u800c\u8fd9\u5c31\u662f\u659c\u5806\u7684\u7531\u6765\u3002

\u659c\u5806\u4e5f\u9700\u8981\u6ee1\u8db3\u5927\u6839\u5806\uff08\u5c0f\u6839\u5806\uff09\u7684\u6027\u8d28\uff0c\u800c\u5b83\u7684\u5408\u5e76\u548c\u5de6\u504f\u5806\u7684\u5408\u5e76\u4e5f\u5341\u5206\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u8fd9\u6b21\u65e0\u6761\u4ef6\u7684\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u5de6\u504f\u6027\u8d28\u5982\u4f55\u53d8\u5316\uff0c\u6211\u4eec\u90fd\u4f1a\u9009\u62e9\u4ea4\u6362\u53c2\u4e0e\u5408\u5e76\u7684\u5de6\u53f3\u5b50\u6811\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5728\u56de\u6eaf\u7684\u65f6\u5019\u624d\u8fdb\u884c\u5de6\u53f3\u5b50\u6811\u7684\u4ea4\u6362\uff0c\u4e8e\u662f\u5c31\u5b9e\u73b0\u4e86\u5b8c\u5168\u7684\u81ea\u4e0a\u800c\u4e0b\u3002

\u8ba9\u6211\u4eec\u6765\u770b\u770b wiki \u91cc\u7ed9\u51fa\u7684 \ud83c\udf30\uff1a

\ud83c\udf30 from wikipedia

Frame 0Frame 1

\u8fd9\u662f\u6211\u4eec\u9700\u8981\u5408\u5e76\u7684\u4e24\u4e2a\u5806\u3002

\u7701\u7565\u4e86\u4e2d\u95f4\u7684\u6b65\u9aa4\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u6a21\u62df\u4e00\u4e0b\uff0c\u6bcf\u4e00\u6b21\u5408\u5e76\u64cd\u4f5c\u7ed3\u675f\u4e4b\u540e\u90fd\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002

\u6211\u4eec\u603b\u662f\u5148\u5f80\u53f3\u4fa7\u5b50\u6811\u9012\u5f52\u4e0b\u53bb\u5730\u5408\u5e76\uff0c\u6ca1\u5b8c\u6210\u4e00\u6b21\u5408\u5e76\u5c31\u4ea4\u6362\u8fd9\u4e2a\u5b50\u6811\u548c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\uff0c\u800c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\u5728\u8fd9\u6b21\u4ea4\u6362\u5b8c\u4ee5\u540e\u5c31\u4e0d\u4f1a\u518d\u53d1\u751f\u6539\u53d8\uff0c\u800c\u8fd9\u4e2a\u5b50\u6811\u5219\u4f1a\u7ee7\u7eed\u8fdb\u884c\u4e0b\u4e00\u6b21\u5408\u5e76\u3002

\u7701\u7565\u4e0a\u9762\u7684\u7ed8\u56fe\u663e\u7136\u662f\u6211\u61d2\u5f97\u753b\u4e86\uff0c\u76f8\u4fe1\u5927\u5bb6\u5728\u4e86\u89e3\u5de6\u504f\u5806\u7684\u5408\u5e76\u4ee5\u540e\u4e5f\u80fd\u5f88\u5feb\u611f\u53d7\u5230\u659c\u5806\u662f\u5982\u4f55\u5408\u5e76\u7684\u3002

\u5f53\u7136\uff0c\u5b83\u4e5f\u662f\u652f\u6301\u8fed\u4ee3\u7684\u5199\u6cd5\u7684\uff0c\u548c\u662f\u548c\u4e4b\u524d\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u6211\u4eec\u53ef\u4ee5\u6392\u5e8f\u6bcf\u4e00\u201c\u6761\u201d\uff0c\u7136\u540e\u518d\u5408\u5e76\u3002Wikipedia \u4e0a\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u8fc7\u7a0b\u56fe\uff0c\u4f46\u662f\u90a3\u4e2a\u8fc7\u7a0b\u56fe\u6709\u70b9\u81ea\u4e0b\u800c\u4e0a\u7684\u610f\u601d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u81ea\u4e0a\u800c\u4e0b\u505a\u4e5f\u662f\u4e00\u6837\u7684\u3002\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u53bb\u770b\u770b Wiki \u4e0a\u7684\u8fc7\u7a0b\uff1a\ud83d\udd17\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u7406\u6027\u5206\u6790","title":"\u5408\u7406\u6027\u5206\u6790","text":"

\u7136\u800c\uff0c\u968f\u4e4b\u51fa\u73b0\u7684\u4e00\u4e2a\u95ee\u9898\u4e0a\uff0c\u6211\u4eec\u7528\u4e86\u8fd9\u79cd\u770b\u8d77\u6765\u6709\u70b9\u4e0d\u7ba1\u4e09\u4e03\u4e8c\u5341\u4e00\u7684\u505a\u6cd5\uff0c\u90a3\u5b83\u7684\u6b63\u786e\u6027\u5982\u4f55\u4fdd\u8bc1\u5462\uff1f

\u9996\u5148\u8fdb\u884c\u611f\u6027\u7684\u7406\u89e3\u3002\u6211\u4eec\u6bcf\u5408\u5e76\u4e24\u4e2a\u5806\u90fd\u662f\u6cbf\u7740\u6700\u53f3\u4fa7\u8def\u5f84\u5408\u5e76\uff08\u867d\u7136\u4e2d\u95f4\u4f1a\u88ab\u4e0d\u505c\u8f6c\u5230\u5de6\u8fb9\uff09\uff0c\u5373\u6bcf\u6b21\u4f1a\u88ab\u6539\u53d8\u7684\u5b50\u6811\u5de6\u53f3\u987a\u5e8f\u7684\u8282\u70b9\u90fd\u662f\u6700\u53f3\u4fa7\u7684\u8282\u70b9\uff0c\u800c\u518d\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5982\u679c\u6bcf\u6b21\u5408\u5e76\u90fd\u5c06\u53d1\u751f\u7684\u53d8\u5316\u8f6c\u5230\u5de6\u4fa7\uff0c\u4ee5\u6b64\u6765\u51cf\u5c0f\u5408\u5e76\u64cd\u4f5c\u5e26\u6765\u7684\u9ad8\u5ea6\u201c\u7d2f\u79ef\u201d\u3002

\u8fdb\u4e00\u6b65\u89e3\u91ca

\u4ee5\u6bcf\u6b21\u53ea\u63d2\u5165\u4e00\u4e2a\u70b9\u4e3a\u4f8b\u5b50\u8bf4\u660e\u95ee\u9898\u3002

\u8fdb\u4e00\u6b65\u5bf9\u9012\u5f52\u65cb\u8f6c\u5230\u5de6\u4fa7\u505a\u89e3\u91ca\uff0c\u9012\u5f52\u6027\u5730\u8f6c\u5230\u5de6\u4fa7\uff0c\u4f7f\u5f97\u672c\u6765\u6700\u53f3\u4fa7\u7684\u8def\u5f84\u53d8\u5230\u6700\u5de6\u4fa7\uff0c\u5373\u4f7f\u4e4b\u540e\u4ea4\u6362\u4f1a\u91cd\u65b0\u8bbf\u95ee\u5230\u8fd9\u4e2a\u5b50\u6811\uff0c\u4f46\u6b64\u65f6\u9664\u4e86\u6839\uff0c\u5176\u4ed6\u90e8\u5206\u4f9d\u7136\u662f\u6700\u5de6\u4fa7\u7684\u8def\u5f84\uff0c\u4e5f\u4e0d\u4f1a\u518d\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u8fd9\u6b21\u8def\u5f84\u3002

\u7528\u56fe\u6765\u505a\u89e3\u91ca\u7684\u8bdd\uff0c\u5c31\u662f\u8fd9\u6837\uff1a

\u6211\u4eec\u53ea\u5173\u6ce8\u4e00\u5f00\u59cb\u4f5c\u4e3a\u6700\u53f3\u4fa7\u7684\u8fd9\u4e09\u4e2a\u7ea2\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e24\u6b21\u64cd\u4f5c\u540e\uff0c\u9664\u4e86\u76f4\u63a5\u4f5c\u4e3a\u6839\u7684\u5b50\u6811\u7684\u90a3\u4e2a\u8282\u70b9\u88ab\u8f6c\u4e86\u8fc7\u6765\uff0c\u5176\u4ed6\u7684\u4e4b\u540e\u7684\u8282\u70b9\u90fd\u662f\u4f5c\u4e3a\u201c\u6700\u5de6\u4fa7\u201d\u7684\u8282\u70b9\u51fa\u73b0\u7684\uff0c\u867d\u7136\u56fe\u4e2d\u53ea\u6709\u8fd9\u4e00\u4e2a\uff0c\u4f46\u662f\u5f53\u6811\u7684\u89c4\u6a21\u53d8\u5927\u540e\uff0c\u8fd9\u4e2a\u4f18\u52bf\u4f1a\u66f4\u52a0\u660e\u663e\u3002

\u6839\u636e\u8fd9\u4e2a\u7279\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u7406\u89e3\u4e0b\u9762\u8fd9\u9053\u9898\uff1a

\u9898\u9762\u7b54\u6848 & \u89e3\u91ca

The result of inserting keys \\(1\\) to \\(2^k\u22121\\) for any \\(k>4\\) in order into an initially empty skew heap is always a full binary tree. (T/F)

\u5373\u5bf9\u4e8e\u4efb\u610f\u7684 \\(k>4\\) \u7684\u60c5\u51b5\uff0c\u6309\u987a\u5e8f\u5f80\u4e00\u4e2a\u659c\u5806\u91cc\u63d2\u5165 \\(1\\sim2^k-1\\) \u8fd9\u4e9b\u6570\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u90fd\u4f1a\u662f\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\u3002\uff08\u5bf9/\u9519\uff09

\u7b54\u6848\u662f T\u3002

\u9996\u5148\uff0c\u4ece\u63d2\u5165\u7684\u5143\u7d20\u7684\u6570\u91cf\u6765\u770b\uff0c\u662f\u6ee1\u8db3\u6ee1\u4e8c\u53c9\u6811\u7684\u5fc5\u8981\u6761\u4ef6\u7684\u3002

\u800c\u6839\u636e\u6211\u4eec\u4e0a\u9762\u63cf\u8ff0\u7684\uff0c\u8df3\u8fc7\u80af\u5b9a\u6210\u7acb\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u5f52\u7eb3\uff0c\u8fc7\u7a0b\u5e76\u4e0d\u5b8c\u6574\u4e0e\u4e25\u8c28\uff0c\u4f46\u662f\u5927\u6982\u5c31\u662f\u8fd9\u4e48\u4e2a\u610f\u601d\u3002

\u5bf9\u4e8e\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\uff0c\u6211\u4eec\u73b0\u5728\u8981\u63d2\u5165\u4e00\u4e2a\u6570\uff0c\u663e\u7136\u8fd9\u4e2a\u6570\u6bd4\u6811\u91cc\u4efb\u4f55\u4e00\u4e2a\u90fd\u8981\u5927\u3002\u800c\u5f53\u8fd9\u4e2a\u6570\u88ab\u63d2\u5165\u540e\uff0c\u5b83\u6210\u4e3a\u6574\u4e2a\u5806\uff0c\u6216\u8005\u8bf4\u6574\u4e2a\u6811\u6700\u5de6\u4fa7\u7684\u4e00\u6761\u3002\u800c\u5728\u63a5\u4e0b\u6765\u7684\u4ea4\u6362\u8fc7\u7a0b\u4e2d\uff0c\u5b83\u4f1a\u4e0d\u65ad\u88ab\u7529\u6765\u7529\u53bb\uff0c\u6700\u7ec8\u7ecf\u8fc7 2^k \u6b21\u540e\u88ab\u7529\u5230\u6700\u53f3\u8fb9\uff0c\u4e5f\u5c31\u662f\u8fce\u63a5\u5b83\u7684\u7b2c\u4e00\u4e2a\u5b69\u5b50\u3002\u663e\u7136\uff0c\u5bf9\u4e8e\u8be5\u5c42\u7684\u6240\u6709\u8282\u70b9\u6765\u8bf4\u90fd\u9700\u8981 2^k \u6b21\u624d\u4f1a\u8fdb\u5165\u5230\u6700\u53f3\u4fa7\u8def\u5f84\u3002

\uff08\u8fd9\u4e2a\u8fc7\u7a0b\u53ef\u4ee5\u7c7b\u6bd4\u4e8c\u8fdb\u5236\u6570\u7684\u81ea\u589e\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u8282\u70b9\u7684\u6bcf\u4e2a\u524d\u9a71\u5206\u522b\u662f\u5de6\u5b69\u5b50\u8fd8\u662f\u53f3\u5b69\u5b50\u6765\u5206\u914d\u5bf9\u5e94\u7684\u4f4d\u5b50\u662f 0 \u8fd8\u662f 1\u3002\uff09

\u5f53\u7136\uff0c\u5982\u4e0a\u7684\u6027\u8d28\u53ea\u80fd\u5e2e\u52a9\u6211\u4eec\u611f\u6027\u7684\u7406\u89e3\u8fd9\u4e2a\u6b63\u786e\u6027\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ece\u644a\u8fd8\u5206\u6790\u7684\u89d2\u5ea6\u6765\u5206\u6790\u5176\u6b63\u786e\u6027\uff0c\u5373\u5176\u5747\u644a\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

\u8fd9\u91cc\u6211\u4eec\u91c7\u7528\u52bf\u80fd\u6cd5\u8fdb\u884c\u5206\u6790\u3002

\u5206\u6790 skew heap \u7684\u5747\u644a\u590d\u6742\u5ea6\uff0c\u4e3b\u8981\u5c31\u662f\u5206\u6790\u5408\u5e76\u64cd\u4f5c\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u5176\u4ed6\u64cd\u4f5c\u90fd\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5408\u5e76\u64cd\u4f5c\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u52bf\u80fd\u51fd\u6570\uff1a

\u52bf\u80fd\u51fd\u6570

\u6211\u4eec\u5b9a\u4e49 \\(\\Phi(Heap) = \\text{number of heavy node in } Heap\\)\u3002

\u5176\u4e2d\uff0c\u989d\u5916\u9700\u8981\u5b9a\u4e49 heavy node \u548c light node\uff1a

heavy node & light node

\u5bf9\u4e8e\u4e00\u4e2a\u5b50\u5806 \\(H\\)\uff0c\u5982\u679c \\(size(H.\\text{right\\_descendant}) \\geq \\frac{1}{2}size(H)\\)\uff0c\u5219 \\(H\\) \u662f heavy node\uff0c\u5426\u5219\u662f light node\u3002

@ cy'ppt

A node p is heavy if the number of descendants of p\u2019s right subtree is at least half of the number of descendants of p, and light otherwise. Note that the number of descendants of a node includes the node itself.

\u663e\u7136\uff0c\u5bf9\u4e8e heavy node \u548c light node\uff0c\u4ee5\u53ca\u5408\u5e76\u64cd\u4f5c\uff0c\u6709\u8fd9\u4e48\u4e00\u4e9b\u6027\u8d28\uff1a

properties

  1. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f heavy node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u4e00\u5b9a\u53d8\u4e3a\u4e00\u4e2a light node\uff1b
  2. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f light node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u53d8\u4e3a\u4e00\u4e2a heavy node\uff1b
  3. \u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8282\u70b9\u7684 heavy/light \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u5b83\u539f\u5148\u4e00\u5b9a\u5728\u5806\u7684\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\uff1b

\u5217\u51fa\u516c\u5f0f\uff1a

\\[ \\hat{c} = c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\]

\u5176\u4e2d\uff0c\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\\(H_{merged}\\) \u4e3a\u5408\u5e76\u540e\u7684\u5806\u7684\u52bf\u80fd\uff0c\\(H_x\\) \u548c \\(H_y\\) \u5206\u522b\u4e3a\u5408\u5e76\u524d\u7684\u4e24\u4e2a\u5806\u7684\u52bf\u80fd\u3002

\u6839\u636e property 3\uff0c\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5e76\u975e\u6240\u6709\u8282\u70b9\u90fd\u6536\u5230\u5f71\u54cd\u3002\u6211\u4eec\u53ef\u4ee5\u5355\u72ec\u8bb0\u5f55 \\(l_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 light node \u6570\u91cf\uff0c\\(h_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff0c\\(h^0_{x}\\) \u4e3a \\(H_x\\) \u6240\u6709\u4e0d\u5728\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff08\u5373 \\(\\text{count of heavy nodes of } H_x = H_x + H^0_x\\)\uff09\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4e0a\u5f0f\u5199\u5f00\uff1a

\\[ \\left\\{ \\begin{aligned} c &= l_x + h_x + l_y + h_y &(1)\\\\ \\Phi(H_{merged}) &\\leq l_x + h^0_x + l_y + h^0_y &(2)\\\\ \\Phi(H_x) &= h_x + h^0_{x} &(3)\\\\ \\Phi(H_y) &= h_y + h^0_{y} &(4) \\end{aligned} \\right. \\]

\u5176\u4e2d\u7a0d\u5fae\u505a\u4e00\u4e9b\u89e3\u91ca\uff1a

  1. \\((1)\\)\uff1a\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\u5373\u6211\u4eec\u7684\u679a\u4e3e\u6d89\u53ca\u4e86\u4e24\u4e2a\u5806\u6240\u6709\u7684\u53f3\u4fa7\u8def\u5f84\uff1b
  2. \\((2)\\)\uff1a\u5728\u5408\u5e76\u64cd\u4f5c\u4ee5\u540e\uff0c\u6839\u636e property 1 \u548c property 2\uff0c\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\uff1b
  3. \\((3)\\) \u548c \\((4)\\)\uff1a\u6839\u636e\u52bf\u80fd\u51fd\u6570\u7684\u5b9a\u4e49\u5f97\u5230\uff1b

\u4e8e\u662f\uff0c\u5c06\u5b83\u4eec\u4ee3\u5165\u5f97\u5230\u7ed3\u679c\uff1a

\\[ \\begin{aligned} \\hat{c} &= c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\\\ &\\leq (l_x + h_x + l_y + h_y) + (l_x + h^0_x + l_y + h^0_y) - (h_x + h^0_{x}) - (h_y + h^0_{y}) \\\\ &\\leq 2(l_x + l_y) \\\\ \\hat{c} &= O(\\log{N}) \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/","title":"Lecture 5 | Binomial Queue","text":"

\u7ea6 2196 \u4e2a\u5b57 12 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#binomial-queue","title":"Binomial Queue","text":"

\u5806\u7684\u5176\u4e2d\u4e00\u4e2a\u5e94\u7528\u5c31\u662f\u4f18\u5148\u961f\u5217\u3002\u672c\u8282\u8981\u4ecb\u7ecd\u7684\u4e8c\u9879\u961f\u5217(Binomial Queue)\u4e5f\u662f\u4f18\u5148\u961f\u5217\u7684\u4e00\u79cd\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e\u4e4b\u524d\u6211\u4eec\u7528\u4e00\u4e2a\u5806\u7ef4\u62a4\u4f18\u5148\u961f\u5217\uff0c\u4e8c\u9879\u961f\u5217\u540c\u65f6\u7ef4\u62a4\u4e86\u5177\u6709\u4e0d\u540c\u7279\u5f81\u7684\u82e5\u5e72\u961f\u5217\u3002

link

Wikipedia: https://en.wikipedia.org/wiki/Binomial_heap

YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns \uff08\u867d\u7136\u8fd9\u4e2a\u89c6\u9891\u662f\u8bb2\u89e3\u6590\u6ce2\u90a3\u5951\u5806\u7684\uff0c\u4f46\u662f\u4e2d\u95f4\u5148\u8bb2\u4e86\u4e8c\u9879\u5806\u3002\uff09

\u5b66\u4e60\u5efa\u8bae

\u5728\u6b63\u5f0f\u5f00\u59cb\u672c\u8282\u5185\u5bb9\u4e4b\u524d\uff0c\u8bf7\u5e26\u7740\u8fd9\u6837\u4e00\u4e2a\u5ff5\u5934\uff1a\u5c3d\u529b\u601d\u8003\u4e8c\u9879\u961f\u5217\u4e0e\u4e8c\u8fdb\u5236\u7684\u5173\u7cfb\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

\u4e8c\u9879\u961f\u5217(Binomial Queue)\u672c\u8d28\u4e0a\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\u3002\u6240\u4ee5\u6211\u4eec\u9996\u5148\u7ed9\u5b9a\u4e8c\u9879\u6811(Binomial Tree)\u7684\u5b9a\u4e49\uff1a

Binomial Tree

\u4e8c\u9879\u6811\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373 parent \u8282\u70b9\u7684\u503c\u5c0f\u4e8e\uff08\u5927\u4e8e\uff09 child \u8282\u70b9\u7684\u503c\u3002

\u4e00\u4e2a\u975e\u5e38\u5173\u952e\u7684\u6027\u8d28\u662f\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u90fd\u662f\u540c\u6784\u7684\uff0c\u4e14 \\(k\\) \u9636\u4e8c\u9879\u6811\u662f\u4e24\u4e2a \\(k-1\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u5f97\u5230\u7684\u3002\u800c\u5176\u5408\u5e76\u65b9\u5f0f\u662f\u76f4\u63a5\u4ee4\u5176\u4e2d\u4e00\u68f5\u6210\u4e3a\u53e6\u5916\u4e00\u68f5\u7684\u6839\u7684\u65b0 child\uff0c\u8fd9\u4e5f\u51b3\u5b9a\u4e86\u4e8c\u9879\u6811\u7684\u6839\u6bcf\u4e00\u4e2a child \u672c\u8eab\u4e5f\u90fd\u662f\u4e00\u4e2a\u4e8c\u9879\u6811\u3002

\u663e\u7136\u80fd\u591f\u5f97\u5230\uff0c\u4e8c\u9879\u6811\u5e76\u975e\u4e8c\u53c9\u6811\uff1b\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811 \\(B_k\\) \u7684\u6839\u6709 \\(k\\) \u4e2a child\uff0c\\(2^k\\) \u4e2a\u8282\u70b9\uff1b\u518d\u8fdb\u4e00\u6b65\u7684\uff0c\\(B_k\\) \u7684\u7b2c \\(d\\) \u5c42\u4e00\u5171\u6709 \\(C_k^d = \\binom{k}{d}\\) \u4e2a\u8282\u70b9\uff0c\u6709\u8da3\u7684\u662f\uff0c\u6240\u6709\u5c42\u7684\u8282\u70b9\u52a0\u8d77\u6765\u521a\u597d\u7b26\u5408\u4e8c\u9879\u5f0f\u5b9a\u7406\uff0c\u6b64\u6761\u5b9a\u7406\u53ef\u4ee5\u7531\u6570\u5b66\u5f52\u7eb3\u6cd5\u5f88\u5bb9\u6613\u5730\u8bc1\u660e\uff0c\u4e0d\u518d\u8d58\u8ff0\u3002

\u5173\u4e8e\u5b9e\u73b0

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e8c\u9879\u6811\u662f\u4e00\u4e2a \\(N\\) \u53c9\u6811\uff0c\u6240\u4ee5\u901a\u5e38\u6211\u4eec\u4f7f\u7528\u94fe\u8868 sibling \u7684\u5f62\u5f0f\u6765\u8868\u793a\u4e00\u4e2a\u8282\u70b9\u7684 children\u3002

\u518d\u5bf9\u4e8c\u9879\u6811\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u603b\u7ed3\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u7ed3\u6784\u552f\u4e00\u786e\u5b9a\uff0c\u4e24\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u540e\u5f97\u5230\u4e00\u4e2a \\(k+1\\) \u9636\u4e8c\u9879\u6811\uff0c\u800c\u4e8c\u9879\u6811\u672c\u8eab\u4e5f\u5177\u6709\u5806\u7684\u6027\u8d28\u3002

\u4f46\u662f\uff0c\u867d\u7136\u4e8c\u9879\u6811\u5177\u6709\u5806\u7684\u6027\u8d28\uff0c\u770b\u4f3c\u80fd\u72ec\u7acb\u5b8c\u6210\u4f18\u5148\u961f\u5217\u7684\u529f\u80fd\uff0c\u4f46\u662f\u4e8c\u9879\u6811\u5bf9\u70b9\u7684\u6570\u91cf\u5177\u6709\u6bd4\u8f83\u4e25\u683c\u7684\u8981\u6c42\uff0c\u53ea\u6709\u70b9\u7684\u6570\u91cf\u7b26\u5408 \\(2^k\\) \u65f6\uff0c\u624d\u80fd\u4f7f\u7528\u4e8c\u9879\u6811\u8868\u793a\u3002\u56e0\u6b64\uff0c\u89c2\u5bdf\u4e00\u4e2a\u4e8c\u9879\u6811\u80fd\u627f\u8f7d\u7684\u70b9\u7684\u6570\u91cf\u7279\u5f81\uff0c\u6211\u4eec\u8054\u60f3\u5230\u4e8c\u8fdb\u5236\u5bf9\u6570\u7684\u8868\u793a\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u7cfb\u5217\u4e8c\u9879\u6811\u6765\u7ef4\u62a4 \\(N\\) \u4e2a\u8282\u70b9\u7684\u4f18\u5148\u961f\u5217\uff0c\u800c\u5177\u4f53\u7528\u51e0\u9636\u4e8c\u9879\u6811\uff0c\u5219\u53d6\u51b3\u4e8e \\(N\\) \u7684\u4e8c\u8fdb\u5236\u8868\u8fbe\u4e2d\uff0c\u4e3a 1 \u7684\u662f\u54ea\u51e0\u4f4d\u3002

Binomial Queue

\u4e8c\u9879\u961f\u5217(Binomial Queue)\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\uff0c\u5176\u4e2d\u6bcf\u4e2a\u4e8c\u9879\u6811\u7684\u9636\u6570 \\(k\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u53cd\u8fc7\u6765\u8bb2\u8fd9\u53e5\u8bdd\uff0c\u96c6\u5408\u4e2d \\(k\\) \u9636\u7684\u4e8c\u9879\u6811\u8981\u4e48\u53ea\u6709\u4e00\u4e2a\uff0c\u8981\u4e48\u6ca1\u6709\u3002

\ud83c\udf30

\u9898\u76ee\u5b9e\u73b0\u7684\u4e8c\u9879\u961f\u5217\u4e0d\u4e00\u5b9a\u6709 min \u6307\u9488\uff01\u6ce8\u610f\u9762\u5411\u9898\u9762\u548c\u9009\u9879\u5224\u65ad\u5b9e\u73b0\u3002

\u800c\u4e3a\u4f55\u8981\u8fd9\u4e48\u8bbe\u8ba1\u4e8c\u9879\u961f\u5217\u7684\u7ed3\u6784\uff0c\u5177\u4f53\u4f53\u73b0\u5728\u64cd\u4f5c\u7684\u8bbe\u8ba1\u4e2d\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

\u5728\u4e8c\u9879\u961f\u5217\u4e2d\uff0c\u5408\u5e76\u662f\u4e00\u4e2a\u975e\u5e38\u57fa\u7840\u7684\u64cd\u4f5c\uff0c\u4e5f\u662f\u7cbe\u9ad3\u6240\u5728\u3002

\u800c\u4e3a\u4e86\u611f\u53d7\u8fd9\u4e9b\u64cd\u4f5c\u7684\u7cbe\u9ad3\uff0c\u5728\u7406\u89e3\u4e8c\u9879\u961f\u5217\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u4ee5\u8bd5\u56fe\u4ece\u4e24\u4e2a\u7eac\u5ea6\u540c\u65f6\u7406\u89e3\u8fd9\u4e9b\u64cd\u4f5c\uff1a

  1. \u6811/\u5806\u7684\u7eac\u5ea6\uff0c\u5177\u4f53\u89c2\u5bdf\u6570\u636e\u7684\u8f6c\u79fb\u4e0e\u53d8\u5316\u8fc7\u7a0b\uff1b
  2. \u4e8c\u8fdb\u5236\u7684\u7eac\u5ea6\uff0c\u5c06 \\(k\\) \u9636\u4e8c\u9879\u6811\u62bd\u8c61\u4e3a bit vector \u7b2c \\(k\\) \u4f4d\u7684 1\uff0c\u4ece\u4e8c\u8fdb\u5236\u52a0\u6cd5\u7684\u89d2\u5ea6\u7406\u89e3\uff1b

\u4e3a\u4e86\u65b9\u4fbf\u540e\u9762\u9610\u8ff0\uff0c\u6211\u4eec\u7b80\u5355\u505a\u4e00\u4e0b\u8bf4\u660e\uff1a

\u7279\u5f81\u6bd4\u7279\u5411\u91cf

\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9a\u4e49\u5b83\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\uff08\u6211\u81ea\u5df1\u53e3\u80e1\u7684\u4e1c\u897f\uff0c\u4e0d\u662f\u672f\u8bed\uff09\u662f\u5b83\u7684\u5143\u7d20\u6570\u91cf\u7684\u4e8c\u8fdb\u5236\u8868\u793a\uff08\u53cd\u8fc7\u6765\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u771f\u503c\u8868\u793a\u961f\u5217\u4e2d\u7684\u5143\u7d20\u6570\u91cf\uff09\u3002

\ud83c\udf30

\u4f8b\u5982\u4e0b\u56fe\u7684\u4f8b\u5b50\uff0c\u4e00\u5171\u6709 11 \u4e2a\u8282\u70b9\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u521a\u597d\u5bf9\u5e94 \\(B_3\\) \\(B_1\\) \\(B_0\\)\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u8c61\u5f81\u4e86\u4e8c\u9879\u961f\u5217\u7684\u96c6\u5408\u4e2d\u6709\u54ea\u51e0\u9636\u7684\u4e8c\u9879\u6811\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u5217\u5408\u5e76","title":"\u961f\u5217\u5408\u5e76","text":"

\u5408\u5e76\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5408\u5e76\u4e24\u4e2a\u96c6\u5408\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5206\u522b\u5408\u5e76\u6bcf\u4e00\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\uff0c\u5f53\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u90fd\u5b58\u5728 \\(k\\) \u9636\u4e8c\u9879\u6811\u65f6\uff0c\u5b83\u4eec\u5408\u5e76\u4e3a\u4e00\u68f5 \\(k+1\\) \u9636\u4e8c\u9879\u6811\u3002\u53ef\u4ee5\u8054\u60f3\uff0c\u8fd9\u9879\u64cd\u4f5c\u201c\u5bf9\u5e94\u201d\u7740\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u76f8\u52a0\uff0c\u800c\u5408\u5e76\u64cd\u4f5c\u5219\u7c7b\u4f3c\u4e8e\u8fdb\u4f4d\u3002

\u56e0\u6b64\uff0c\u5b83\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a 1bit \u7684\u5168\u52a0\u5668\u3002

graph LR;\nA([\"T1.B[k]\"])\nB([\"T2.B[k]\"])\nC([\"T.carry[k-1]\"])\nD([\"T.result[k]\"])\nE([\"T.carry[k]\"])\nADD[\"Adder\"]\nA ---> ADD\nB ---> ADD\nC ---> ADD\nADD ---> D\nADD ---> E

\u4e8e\u662f\uff0c\u6839\u636e\u4e00\u4e2a carry \u4f4d\u3001\u4e00\u4e2a\u88ab\u5408\u5e76\u6811\u548c\u4e00\u4e2a\u5408\u5e76\u6811\u7684\u60c5\u51b5\uff0c\u6709\u4e00\u5171 \\(2^3=8\\) \u79cd\u53ef\u80fd\u3002

\ud83c\udf30

\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u8fd9\u6837\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u9700\u8981\u5408\u5e76\uff1a

\u5219\u5176\u5408\u5e76\u7684\u64cd\u4f5c\u53ef\u4ee5\u8fd9\u6837\u63cf\u8ff0\u3002

\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

\u7eff\u8272\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u84dd\u8272\u7684\u4e3a 1001\uff0c\u4e24\u8005\u76f8\u52a0\u5f97\u5230 10100\u3002

Frame 1Frame 2Frame 3Frame 4Frame 5Frame 6

\\(B_0\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_0\\) \u548c \\(T_{blue}.B_0\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_0\\)\uff0c\\(T.R_0\\) \u4e3a\u7a7a\u3002

\\(B_1\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\) \u548c \\(T.C_0\\) \u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_1\\)\uff0c\\(T.R_1\\) \u4e3a\u7a7a\u3002

\\(B_2\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_1\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_2 = T.C_1\\)\uff0c\\(T.C_2\\) \u4e3a\u7a7a\u3002

\\(B_3\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\)\uff0c\\(T_{blue}.B_1\\) \u548c \\(T.C_2\\) \u90fd\u4e0d\u5b58\u5728\uff0c\u6240\u4ee5 \\(T.R_3\\) \u4e3a\u7a7a\uff0c\\(T.C_1\\) \u4e3a\u7a7a\u3002

\\(B_4\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_4\\) \u548c \\(T.C_3\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_4\\)\uff0c\\(T.R_4\\) \u4e3a\u7a7a\u3002

\\(B_5\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_4\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_5 = T.C_4\\)\uff0c\\(T.C_5\\) \u4e3a\u7a7a\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

\u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u67e5\u8be2\u961f\u9996","title":"\u67e5\u8be2\u961f\u9996","text":"

\u4e8c\u9879\u961f\u5217\u7684\u961f\u9996\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a\u961f\u5217\u7684\u6700\u5c0f\u503c\uff08\u6700\u5927\u503c\uff09\uff0c\u5c31\u662f\u8fd9\u82e5\u5e72\u4e2a\uff08\\(O(\\log N)\\) \u4e2a\uff09\u4e8c\u9879\u6811\u7684\u6839\u4e2d\u6700\u5c0f\uff08\u6700\u5927\uff09\u7684\u90a3\u4e2a\u3002\u6240\u4ee5\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

\u4e0d\u8fc7\u6709\u65f6\u5019\u6211\u4eec\u4e5f\u4f1a\u989d\u5916\u7ef4\u62a4\u4e00\u4e2a\u6307\u9488\uff0c\u6307\u5411\u5f53\u524d\u6700\u5c0f\u7684\u90a3\u4e2a\u6839\uff0c\u6b64\u65f6\u5176\u590d\u6742\u5ea6\u4e3a \\(O(1)\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u9996\u51fa\u961f","title":"\u961f\u9996\u51fa\u961f","text":"

\u961f\u9996\u51fa\u961f\u9996\u5148\u8981\u627e\u5230\u961f\u9996\uff0c\u8fd9\u4ef6\u4e8b\u6211\u4eec\u5728#\u67e5\u8be2\u961f\u9996\u5df2\u7ecf\u8ba8\u8bba\u8fc7\u4e86\u3002

\u627e\u5230\u961f\u9996\u540e\uff0c\u6211\u4eec\u5c06\u5176\u4ece\u4e8c\u9879\u961f\u5217\u4e2d\u79fb\u9664\uff0c\u6211\u4eec\u77e5\u9053\uff0c\u961f\u9996\u5fc5\u7136\u662f\u67d0\u4e2a\u4e8c\u9879\u6811\u7684\u6839\uff0c\u6240\u4ee5\u5220\u6389\u8fd9\u4e2a\u961f\u9996\u4ee5\u540e\uff0c\u5c31\u4f1a\u4ea7\u751f \\(k\\) \u4e2a\u65b0\u7684\u5b50\u6811\u3002

\u800c\u8ba9\u6211\u4eec\u56de\u987e\u4e8c\u9879\u6811\u7684\u5408\u5e76\u8fc7\u7a0b\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u6240\u4ee5\u5f53\u6211\u4eec\u5220\u6389\u8fd9\u4e2a\u6839\uff0c\u4ea7\u751f\u7684\u6240\u6709\u5b50\u6811\u90fd\u662f\u4e8c\u9879\u6811\u3002

\u56e0\u6b64\u6211\u4eec\u8054\u60f3\u5230\uff0c\u5c06\u961f\u9996\u51fa\u961f\u95ee\u9898\u8f6c\u5316\u4e3a\u5408\u5e76\u4e8c\u9879\u961f\u5217\u7684\u95ee\u9898\u2014\u2014\u5047\u8bbe \\(T\\) \u7684\u961f\u9996\u662f \\(B_k\\) \u7684\u6839\uff0c\u5219\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u6c42\u89e3 \\(merge(T-B_k, B_k.root.children)\\) \u7684\u95ee\u9898\u3002

\ud83c\udf30

\u5047\u8bbe\u6211\u4eec\u6709\u5982\u4e0b\u7684\u4e8c\u9879\u961f\u5217\uff0c\u73b0\u5728\u8fdb\u884c\u5f39\u51fa\u961f\u9996\u7684\u64cd\u4f5c\u3002

\u7279\u5f81\u6bd4\u7279\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

\u5982\u4e0a\u961f\u5217\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 10100\uff0c\u5171 20 \u4e2a\u8282\u70b9\u3002\u73b0\u5728\u5220\u6389\u4e00\u4e2a\uff0c\u5e94\u5f53\u6709 19 \u4e2a\u8282\u70b9\u3002

\u66f4\u5177\u4f53\u7684\uff0c10100 = 10000 + 100\uff0c\u5206\u522b\u4ee3\u8868\u4e24\u4e2a\u4e8c\u9879\u6811\uff0c\u800c\u6211\u4eec\u7684\u6700\u5c0f\u503c\u662f\u4ece 10000 \u6240\u4ee3\u8868\u7684\u6811\u91cc\u5220\u9664\u7684\uff0c\u6240\u4ee5\u65b0\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a\uff1a(10000 - 1) + 100 = 1111 + 100 = 10011\uff0c\u5373 19 \u4e2a\u3002

\u6ce8\u610f\u89c2\u5bdf\u8fd9\u91cc 10000 - 1 = 1111 \u7684\u53d8\u5316\uff0c\u5bfb\u627e\u5b83\u4e0e\u5177\u4f53\u89c6\u89d2\u4e2d\u7684\u5173\u7cfb\u3002

Frame 1Frame 2Frame 3Frame 4

\u9996\u5148\u627e\u5230\u961f\u9996\uff0c\u5373\u6b64\u65f6 min \u6307\u9488\u6307\u5411\u7684\u5730\u65b9\u3002\u89c2\u5bdf\u5b83\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u53d1\u73b0\u5b83\u5177\u6709\u56db\u4e2a\u5b50\u6811\uff0c\u5206\u522b\u662f \\(B_0 \\sim B_3\\)\uff0c\u5bf9\u5e94\u4e86\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u300c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\u300d\u3002

\u4e8e\u662f\u6211\u4eec\u5c06\u8fd9\u4e2a\u5b50\u6811\u63d0\u53d6\u51fa\u6765\uff0c\u5c06\u539f\u672c\u7684\u4e8c\u9879\u961f\u5217\u62c6\u6210\u4e3a\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u3002

\u73b0\u5728\u6211\u4eec\u5220\u9664\u201c\u961f\u9996\u201d\uff0c\u53d1\u73b0\u90a3\u68f5\u6811\u5206\u88c2\u6210\u4e86\u56db\u4e2a\u8fde\u7eed\u7684\u4e8c\u9879\u6811\uff0810000 - 1 = 1111\uff09\u3002

\u73b0\u5728\u95ee\u9898\u5c31\u8f6c\u5316\u4e3a\u4e86\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u5408\u5e76\u7684\u95ee\u9898\u3002\u5728\u6b64\u7701\u7565\u3002

\u6ce8\u610f\u89c2\u5bdf\u5b8c\u6210\u7684\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u548c\u4e0a\u9762\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u7684\u7ed3\u679c\u3002

\u63d0\u793a

\u652f\u6301\u7740\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8fd9\u6837\u8fdb\u884c\u7684\u6027\u8d28\u5c31\u662f\uff0c\u6bcf\u4e00\u4e2a\u4e8c\u9879\u6811\u7684\u6839\u7684 children \u672c\u8eab\u4e5f\u90fd\u662f\u4e8c\u9879\u6811\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#project-fibonacci-queue","title":"Project: Fibonacci Queue","text":"

Link

YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/","title":"Lecture 6 | Backtracing","text":"

\u7ea6 459 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

link

OI Wiki: https://oi-wiki.org/search/backtracking/

Wikipedia: https://en.wikipedia.org/wiki/Backtracking

\u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u6bd4\u8f83\u6563\uff0c\u56e0\u4e3a\u56de\u6eaf\u662f\u4e00\u4e2a\u5f88\u57fa\u7840\u800c\u4e14\u5f88\u6cdb\u7528\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u611f\u89c9\u600e\u4e48\u8bb2\u90fd\u4e0d\u592a\u5408\u9002\u3002\u66f4\u591a\u7684\u662f\u9700\u8981\u5728\u5177\u4f53\u95ee\u9898\u3001\u5177\u4f53\u6a21\u578b\u4e2d\u53bb\u4f53\u4f1a\u3002

\u52a0\u4e0a\u5982\u679c\u6bcf\u4e00\u4e2a\u5185\u5bb9\u90fd\u8981\u5f80\u6b7b\u91cc\u53bb\u53d9\u8ff0\u7684\u8bdd\u5b9e\u5728\u592a\u7d2f\u4e86\uff0c\u6240\u4ee5\u56de\u6eaf\u8fd9\u4e00\u7ae0\u60f3\u5077\u4e2a\u61d2\uff0c\u5c31\u7b80\u5355\u8bb0\u5f55\u4e00\u4e0b\u8bfe\u4e0a\u63d0\u5230\u8fc7\u7684\u4e00\u4e9b\u6a21\u578b\u5427\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u516b\u7687\u540e","title":"\u516b\u7687\u540e","text":"

\u975e\u5e38\u7ecf\u5178\u7684\u95ee\u9898\uff0c\u76f8\u4fe1\u63a5\u89e6\u8fc7\u7b97\u6cd5\u7684\u540c\u5b66\u57fa\u672c\u4e0a\u90fd\u7ed5\u4e0d\u5f00\u8fd9\u4e2a\u4e1c\u897f\u3002

link

Wikipedia: https://en.wikipedia.org/wiki/Eight_queens_puzzle

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u6848\u4f8b-the-turnpike-reconstruction-problem","title":"[\u6848\u4f8b] The Turnpike Reconstruction Problem","text":"

\u6536\u8d39\u7ad9\u91cd\u5efa\u95ee\u9898(The Turnpike Reconstruction Problem)\u63cf\u8ff0\u7684\u662f\u4e00\u6761\u88ab\u62bd\u8c61\u4e3a\u76f4\u7ebf\u7684\u516c\u8def\u4e0a\uff0c\u6709 \\(N\\) \u4e2a\u6536\u8d39\u7ad9\uff08\\(x_1, x_2, ..., x_N\\)\uff09\u3002\u73b0\u5728\u7ed9\u51fa\u4efb\u610f\u4e24\u4e2a\u6536\u8d39\u7ad9\u4e4b\u95f4\u7684\u8ddd\u79bb\u7684\u53ef\u91cd\u96c6\u5408 \\(D\\)\uff0c\uff08\u53ef\u60f3\u800c\u77e5\uff0c\u4e00\u5171\u6709 \\(\\frac{N(N-1)}{2}\\) \u4e2a\u5143\u7d20\uff09\uff0c\u6c42\u6536\u8d39\u7ad9\u7684\u4f4d\u7f6e\uff0c\u5373\u7ed9\u5b9a\u4efb\u610f\u4e24\u70b9\u7684\u8ddd\u79bb\u96c6\u5408\uff0c\u6c42\u51fa\u8fd9\u4e9b\u70b9\u7684\u5750\u6807\u3002

solution

\u5927\u6982\u601d\u8def\u5c31\u662f\uff0c\u9996\u5148\u5047\u8bbe \\(x_1 = 0\\)\uff0c\u90a3\u4e48\u5f88\u663e\u7136 \\(x_N = \\mathop{max} \\{D\\}\\)\u3002\u540c\u65f6\u6211\u4eec\u4e5f\u5f97\u5230\u8fd9\u6761\u7ebf\u6bb5\u7684\u957f\u5ea6\u4e3a \\(\\mathop{max} \\{D\\}\\)\u3002\u63a5\u4e0b\u6765 \\(D\\) \u4e2d\u4ece\u5927\u5230\u5c0f\u53d6\u51fa\u5143\u7d20\uff0c\u5219\u5fc5\u5b9a\u8ffd\u52a0\u5728 \\(x_1\\) \u53f3\u4fa7\u6216 \\(x_N\\) \u5de6\u4fa7\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002\uff08\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\u5728\u5b8c\u5168\u5b89\u6392\u597d\u4e4b\u524d\u90fd\u662f\u8ffd\u52a0\u5728\u5de6\u4fa7\u6216\u8005\u53f3\u4fa7\u7684\u65e2\u5b9a\u8fb9\u754c\u4e4b\u95f4\u7684\uff09\u3002\u800c\u6bcf\u4e00\u6b21\u8ffd\u52a0\u7684\u9009\u62e9\u90fd\u4ee3\u8868\u51b3\u7b56\u6811\u4e2d\u7684\u4e00\u4e2a\u5206\u652f\uff0c\u53ef\u4ee5\u5229\u7528\u5176\u5b83\u6761\u4ef6\u8fdb\u884c\u526a\u679d\uff08\u4f8b\u5982 \\(D\\) \u4e2d\u6709 \\(x_p - x_0\\) \u5c31\u4e00\u5b9a\u6709 \\(x_N - x_p\\)\uff09\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u0251-\u03b2-\u526a\u679d","title":"\u0251-\u03b2 \u526a\u679d","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/","title":"Lecture 7 | Divide & Conquer","text":"

\u7ea6 3626 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 12 \u5206\u949f

\u611f\u89c9\u8fd9\u51e0\u8282\u8bfe\u4e0a\u7684\u5185\u5bb9\u90fd\u633a\u5bbd\u6cdb\u7684\u554ax

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm

\u5957\u7528 Wiki \u4e0a\u7684\u8bf4\u6cd5\uff0c\u5206\u6cbb\u6cd5(Divide-and-conquer algorithm)\u5c5e\u4e8e\u4e00\u79cd\u7b97\u6cd5\u8303\u578b\uff0c\u5b83\u7684\u57fa\u672c\u601d\u60f3\u662f\u5c06\u4e00\u4e2a\u95ee\u9898\u5206\u89e3\u4e3a\u82e5\u5e72\u4e2a\u89c4\u6a21\u8f83\u5c0f\u7684\u76f8\u540c\u95ee\u9898\uff0c\u7136\u540e\u9012\u5f52\u5730\u89e3\u51b3\u8fd9\u4e9b\u5b50\u95ee\u9898\uff0c\u6700\u540e\u5c06\u8fd9\u4e9b\u5b50\u95ee\u9898\u7684\u89e3\u5408\u5e76\u5f97\u5230\u539f\u95ee\u9898\u7684\u89e3\uff0c\u4e00\u4e2a\u6bd4\u8f83\u7ecf\u5178\u7684\u6848\u4f8b\u5c31\u662f\u5f52\u5e76\u6392\u5e8f\u3002

\u672c\u8282\u7684\u91cd\u70b9\u5b9e\u9645\u4e0a\u4e5f\u5e76\u4e0d\u662f\u805a\u7126\u4e8e\u5206\u6cbb\u672c\u8eab\uff0c\u800c\u662f\u5176\u590d\u6742\u5ea6\u5206\u6790\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6848\u4f8b-closet-points-problem","title":"[\u6848\u4f8b] Closet Points Problem","text":"

\u4e8c\u7ef4\u6700\u8fd1\u70b9\u95ee\u9898(Closet Points Problem)\uff0c\u6307\u7684\u662f\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684 n \u4e2a\u70b9\uff0c\u627e\u51fa\u5176\u4e2d\u8ddd\u79bb\u6700\u8fd1\u7684\u4e24\u4e2a\u70b9\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6734\u7d20\u65b9\u6cd5","title":"\u6734\u7d20\u65b9\u6cd5","text":"

\u6700\u6734\u7d20\u7684\u505a\u6cd5\u5f53\u7136\u662f\u679a\u4e3e\u6240\u6709\u7684\u70b9\u5bf9\uff0c\u4e00\u5171\u9700\u8981 \\(C_{N}^{2} = {{N}\\choose{2}} = \\frac{N(N-1)}{2}\\) \u5373\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5206\u6cbb\u65b9\u6cd5","title":"\u5206\u6cbb\u65b9\u6cd5","text":"

\u73b0\u5728\u6211\u4eec\u7c7b\u6bd4\u6700\u5927\u5b50\u5e8f\u5217\u548c\u95ee\u9898\u7684\u5206\u6cbb\u505a\u6cd5\u3002

\u6700\u5927\u5b50\u5e8f\u5217\u548c\u7684\u5206\u6cbb\u505a\u6cd5
  1. \u5c06\u5e8f\u5217\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
  2. \u6c42\u89e3\u8de8\u8d8a\u4e2d\u70b9\u7684\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
  3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5927\u503c\uff1b

\u6211\u4eec\u53ef\u4ee5\u5c06\u6574\u4e2a\u5e73\u9762\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u5982\u56fe\u4e2d\u7eff\u8272\u7ebf\u5c06\u70b9\u5bf9\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u540c\u6837\u5206\u4e3a\u8fd9\u4e48\u4e09\u6b65\uff1a

  1. \u5c06\u70b9\u5bf9\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u8fd1\u70b9\u5bf9\uff1b
  2. \u5bfb\u627e\u8de8\u8d8a\u5206\u754c\u7ebf\u7684\u70b9\u5bf9\uff0c\u4ece\u4e2d\u5bfb\u627e\u6700\u8fd1\u70b9\u5bf9\uff1b
  3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5c0f\u503c\uff1b

\u663e\u7136\uff0c\u6211\u4eec\u73b0\u5728\u9700\u8981\u89e3\u51b3\u7684\u5c31\u662f\u8981\u5982\u4f55\u8bbe\u8ba1\u7b2c\u4e8c\u6b65\u7684\u5b9e\u73b0\uff0c\u4ee5\u6c42\u66f4\u4f18\u7684\u590d\u6742\u5ea6\u3002

\u9996\u5148\u6211\u4eec\u5047\u8bbe\u5728\u7b2c\u4e00\u6b65\u4e2d\uff0c\u6211\u4eec\u6c42\u5f97\u4e24\u8fb9\u6c42\u5f97\u7684\u6700\u5c0f\u8ddd\u79bb\u4e2d\u8f83\u5c0f\u7684\u90a3\u4e2a\u4e3a \\(\\delta\\)\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u7b54\u6848\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u66f4\u65b0\uff0c\u90a3\u4e48\u5b83\u7684\u8ddd\u79bb\u9700\u8981\u5c0f\u4e8e \\(\\delta\\)\u3002\u800c\u6211\u4eec\u77e5\u9053\uff0c\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u62ff\u51fa\u6765\u7684\u70b9\u5bf9\uff0c\u4e00\u5b9a\u662f\u4e00\u4e2a\u5728\u5206\u754c\u7ebf\u5de6\u4fa7\u4e00\u4e2a\u5728\u5206\u754c\u7ebf \\(L\\) \u53f3\u4fa7\u3002\u6734\u7d20\u7684\u6765\u60f3\uff0c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5916\u7684\u70b9\u5bf9\u4e2d\uff0c\u6211\u4eec\u662f\u4e0d\u9700\u8981\u8003\u8651\u7684\u3002\u800c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5185\u7684\u70b9\uff0c\u90fd\u5b58\u5728\u6210\u4e3a\u7b54\u6848\u70b9\u5bf9\u70b9\u53ef\u80fd\u3002

\u5982\u56fe\uff0c\u73b0\u5728\u6211\u4eec\u77e5\u9053\uff0c\u53ea\u6709\u843d\u5728\u4e24\u6761\u6df1\u7eff\u8272\u4e4b\u95f4\u7684\u70b9\u624d\u53ef\u80fd\u4f1a\u66f4\u65b0\u7b54\u6848\u3002

\u73b0\u5728\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\uff0c\u4ece\u5206\u754c\u7ebf\u5de6\u4fa7\u7684\u533a\u57df\u91cc\u62ff\u4e00\u4e2a\u70b9\uff0c\u548c\u5206\u754c\u7ebf\u53f3\u8fb9\u7684\u4e00\u4e2a\u70b9\u505a\u5339\u914d\uff0c\u7136\u540e\u53d6\u6240\u6709\u7ed3\u679c\u4e2d\u7684\u6700\u5c0f\u70b9\u3002\u4e0d\u8fc7\u8fd9\u4ef6\u4e8b\u4ecd\u7136\u53ef\u4ee5\u4f18\u5316\u2014\u2014\u5728\u4e8c\u7ef4\u7684\u6570\u636e\u4e2d\uff0c\u4ec5\u5bf9\u4e00\u4e2a\u7eac\u5ea6\u505a\u7ea6\u675f\u5f80\u5f80\u4f1a\u5bfc\u81f4\u4e8b\u60c5\u53d8\u5f97\u4e0d\u90a3\u4e48\u7a33\u5b9a\uff0c\u6240\u4ee5\u6211\u4eec\u540c\u6837\u8003\u8651\u5728\u53e6\u5916\u4e00\u4e2a\u65b9\u5411\u505a\u7ea6\u675f\u3002

\u4e5f\u662f\u57fa\u4e8e\u8303\u56f4\u7ea6\u675f\u7684\u8003\u8651\u3002\u5047\u8bbe\u6211\u4eec\u4ee5\u5de6\u4fa7\u7684\u70b9\u4e3a\u57fa\u51c6\uff0c\u4ece\u4e0a\u5f80\u4e0b\u505a\u904d\u5386\u8fd9\u4e9b\u70b9\uff0c\u90a3\u4e48\u5bf9\u4e8e\u70b9 \\(p_{l_i}\\)\uff0c\u5177\u6709\u80fd\u591f\u66f4\u65b0\u7b54\u6848\u7684\uff0c \\(\\mathop{dis} (p_{l_i}, p_{r_j}) \\leq \\delta\\) \u7684 \\(p_{r_j}\\)\uff0c\u4e00\u5b9a\u6709 \\(\\mathop{dis_{\\parallel bound}}(p_{l_i}, p_{r_j}) \\leq \\delta\\)\uff08\u76f4\u89d2\u4e09\u89d2\u5f62\u659c\u8fb9\u6700\u957f\uff09\u3002

\u56e0\u6b64\uff0c\u5bf9\u4e8e\u9009\u5b9a\u70b9 \\(p_{l_i}\\)\uff0c\u5176\u6240\u6709\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u90fd\u88ab\u6846\u5b9a\u5728\u4e00\u4e2a \\(2\\delta \\times \\delta\\) \u7684\u77e9\u5f62\u4e2d\u3002

\u800c\u66f4\u5947\u5999\u7684\u662f\uff0c\u8fd9\u4e2a\u7531\u53c2\u6570 \\(\\delta\\) \u6307\u5b9a\u7684\u77e9\u5f62\uff0c\u5de7\u5999\u5730\u7ea6\u675f\u4e86\u843d\u5728\u77e9\u5f62\u4e2d\u7684\u70b9\u7684\u6700\u5927\u6570\u91cf\u3002

\u5728\u8fd9\u6837\u4e00\u4e2a\u533a\u57df\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u7ea6\u675f\u6240\u6709\u843d\u5728 \\(\\delta \\times \\delta\\) \u7684 L \u533a\u57df\u4e2d\u7684\u70b9\uff0c\u4e92\u76f8\u7684\u8ddd\u79bb\u90fd\u5927\u4e8e\u7b49\u4e8e \\(\\delta\\)\uff0c\u5bf9 R \u533a\u57df\u4e2d\u7684\u70b9\u4e5f\u6709\u76f8\u540c\u7684\u7ea6\u675f\u3002\u4e0d\u96be\u53d1\u73b0\uff0c\u5728\u6700\u7406\u60f3\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u2014\u2014\u95ed\u533a\u95f4\u3001\u5141\u8bb8\u70b9\u91cd\u5408\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u77e9\u5f62\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516b\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u56db\u4e2a\uff09\uff1a

\u800c\u66f4\u4e00\u822c\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516d\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u4e09\u4e2a\uff09\u3002

\u65e0\u8bba\u5982\u4f55\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7ed3\u8bba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u9009\u5b9a\u7684 \\(p_{l_i}\\)\uff0c\u5bfb\u627e\u5176\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u7684\u590d\u6742\u5ea6\u90fd\u662f\u5e38\u6570\u7ea7\u7684\u3002

\u800c\u679a\u4e3e\u8fd9\u4e9b\u201c\u9009\u5b9a\u70b9\u201d\uff0c\u4e5f\u5c31\u662f\u679a\u4e3e \\(p_{l_i}\\)\uff0c\u5176\u590d\u6742\u5ea6\uff08\u6491\u6b7b\uff09\u662f \\(O(N)\\)\u3002

\u4e8e\u662f\u6211\u4eec\u80fd\u5f97\u5230\u8fd9\u4e2a\u5206\u6cbb\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8ba1\u7b97\u9012\u63a8\u516c\u5f0f\uff1a

\\[ T(N) = \\underbrace{2\\; T(\\frac{N}{2})}_{\\text{Step 1. divide}} + \\underbrace{O(N)}_{\\text{Step 2. across}} = O(N\\log N) \\]

\u800c\u6211\u4eec\u63a5\u4e0b\u6765\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u5982\u4f55\u901a\u8fc7\u8fd9\u4e2a\u9012\u63a8\u5f0f\u5f97\u5230\u7ed3\u679c\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u590d\u6742\u5ea6\u5206\u6790","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

\u5728\u5f00\u59cb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u51fa\u66f4\u4e00\u822c\u7684\uff0c\u6211\u4eec\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\uff0c\u5373\u6c42\u89e3\u65f6\u95f4\u590d\u6742\u5ea6\u9012\u63a8\u516c\u5f0f\u5f62\u5982\u4e0b\u5f0f\u7684\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff1a

\\[ T(N) = aT(\\frac{N}{b}) + f(N) \\;\\;\\;\\; a,b \\in Z^+ \\]

\u4f8b\u5982\uff0c\u4e0a\u9762\u7684\u6700\u8fd1\u70b9\u5bf9\u95ee\u9898\uff0c\u5c31\u662f \\(a = 2,\\; b = 2,\\; f(N) = O(N)\\) \u7684\u60c5\u51b5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4ee3\u6362\u6cd5","title":"\u4ee3\u6362\u6cd5","text":"

\u4ee3\u6362\u6cd5(substitution method)\u7684\u601d\u8def\u975e\u5e38\u76f4\u767d\uff0c\u9996\u5148\u6211\u4eec\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff08\u6bd4\u5982\u5927\u773c\u89c2\u5bdf\u6cd5\ud83d\udc40\uff09\u6765\u5f97\u5230\u4e00\u4e2a\u9884\u8bbe\u7684\u7ed3\u679c\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u4ee3\u5165\u3001\u5f52\u7eb3\u7684\u65b9\u6cd5\u6765\u8bc1\u660e\u8fd9\u4e2a\u7ed3\u679c\u3002

\u5927\u80c6\u731c\u6d4b\uff0c\u5c0f\u5fc3\u6c42\u8bc1\uff01

\ud83c\udf30

\u9898\u9762\u89e3\u7b54

\u6c42\u89e3\u590d\u6742\u5ea6\uff1a

\\[ T(N) = 2\\; T(\\frac{N}{2}) + N \\]

\u9884\u8bbe\uff1a

\\[ T(N) = O(N\\log N) \\]

\u4ee3\u5165\uff1a

\\[ T(\\frac{m}{2}) = O(\\frac{m}{2}\\log \\frac{m}{2}) \\leq c \\frac{m}{2}\\log \\frac{m}{2} \\] \\[ T(m) = 2\\; T(\\frac{m}{2}) + m \\] \\[ T(m) \\leq 2\\; c \\frac{m}{2}\\log \\frac{m}{2} + m \\leq c m \\log m \\text{ for } c \\geq 1 \\]

\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684 \\(m = 2\\) \u5f0f\u5b50\u5c31\u53ef\u4ee5\u6210\u7acb\uff0c\u7531\u5f52\u7eb3\u6cd5\u5f97\u7ed3\u8bba\u6210\u7acb\u3002

\u4e0d\u8fc7\u5f88\u663e\u7136\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u6211\u4eec\u6c42\u8bc1\u4e86\u4e00\u4e2a\u590d\u6742\u5ea6\u7684\u5047\u8bbe\u6210\u7acb\uff0c\u4f46\u5b83\u5e76\u4e0d\u4e00\u5b9a\u8db3\u591f\u7d27\uff0c\u8fd9\u662f\u731c\u89e3\u6cd5\u7684\u901a\u75c5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u9012\u5f52\u6811\u6cd5","title":"\u9012\u5f52\u6811\u6cd5","text":"

\u9012\u5f52\u6811\u6cd5(recursion-tree method)\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u901a\u8fc7\u753b\u51fa\u9012\u5f52\u6811\u6765\u5206\u6790\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5b9e\u9645\u4e0a\u548c\u76f4\u63a5\u6570\u5b66\u63a8\u7406\u7684\u533a\u522b\u4e0d\u662f\u5f88\u5927\uff0c\u4e3b\u8981\u5c31\u662f\u901a\u8fc7\u89c2\u5bdf\u9012\u5f52\u8fc7\u7a0b\u4e2d\u6570\u636e\u589e\u957f\u7684\u6a21\u5f0f\u6765\u8fdb\u884c\u5206\u6790\u3002

some mathematical tools \\[ a^{\\log_b N} = \\exp^{\\frac{\\ln N}{\\ln b} \\ln a} = \\exp^{\\frac{\\ln a}{\\ln b} \\ln N} = N^{\\log_b a} \\]

\u5c31\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u5c55\u5f00\u5f0f\u5b50\uff0c\u53ea\u4e0d\u8fc7\u901a\u8fc7\u6811\u72b6\u56fe\u7684\u5f62\u5f0f\u6216\u8bb8\u66f4\u52a0\u76f4\u89c2\u3002

\u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u5c06\u5b83\u4e0d\u65ad\u5c55\u5f00\u4ee5\u540e\uff0c\u5176\u5f62\u5f0f\u5927\u6982\u4f1a\u662f\u8fd9\u6837\uff1a

\\[ T(N) = ... = \\underbrace{\\sum_{leaf_i}^{leaves}T(N_{leaf_i})}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

\u5176\u4e2d\uff0c\u7531\u4e8e\u672b\u7aef\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u4e00\u822c\u90fd\u8db3\u591f\u5c0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a \\(T(N_{leaf_i})\\) \u90fd\u662f\u5e38\u6570\uff0c\u4e8e\u662f\u4e0a\u5f0f\u53c8\u53ef\u4ee5\u53d8\u5316\u4e3a\uff1a

\\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

\u5177\u4f53\u6765\u8bf4\u89e3\u91ca\u5176\u542b\u4e49\uff0ccombine \u90e8\u5206\u5c31\u662f\u5728\u6bcf\u4e00\u6b21\u201c\u5206\u6cbb\u201d\u7684\u5904\u7406\u65f6\u95f4\uff0c\u5982\u5408\u5e76\u5f53\u524d\u7684\u5b50\u95ee\u9898\u5206\u6cbb\u540e\u7684\u7ed3\u679c\uff0c\u4f53\u73b0\u5728\u9012\u63a8\u5f0f\u7684 \\(f(N)\\) \u90e8\u5206\uff1b\u800c conquer \u90e8\u5206\u6307\u7684\u662f\u5f53\u201c\u5206\u6cbb\u201d\u7684\u201c\u6cbb\u201d\u5728\u201c\u5206\u201d\u7684\u672b\u7aef\u7684\u4f53\u73b0\uff0c\u5373\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684\u89c4\u6a21\u7684\u95ee\u9898\uff0c\u4e0d\u518d\u9700\u8981\u7ee7\u7eed\u201c\u5206\u201d\u7684\u65f6\u5019\uff0c\u5bf9\u5176\u5904\u7406\u7684\u5f00\u9500\u3002

\u5b9e\u9645\u4e0a\u5728\u4ee3\u7801\u5c42\u9762\u8fd9\u4e24\u90e8\u5206\u53ef\u80fd\u533a\u522b\u4e0d\u5927\uff08\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5206\u652f\u7684\u4e8b\u60c5\uff09\uff0c\u4e0d\u8fc7\u5728\u6570\u5b66\u610f\u4e49\u4e0a\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\u5b50\u6c42\u89e3\u6211\u4eec\u4e00\u822c\u662f\u9700\u8981\u201c\u9996\u9879\u201d\u7684\uff0c\u6216\u8005\u8bf4\u662f\u201c\u6700\u5e95\u5c42\u201d\u7684\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5e95\u5c42\u201d\u7684\u90e8\u5206\u5c31\u662f conquer \u90e8\u5206\u3002

\u63a5\u4e0b\u6765\u7ed3\u5408 \ud83c\udf30 \u6765\u5206\u6790\u4e00\u4e0b\uff1a

\ud83c\udf30

From cy's ppt.

\\underbrace \u4e0b\u9762\u90a3\u4e2a\u7b49\u5f0f\u7684\u8bc1\u660e\u5728\u4e0a\u9762\u7684 \"some mathematical tools\"\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u6b64\u60c5\u51b5\u4e0b \\(a = 3,\\; b = 4,\\; f(N) = \\Theta(N^2)\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\u6bcf\u6b21\u5206\u4e3a \\(3\\) \u4e2a\u5b50\u95ee\u9898\uff0c\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u662f \\(\\frac{N}{4}\\)\uff0c\u800c\u5408\u5e76\u5f00\u9500\u4e3a \\(\\Theta(N^2)\\)\u3002

\u6b64\u65f6\u7531\u4e8e\u5206\u6cbb\u7684\u7b56\u7565\u662f\u76f8\u5bf9\u5747\u5300\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u5b8c\u7f8e\u4e09\u53c9\u6811\u3002

\u663e\u7136\uff0c\u6811\u9ad8\u4e3a \\(\\log_4 N\\)\uff0c\u6839\u8bb0\u4e3a \\(0\\)\uff0c\u6bcf\u4e2a\u5206\u6cbb\u8282\u70b9\u7684 combine \u5f00\u9500\u5df2\u7ecf\u6807\u6ce8\u5728\u56fe\u7684\u8282\u70b9\u4f4d\u7f6e\uff0c\u6a2a\u5411\u7bad\u5934\u6807\u8bb0\u7684\u662f\u5bf9\u8be5\u5c42\u6240\u6709\u8282\u70b9\u7684\u5f00\u9500\u7684\u6c42\u548c\u3002\u7279\u522b\u7684\uff0c\u5bf9\u4e8e\u6700\u5e95\u5c42\uff0c\u5373\u53f6\u5b50\u5c42\uff0c\u5b83\u8868\u793a\u7684\u662f conquer \u90e8\u5206\u7684\u5f00\u9500\uff08\u867d\u7136\u6211\u4e2a\u4eba\u89c9\u5f97\u6ca1\u5fc5\u8981\u533a\u5206\u8fd9\u4fe9\uff09\u3002

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u4e0b\u5f0f\u7684\u5f62\u5f0f\uff0c\u5bf9\u5176\u8fdb\u884c\u6c42\u548c\uff0c\u5f97\u5230\u56fe\u7247\u4e2d\u4e0b\u65b9\u7684\u5f0f\u5b50\u3002

\\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4e3b\u65b9\u6cd5","title":"\u4e3b\u65b9\u6cd5","text":"

link

OI Wiki: https://oi-wiki.org/basic/complexity/#\u4e3b\u5b9a\u7406-master-theorem

Wikipedia: https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)

\u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e00","title":"\u5f62\u5f0f\u4e00","text":"

Form 1

\u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

  1. \u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b
  2. \u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b
  3. \u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

\u60c5\u51b5\u4e09\u7684\u540e\u9762\u90a3\u4e2a\u6761\u4ef6\u53c8\u53eb regularity condition\u3002

\u56de\u987e\u6211\u4eec\u5728\u524d\u9762\u8bf4\u7684\u90a3\u53e5\u8bdd\uff0c\u300c\u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u300d\uff0c\u89c2\u5bdf\u4e09\u79cd\u60c5\u51b5\u7684\u533a\u5206\u6761\u4ef6\u90fd\u662f\u6bd4\u8f83 \\(f(N)\\)\uff08\u6bcf\u4e00\u6b21\u7684 combine \u5f00\u9500\uff09 \u548c \\(N^{\\log_b{a}}\\)\uff08\u5373\u6c42\u548c\u5f0f\u4e2d\u7684 conquer \u7684\u5f00\u9500\uff09\uff0c\u5f53 \\(f(N)\\) \u8db3\u591f\u5c0f\u65f6\uff0c\u4ee5 conquer \u5f00\u9500\u4e3a\u4e3b\uff08i.e. case 1\uff09\uff1b\u5f53\u8db3\u591f\u5927\u65f6\uff0c\u4ee5 combine \u4e3a\u4e3b\uff08i.e. case 3\uff09\uff1b\u800c\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\uff08i.e. case 2\uff09\u3002

examples for form 1 "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e","title":"\u8bc1\u660e","text":"

proof for form 1

\u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u9700\u8981\u4f9d\u6b21\u8bc1\u660e\uff0c\u6b64\u5904\u6211\u4eec\u4f7f\u7528\u9012\u5f52\u6811\u6cd5\u8fdb\u884c\u8bc1\u660e\u3002

\u60c5\u51b5\u4e00

\ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b

\ud83e\udea7 \u8bc1\u660e\uff1a\u6211\u4eec\u9996\u5148\u9700\u8981\u7ed8\u5236\u51fa\u5bf9\u5e94\u7684\u9012\u5f52\u6811\uff0c\u6216\u8005\u641e\u6e05\u695a\u5c55\u5f00\u540e\u7684\u60c5\u51b5\uff0c\u56e0\u4e3a\u61d2\u5f97\u753b\u56fe\u6240\u4ee5\u6211\u8fd9\u91cc\u91c7\u7528\u6587\u5b57\u53d9\u8ff0\u3002

\u6811\u9ad8 \\(\\log_b{N}\\)\uff0c\u5171 \\(\\log_b{N} + 1\\) \u5c42\uff0c\u5219\u6709\uff1a

\u5f97\u5230\u6c42\u548c\u5f0f\uff1a

\\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

\u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

\\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j O\\left(\\left(\\frac{N}{b^j}\\right)^{(\\log_b{a})-\\varepsilon}\\right)\\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} \\left(\\frac{a}{b^{(\\log_b{a})-\\varepsilon}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} (b^{\\varepsilon})^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{1\\times(1-(b^\\varepsilon)^{\\log_b{N}})}{1-b^\\varepsilon} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{N^\\varepsilon-1}{b^\\varepsilon-1} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times N^\\varepsilon \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{\\log_b{a}} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) \\end{aligned} \\]

\u81f3\u6b64\uff0c\u60c5\u51b5\u4e00\u8bc1\u660e\u5b8c\u6bd5\u3002

\u60c5\u51b5\u4e8c

\ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b

\ud83e\udea7 \u8bc1\u660e\uff1a\u524d\u9762\u7684\u90e8\u5206\u548c\u60c5\u51b5\u4e00\u7684\u7c7b\u4f3c\uff0c\u6211\u4eec\u901a\u8fc7\u76f8\u540c\u7684\u6b65\u9aa4\u5f97\u5230\u76f8\u540c\u7684\u6c42\u548c\u5f0f\uff1a

\\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

\u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

\\[\\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}a^j\\Theta\\left(\\left(\\frac{N}{b^j}\\right)^{\\log_b{a}}\\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\sum_{j=0}^{(\\log_b{N})-1}\\left(\\frac{a}{b^{\\log_b{a}}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\log_b{N} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}\\log{N}) \\end{aligned}\\]

\u81f3\u6b64\uff0c\u60c5\u51b5\u4e8c\u8bc1\u660e\u5b8c\u6bd5\u3002

\u60c5\u51b5\u4e09

\ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

\ud83e\udea7 \u8bc1\u660e\uff1a\u60c5\u51b5\u4e09\u7684\u8bc1\u660e\uff0c\u4ece\u6761\u4ef6\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u770b\u51fa\u6765\u548c\u524d\u9762\u7a0d\u8bb8\u6709\u4e9b\u4e0d\u540c\u4e86\u3002\u4e0d\u8fc7\u6c42\u548c\u5f0f\u7684\u5f97\u5230\u8fd8\u662f\u4e00\u6837\uff0c\u901a\u8fc7\u548c\u4e4b\u524d\u4e00\u6837\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u9996\u5148\u5f97\u5230\u6c42\u548c\u5f0f\uff1a

\\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

\u63a5\u4e0b\u6765\u7684\u6b65\u9aa4\u548c\u4e4b\u524d\u4e0d\u540c\u3002\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u89c2\u5bdf\u4e0d\u7b49\u5f0f \\(af(\\frac{N}{b})<cf(N)\\)\uff0c\u5728\u6211\u4eec\u7684\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u6211\u4eec\u6709\u5927\u91cf\u7684\u5f62\u5982 \\(a^jf(\\frac{N}{b^j})\\) \u7684\u9879\uff0c\u800c\u8fd9\u4e9b\u9879\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fed\u4ee3\u4e0a\u9762\u90a3\u4e2a\u4e0d\u7b49\u5f0f\u6765\u5b9e\u73b0\uff0c\u5373\uff1a

\\[ a^jf(\\frac{N}{b^j}) < c\\times a^{j-1}f(\\frac{N}{b^{j-1}}) < ... < c^j f(N) \\]

\u5c06\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\u5e94\u7528\u4e8e\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\uff1a

\\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j=0}^{(\\log_b{N})-1}c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{c^{1-\\log_b{N}}}{1-c} \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\end{aligned} \\]

\u800c\u7531\u4e8e \\(c<1\\)\uff0c\u6240\u4ee5 \\(\\log_b{c} < 0\\)\uff1b\u800c \\(N > 0\\)\uff0c\u800c\u4e14\u4e00\u822c\u975e\u5e38\u5927\uff0c\u6240\u4ee5 \\(N^{\\log_b{c}} \\in (0,1)\\)\u3002\u56e0\u6b64\uff0c\u5bf9\u4e8e\u786e\u5b9a\u7684\u5e38\u6570 \\(c\\)\uff0c\u6211\u4eec\u6709 \\(\\frac{1-N^{\\log_b{c}}}{1-c} \\in \\left(0, \\frac{1}{1-c}\\right)\\)\uff1b

\u56e0\u6b64\uff0c\u4e0a\u5f0f\u4fbf\u80fd\u6539\u53d8\u4e3a\uff1a

\\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1}{1-c} \\end{aligned} \\]

\u5e76\u4e14\uff0c\u7531\u4e8e \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u6240\u4ee5\u6839\u636e\u7b26\u53f7\u5b9a\u4e49\u53ef\u4ee5\u5f97\u5230 \\(T(N) = O(f(N))\\)\u3002

\u800c\u6211\u4eec\u77e5\u9053\uff0c\u8981\u8bc1\u660e \\(T(N) = \\Theta(f(N))\\) \u8fd8\u9700\u8981\u8bc1\u660e \\(T(N) = \\Omega(f(N))\\)\uff1a

\\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq f(N) \\end{aligned} \\]

\u7531\u6b64\u5f97\u5230 \\(T(N) = \\Omega(f(N))\\)\uff0c\u6700\u7ec8\u8bc1\u5f97 \\(T(N) = \\Theta(f(N))\\)\uff0c\u81f3\u6b64\uff0c\u60c5\u51b5\u4e09\u8bc1\u660e\u5b8c\u6bd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e8c","title":"\u5f62\u5f0f\u4e8c","text":"

Form 2

\u5bf9\u4e8e\u5f62\u5982 \\(T(N) = aT(\\frac{N}{b}) + f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

  1. \u82e5 \\(af(\\frac{N}{b}) = \\kappa f(N) \\text{ for fixed } \\kappa < 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N))\\)\uff1b
  2. \u82e5 \\(af(\\frac{N}{b}) = \\Kappa f(N) \\text{ for fixed } \\Kappa > 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(N^{\\log_b{a}}) = \\Theta(a^{\\log_b{N}})\\)\uff08\u4e2a\u4eba\u611f\u89c9\u540e\u9762\u90a3\u4e2a\u5f0f\u5b50\u66f4\u65b9\u4fbf\u76f4\u89c2\u8bb0\u5fc6\uff09\uff1b
  3. \u82e5 \\(af(\\frac{N}{b}) = f(N)\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N) \\log_b N)\\)\uff1b
"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e_1","title":"\u8bc1\u660e","text":"

proof for form 2

\u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u57fa\u4e8e\u7ebf\u6027\u5173\u7cfb\u7684\u5f62\u5f0f\u4e8c\u7684\u8bc1\u660e\u5b9e\u9645\u4e0a\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u975e\u5e38\u76f8\u50cf\u3002

\u5047\u8bbe\u6211\u4eec\u6709 \\(af(\\frac{N}{b}) = c f(N)\\)\uff0c\u53ea\u9700\u8981\u8ba8\u8bba \\(c\\) \u7684\u53d6\u503c\u8303\u56f4\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\uff0c\u5c31\u53ef\u4ee5\u4e00\u6b21\u6027\u5f97\u5230\u7ed3\u679c\u3002

\u7c7b\u4f3c\u4e8e\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\uff0c\u6211\u4eec\u8fed\u4ee3\u8be5\u5173\u7cfb\u5f0f\uff0c\u5f97\u5230\u5173\u7cfb\uff1a

\\[ a^j f(\\frac{N}{b^j}) = c^j f(N) \\]

\u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

\\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j = 0}^{(\\log_b{N})-1} c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ \\end{aligned} \\]

\u5929\u5450\uff0c\u8fd9\u4e0d\u5c31\u662f\u5f62\u5f0f\u4e00\u91cc\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u5f0f\u5b50\u5417\uff1f\u7136\u800c\u5f53\u6211\u4eec\u6ee1\u5fc3\u6b22\u559c\u5730\u6253\u7b97\u7167\u7740\u5b83\u8bc1\u660e\u5f62\u5f0f\u4e8c\u7684\u60c5\u51b5\u4e00\u65f6\u4f1a\u53d1\u73b0\uff0c\u6761\u4ef6\u597d\u50cf\u4e0d\u591f\u3002\u6211\u4eec\u73b0\u5728\u5e76\u6ca1\u6709\u663e\u5f0f\u7684 \\(f(N) = \\Omega(N^{\\log_b {a}} + \\epsilon)\\) \u7684\u6761\u4ef6\uff0c\u800c\u8fd9\u4e2a\u6761\u4ef6\u6700\u7ec8\u51b3\u5b9a conquer \u90e8\u5206\u548c combine \u90e8\u5206\u8c01\u5360\u4e3b\u5bfc\u5730\u4f4d\u3002\u4f46\u662f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u53ea\u9700\u8981\u5f97\u5230 \\(f(N)\\) = \\(\\Omega(N^{\\log_b {a}})\\) \u5c31\u591f\u4e86\u3002\u5176\u5b9e \\(af(\\frac{N}{b}) \\sim c f(N)\\) \u8fd9\u4ef6\u4e8b\u672c\u8eab\u5c31\u6697\u542b\u4e86\u5b83\u4e0e \\(N^{\\log_b {a}}\\) \u7684\u5173\u7cfb\uff1a

\u4e3a\u4e86\u91cd\u590d\u5229\u7528\u8fc7\u7a0b\uff0c\u6211\u76f4\u63a5\u7528 \\(\\sim\\) \u6765\u4ee3\u66ff \\(<,>,=\\) \u4e86\uff0c\u8fc7\u7a0b\u4e2d\u4fdd\u6301\u4f20\u9012\u6027\u3002

\\[ c f(N) \\sim a f(\\frac{N}{b}) \\sim ... \\sim a^L f(\\frac{N}{b^L}) \\]

\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e00\u6b65\u8fd8\u662f\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\u3002\u53ea\u4e0d\u8fc7\u73b0\u5728\u6211\u4eec\u8981\u66f4\u8fdb\u4e00\u6b65\u5730\u770b\u8fd9\u4e2a\u5f0f\u5b50\u3002

\u5f53 \\(c < 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) > af(\\frac{N}{b})\\)\uff1b\u5f53 \\(c = 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) = af(\\frac{N}{b})\\)\uff1b \\(c > 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) < af(\\frac{N}{b})\\)\uff1b

\u6211\u4eec\u5047\u8bbe \\(\\frac{N}{b^L}\\) \u8db3\u591f\u5c0f\uff08\u5373\u9012\u5f52\u5230\u6700\u672b\u7aef\uff0c\u53ea\u9700\u8981\u8fdb\u884c conquer \u7684\u65f6\u5019\uff09\uff0c\u5373 \\(\\frac{N}{b^L} = \\Theta(1)\\)\uff0c\u90a3\u4e48\u5c31\u6709 \\(L = \\Theta(\\log_b{N})\\)\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

\\[ f(N) \\sim \\Theta(a^{\\log_b{N}}) = \\Theta(N^{\\log_b{a}}) \\]

\u7686\u5927\u6b22\u559c\uff01\u4e09\u4e2a\u613f\u671b\uff0c\u4e00\u6b21\u6ee1\u8db3\uff01

\u5269\u4e0b\u7684\u8bc1\u660e\u8fc7\u7a0b\u6211\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e09","title":"\u5f62\u5f0f\u4e09","text":"

Form 3

\u7b2c\u4e09\u79cd\u5f62\u5f0f\u662f\u5bf9\u4e8e \\((N)\\) \u7684\u7279\u522b\u5f62\u5f0f\uff0c\u5f53\u9012\u63a8\u5173\u7cfb\u6ee1\u8db3\uff1a

\\[ \\begin{aligned} & T(N) = a T(\\frac{n}{b}) + \\Theta(N^k \\log^p{N}) & \\text{Where } a \\geq 1,\\; b > 1,\\; p \\geq 0 \\end{aligned} \\]

\u5176\u590d\u6742\u5ea6\u6709\u7ed3\u8bba\uff1a

\\[ T(N) = \\left\\{ \\begin{aligned} & O(N^{\\log_b{a}}) & \\text{if } a > b^{k} \\\\ & O(N^k \\log^{p+1}{N}) & \\text{if } a = b^{k} \\\\ & O(N^k \\log^{p}{N}) & \\text{if } a < b^{k} \\end{aligned} \\right. \\]

\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u5f0f\u5b50\u4e5f\u975e\u5e38\u597d\u8ba4\uff0c\u5c5e\u4e8e\u5f62\u5f0f\u4e8c\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u3002\u53ef\u4ee5\u5bf9\u7167\u7740\u770b\uff0c\u975e\u5e38\u5bb9\u6613\u770b\u51fa\u5173\u7cfb\u3002

\u53ea\u4e0d\u8fc7\u5bf9\u4e8e\u7279\u6b8a\u60c5\u51b5\uff0c\u8fd9\u4e2a\u5f62\u5f0f\u7684\u7ea6\u675f\u66f4\u52a0\u7cbe\u786e\uff0c\u8bc1\u660e\u8fc7\u7a0b\u6709\u7f18\u518d\u8865\u5427x

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec08/","title":"Lecture 8 | Dynamic Programming","text":"

\u7ea6 4 \u4e2a\u5b57

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/","title":"Lecture 9 | Greedy Algorithms","text":"

\u7ea6 895 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f

\u679c\u7136\u8d8a\u6765\u8d8a\u5bbd\u6cdb\u4e86

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

\u8d2a\u5fc3\u7b97\u6cd5(Greedy Algorithms)\u662f\u4e00\u79cd\u5728\u6c42\u89e3\u4f18\u5316\u95ee\u9898\u65f6\u91c7\u7528\u7684\u7b56\u7565\uff0c\u5b83\u5728\u6bcf\u4e2a\u51b3\u7b56\u9636\u6bb5\u90fd\u9009\u62e9\u5f53\u524d\u770b\u8d77\u6765\u6700\u4f18\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4ece\u800c\u5e0c\u671b\u80fd\u591f\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u89e3\u3002\u8d2a\u5fc3\u7b97\u6cd5\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c40\u90e8\u6700\u4f18\u9009\u62e9\uff0c\u901a\u8fc7\u4e00\u7cfb\u5217\u5c40\u90e8\u6700\u4f18\u7684\u9009\u62e9\uff0c\u6765\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u7684\u76ee\u6807\u3002\u8d2a\u5fc3\u7b97\u6cd5\u6613\u4e8e\u5b9e\u73b0\uff0c\u4f46\u5e76\u4e0d\u603b\u662f\u80fd\u591f\u5f97\u5230\u5168\u5c40\u6700\u4f18\u89e3\uff0c\u56e0\u6b64\u5728\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\u65f6\u9700\u8981\u5206\u6790\u95ee\u9898\u7684\u7279\u6027\u4ee5\u786e\u4fdd\u5176\u9002\u7528\u6027\u3002

\u2014\u2014ChatGPT

\u8d2a\u5fc3\u601d\u60f3\u548c\u5b83\u7684\u540d\u5b57\u4e00\u6837\u7b80\u5355\u66b4\u529b\uff0c\u5c31\u662f\u5728\u6bcf\u4e00\u4e2a\u6b65\u9aa4\u4e2d\u90fd\u91c7\u53d6\u5c40\u90e8\u6700\u4f18\u89e3\uff0c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u3002\u4f46\u662f\u663e\u7136\u8fd9\u4e2a\u65b9\u6cd5\u5e76\u4e0d\u603b\u80fd\u201c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u201d\u3002\u56e0\u6b64\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u76f4\u63a5\u66b4\u529b\uff0c\u4f46\u662f\u5982\u4f55\u627e\u5230\u7528\u300c\u8d2a\u5fc3\u300d\u89e3\u51b3\u95ee\u9898\u7684\u8def\u5f84\uff0c\u5f80\u5f80\u662f\u9700\u8981\u52a8\u52a8\u8111\u5b50\u7684\u3002

\u548c dp \u4e00\u6837\uff0c\u8d2a\u5fc3\u662f\u4e00\u4e2a\u6bd4\u8f83\u601d\u60f3\u6027\u8d28\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u501f\u52a9\u8bb8\u591a\u6848\u4f8b\u6765\u8fdb\u884c\u5206\u6790\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6848\u4f8b-activity-selection-problem","title":"[\u6848\u4f8b] Activity Selection Problem","text":"

\u5728\u8bfe\u4ef6\u4e0a\uff0c\u6d3b\u52a8\u9009\u62e9\u95ee\u9898(Activity Selection Problem)\u7684\u9648\u8ff0\u5982\u4e0b\uff1a

Activity Selection Problem

Given a set of activities \\(S = { a_1, a_2, ..., a_n }\\) that wish to use a resource (e.g. a classroom). Each \\(a_i\\) takes place during a time interval \\([s_i, f_i)\\).

Activities \\(a_i\\) and \\(a_j\\) are compatible if \\(s_i \\geq f_j\\) or \\(s_j \\geq f_i\\) (i.e. their time intervals do not overlap).

Goal: Select a maximum-size subset of mutually compatible activities.

\u62bd\u8c61\u6765\u8bf4\u5c31\u662f\u4e00\u4e2a\u4e00\u7ef4\u7684\u5bc6\u94fa\u95ee\u9898\u3002\u7ed9\u5b9a\u65f6\u95f4\u7ebf\u4e0a\u7684\u82e5\u5e72\u533a\u95f4 \\([s_i, f_i)\\)\uff0c\u6c42\u51fa\u6700\u591a\u80fd\u4e0d\u91cd\u53e0\u5730\u5728\u8fd9\u4e2a\u65f6\u95f4\u7ebf\u4e0a\u653e\u7f6e\u591a\u5c11\u4e2a\u533a\u95f4\u3002\u9898\u76ee\u989d\u5916\u4fdd\u8bc1\u4e86\u8f93\u5165\u6570\u636e\u662f\u6839\u636e \\(f_i\\) \u6709\u5e8f\u7684\uff0c\u4e0d\u8fc7\u8fd9\u4e0d\u662f\u5f88\u91cd\u8981\u3002

bad try 1

\u4e00\u4e2a\u975e\u5e38 naive \u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u54ea\u95e8\u8bfe\u5148\u5f00\u59cb\u6211\u5148\u9009\u54ea\u95e8\u8bfe\uff0c\u8fd9\u4e2a\u60f3\u6cd5\u975e\u5e38\u7684\u8282\u7701\u8111\u7ec6\u80de\uff0c\u4f46\u662f\u663e\u7136\u4e0d\u5bf9\u3002\u6211\u968f\u968f\u4fbf\u4fbf\u6765\u4e2a\u6700\u65e9\u5f00\u59cb\u6700\u665a\u7ed3\u675f\u7684\u8bfe\uff0c\u5c31\u80fd\u76f4\u63a5 hack \u6389\u8fd9\u4e2a\u65b9\u6cd5\u3002

bad try 2

\u518d\u6765\u4e00\u4e2a\u5929\u771f\u7684\u60f3\u6cd5\uff0c\u6211\u6bcf\u6b21\u90fd\u9009\u533a\u95f4\u957f\u5ea6\u6700\u5c11\u7684\uff0c\u867d\u7136\u770b\u8d77\u6765\u80fd\u8ba9\u5b83\u201c\u76f8\u5bf9\u6bd4\u8f83\u591a\u201d\uff0c\u4f46\u662f\u663e\u7136\u4e5f\u65e0\u6cd5\u4fdd\u8bc1\u7ed3\u679c\u7684\u6700\u4f18\u6027\uff0c\u4e5f\u975e\u5e38\u597d hack\u3002

search

\u800c\u53e6\u5916\u4e00\u4e2a\u66b4\u529b\u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u6211\u53bb\u679a\u4e3e\u6bcf\u4e00\u79cd\u53ef\u80fd\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4fd7\u79f0\u7684\u66b4\u641c\uff0c\u8fd8\u53ef\u4ee5\u7528\u4e0a\u526a\u679d\u7b49\u64cd\u4f5c\uff0c\u867d\u7136\u53ef\u4ee5\uff0c\u4f46\u662f\u592a\u4e0d\u4f18\u96c5\u4e86\uff0c\u800c\u4e14\u65f6\u95f4\u590d\u6742\u5ea6\u672a\u5fc5\u662f\u6211\u4eec\u80fd\u63a5\u53d7\u7684\u3002

dp

\u65e2\u7136\u66b4\u641c\u4e0d\u884c\uff0c\u90a3\u8bd5\u8bd5 dp \u5462\uff1f\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u51fa\u5982\u4e0b\u8f6c\u79fb\u65b9\u7a0b\uff1a

\\[ dp_i = \\left\\{ \\begin{aligned} &1 & i = 1 \\\\ &\\max\\{ dp_{i-1}, dp_{f(i)} + 1 \\} & i > 1 \\end{aligned} \\right. \\]

\u5176\u4e2d\uff0c\\(dp_i\\) \u8868\u793a\u5230\u7b2c \\(i\\) \u4e2a\u533a\u95f4\u622a\u6b62\u7684\u65f6\u95f4\u4e3a\u6b62\uff0c\u6700\u591a\u6709\u591a\u5c11\u4e2a\u9879\u76ee\u53ef\u4ee5\u88ab\u5b89\u6392\uff1b\\(f(i)\\) \u662f\u6700\u5927\u7684\u6ee1\u8db3 \\(f_j \\leq s_i\\) \u7684\u533a\u95f4\u7684\u7f16\u53f7 \\(j\\)\uff0c\u4e5f\u5c31\u662f\u80fd\u591f\u4e0d\u91cd\u53e0\u653e\u4e0b\u7684\uff0c\u6700\u665a\u7684\u90a3\u4e2a\u6d3b\u52a8\u3002

\u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u4e48\u505a\u662f\u53ef\u4ee5\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd9\u6837\u505a\u7684\u8bdd\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

greedy

\u663e\u7136\uff0c\u8fd9\u4e2a\u6848\u4f8b\u653e\u5728\u8fd9\u4e2a\u5730\u65b9\u80af\u5b9a\u662f\u6709\u8d2a\u5fc3\u89e3\u7684\u3002\u800c\u4e14\u9898\u76ee\u7684 \u201cAssume\u201d \u63d0\u793a\u6027\u5df2\u7ecf\u5f88\u5f3a\u4e86\u3002\u6211\u4eec\u53ea\u9700\u8981\u6309\u7167\u7ed3\u675f\u65f6\u95f4\uff0c\u904d\u5386\u8fd9\u4e9b\u533a\u95f4\uff0c\u80fd\u585e\u4e0b\u5c31\u585e\uff0c\u5373\u53ef \\(O(N)\\) \u8d2a\u5fc3\u6c42\u89e3\u3002

TODO:

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/","title":"Lecture 10 | NP Completeness","text":"

\u7ea6 3027 \u4e2a\u5b57 10 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

\u5bfc\u8bfb

\u7531\u4e8e\u672c\u8282\u6d89\u53ca\u8f83\u591a\u6982\u5ff5\uff0c\u5e76\u4e14\u77e5\u8bc6\u6811\u957f\u7684\u5f88\u84ec\u677e\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u5c1d\u8bd5\u975e\u7ebf\u6027\u7ec4\u7ec7\u5185\u5bb9\uff0c\u56e0\u6b64\u672c\u6587\u7684\u9605\u8bfb\u987a\u5e8f\u53ef\u80fd\u4e5f\u5e76\u4e0d\u4f1a\u662f\u7ebf\u6027\u7684\u3002

\u6240\u6709\u63d0\u5230\u7684\u3001\u5e76\u4e14\u672c\u6587\u4f1a\u4ecb\u7ecd\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u90fd\u4f1a\u4ee5\u94fe\u63a5\u548c\u653e\u5927\u955c\ud83d\udd0d\u7684\u5f62\u5f0f\u51fa\u73b0\u3002\u63a8\u8350\u4f7f\u7528\u9f20\u6807\u4e2d\u952e\u7b49\u65b9\u5f0f\u6253\u5f00\u65b0\u6807\u7b7e\u9875\u67e5\u770b\uff0c\u65b9\u4fbf\u56de\u6eaf\u3002

\u63a8\u8350\u7684\u9605\u8bfb\u987a\u5e8f\u662f\uff0c\u987a\u7740\u8bfb\u4e0b\u53bb\uff0c\u6bcf\u6b21\u51fa\u73b0 \ud83d\udd0d \u90fd\u8fdb\u884c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\u5f0f\u7684\u5b66\u4e60\uff0c\u76f4\u81f3\u770b\u5b8c\u5168\u6587\u3002

\u5176\u4e2d\uff0c\u5728 \u76f8\u5173\u6982\u5ff5 \u4e4b\u540e\u7684\u90e8\u5206\uff0c\u6211\u4f1a\u4fdd\u8bc1\u5728\u524d\u9762\u90fd\u6709\u63d0\u53ca\uff0c\u800c\u5176\u4e4b\u524d\u7684\u5185\u5bb9\uff0c\u63a8\u8350\u90fd\u5728\u987a\u5e8f\u9605\u8bfb\u4e2d\u6d89\u53ca\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

Links

OI Wiki: https://oi-wiki.org/misc/cc-basic/

Wikipedia: https://en.wikipedia.org/wiki/P_versus_NP_problem

Wikipedia: https://en.wikipedia.org/wiki/NP-completeness

Wikipedia: https://en.wikipedia.org/wiki/NP-hardness

\u6839\u636e\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u7531\u4e0d\u540c\u7684\u5b9a\u4e49\u5212\u5206\uff0c\u95ee\u9898\u53ef\u4ee5\u5206\u4e3a\uff1a

P \u95ee\u9898(polynomial time)\u3001NP \u95ee\u9898(nondeterministic polynomial time)\u3001NPC \u95ee\u9898(NP complete)\u3001NPH \u95ee\u9898(NP hard)\u3002\u9664\u6b64\u4e4b\u5916 \uff0c\u6211\u4eec\u8fd8\u9700\u8981\u989d\u5916\u4e86\u89e3\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898(undecidable)\u3002

\u7531\u4e8e\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u6bd4\u8f83\u7279\u6b8a\uff0c\u6240\u4ee5\u6211\u5148\u653e\u5728\u524d\u9762\u4ecb\u7ecd\u3002

Undecidable Problem

Links

Wikipedia: https://en.wikipedia.org/wiki/Undecidable_problem

\u4e0d\u53ef\u5224\u5b9a\u95ee\u9898(undecidable problem)\u662f\u4e00\u7c7b\u7279\u6b8a\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff0c\u5b83\u7684\u7279\u70b9\u662f\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u6c42\u89e3\u5b83\u7684\u7ed3\u679c\u3002

\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5178\u578b\u7684\u4f8b\u5b50\u5c31\u662f\u505c\u673a\u95ee\u9898\ud83d\udd0d\u3002

\u6211\u4eec\u53ef\u4ee5\u7528\u8fd9\u6837\u4e00\u5f20\u56fe\u6765\u8868\u793a\u5176\u4ed6\u51e0\u4e2a\u6982\u5ff5\u7684\u5173\u7cfb\uff1a

Source: https://en.wikipedia.org/wiki/NP-hardness

\u53ef\u4ee5\u7c97\u6d45\u7684\u6309\u7167\u56fe\u4e2d\u7684\u201cComplexity\u201d\u8f74\u6765\u7406\u89e3\u5176\u4e2d\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u63a5\u4e0b\u6765\u7ed9\u51fa\u5b83\u4eec\u7684\u8be6\u7ec6\u5b9a\u4e49\uff1a

P

P \u53d6\u81ea polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

NP

NP \u5373 nondeterministic polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002\u8fd9\u4e2a\u8bf4\u6cd5\u7b49\u4ef7\u4e8e\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\uff08\u5224\u65ad\u7b54\u6848\u662f\u5426\u6b63\u786e\uff09\u3002

\u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\u7684\u95ee\u9898\u3002

NPC

NPC \u5373 NP complete\uff0cNP \u5b8c\u5168\uff0c\u662f NP \u4e2d\u6700\u96be\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u65e0\u9650\u5b9a\u8bcd\u7684\u6700\u96be\u7684\u95ee\u9898\uff01\uff09\u3002\u800c\u6211\u4eec\u79f0\u6ee1\u8db3\u5982\u4e0b\u6761\u4ef6\u7684\u95ee\u9898\u4e3a NPC \u95ee\u9898\uff1a

  1. \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. \u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff1b

\u7531 2 \u53ef\u4ee5\u6709\u7ed3\u8bba\uff0c\u6240\u6709\u7684 NPC \u95ee\u9898\u96be\u5ea6\u76f8\u540c\u2014\u2014\u4e00\u65e6\u6709\u4e00\u4e2a NPC \u95ee\u9898\u88ab\u89e3\u51b3\uff0c\u90a3\u4e48\u6240\u6709 NPC \u95ee\u9898\uff0c\u4e43\u81f3\u6240\u6709 NP \u95ee\u9898\u90fd\u80fd\u88ab\u89e3\u51b3\u3002

\u5982\u679c\u6211\u4eec\u8bd5\u56fe\u8bc1\u660e\u4e00\u4e2a\u95ee\u9898\u662f NPC \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fd9\u79cd\u624b\u6bb5\uff1a

  1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH\uff08\u5728\u4e0b\u9762\uff09\u95ee\u9898\uff1b

\u7b2c\u4e00\u4e2a\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\u662f Circuit-SAT\ud83d\udd0d \u95ee\u9898\u3002

P ?= NP & NPC

\u5173\u4e8e P \u548c NP \u7684\u5173\u7cfb\uff0c\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053 P \u662f\u5426\u80fd\u7b49\u4e8e NP\uff0c\u5373\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u662f\u5426\u5b58\u5728\u591a\u9879\u5f0f\u7b97\u6cd5\u53ef\u4ee5\u89e3\u51b3\u4e00\u5207 NP \u95ee\u9898\u3002

\u800c\u5176\u4e2d\u7684\u5173\u952e\u5c31\u662f\uff0c\u5982\u679c\u6211\u4eec\u80fd\u627e\u5230 NPC \u95ee\u9898\u7684\u591a\u9879\u5f0f\u89e3\u6cd5\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u8bc1\u660e P = NP\u3002

NPH

NPH \u5373 NP hard\uff0cNP \u56f0\u96be\uff0c\u5b83\u4e0d\u4e00\u5b9a\u9700\u8981\u662f NP \u95ee\u9898\u3002\u800c\u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a NPH \u95ee\u9898\u3002

\u4e5f\u5c31\u662f\u8bf4 \\(NPC = NP \\cap NPH\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u8bfe\u5185\u6848\u4f8b","title":"\u8bfe\u5185\u6848\u4f8b","text":"

\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u90fd\u662f\u8bfe\u4ef6\u4e2d\u63d0\u5230\u7684\u4e00\u4e9b\u5177\u4f53\u95ee\u9898\u548c\u6848\u4f8b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#halting-problem","title":"Halting Problem","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Halting_problem

\u505c\u673a\u95ee\u9898\u662f\u4e00\u4e2a\u5178\u578b\u7684\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\uff0c\u5b83\u6307\u7684\u662f\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u5224\u65ad\u5b83\u662f\u5426\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u505c\u673a\uff08\u5373\u5224\u65ad\u7a0b\u5e8f\u662f\u5426\u4f1a\u6b7b\u5faa\u73af\uff09\u3002

\u6211\u4eec\u901a\u8fc7\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\uff1a

\u5047\u8bbe\u5b58\u5728\u51fd\u6570 willHalt(func F) \u53ef\u4ee5\u5224\u65ad\u51fd\u6570 F \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5982\u679c\u4f1a\uff0c\u5219\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u8fd9\u6837\u7684\u51fd\u6570 foo()\uff1a

void foo() {\nif ( willHalt(foo) ) {\nwhile (true) {} // Endless loop.\n}\nreturn;\n}\n

\u63a5\u4e0b\u6765\uff0c\u5982\u679c\u6211\u4eec\u60f3\u77e5\u9053 foo() \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5c31\u4f1a\u6267\u884c willHalt(foo)\u3002\u7136\u800c\u5728 foo() \u5185\u90e8\u4e5f\u6709\u4e00\u4e2a willHalt(foo)\uff0c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4f1a\u505c\u673a\uff0c\u5219\u6784\u9020\u4e00\u4e2a\u6b7b\u5faa\u73af\uff1b\u800c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4e0d\u4f1a\u505c\u673a\uff0c\u5219\u9009\u62e9\u8ba9\u5b83\u7acb\u523b\u505c\u673a\uff0c\u4e8e\u662f\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u77db\u76fe\u3002

\u7406\u89e3\u4e0a\u9762\u8fd9\u6bb5\u5185\u5bb9\u7684\u5173\u952e\u5c31\u662f\uff0c\u8fd9\u91cc\u867d\u7136\u4e0d\u5b58\u5728\u4e8b\u5b9e\u610f\u4e49\u4e0a\u7684\u201c\u6b7b\u5faa\u73af\u201d\uff0c\u4f46\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u903b\u8f91\u4e0a\u7684\u9012\u5f52\uff0c\u800c\u8fd9\u79cd\u201c\u903b\u8f91\u4e0a\u7684\u9012\u5f52\u201d\uff0c\u6b63\u662f\u5bfc\u81f4\u505c\u673a\u95ee\u9898\u6210\u4e3a\u4e00\u4e2a\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u7684\u539f\u56e0\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#hamilton-cycle-problem","title":"Hamilton Cycle Problem","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Hamiltonian_path_problem

OI Wiki: https://oi-wiki.org/graph/hamilton

\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898

\u7ed9\u5b9a\u4e00\u4e2a\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\u3002

\u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#traveling-salesman-problem","title":"Traveling Salesman Problem","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Travelling_salesman_problem

\u65c5\u884c\u5546\u95ee\u9898

\u65c5\u884c\u5546\u95ee\u9898\u6709\u4e24\u79cd\u5b9a\u4e49\uff0c\u5176\u4e2d\u524d\u8005\u662f NPH\uff0c\u800c\u88ab\u79f0\u4e3a\u201c\u5224\u5b9a\u7248\u672c\u201d\u7684\u540e\u8005\u662f NPC\u3002

\u539f\u59cb\u5b9a\u4e49\u5224\u5b9a\u7248\u672c

\u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u6700\u77ed\u3002

\"Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?\"

From Wikipedia

\u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u7ec4\u5408\u4f18\u5316\u7684\u8bed\u5883\u4e2d\u3002

\u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7 \\(k\\)\u3002

\u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u590d\u6742\u5ea6\u7406\u8bba\u7684\u8bed\u5883\u4e2d\u3002

\u9700\u8981\u6ce8\u610f\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u8c08\u8bba\u7684\u90fd\u662f\u5224\u5b9a\u7248\u672c\u7684 TSP\uff01

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u5224\u5b9a\u7248\u672c\u7684-npc-\u8bc1\u660e","title":"\u5224\u5b9a\u7248\u672c\u7684 NPC \u8bc1\u660e","text":"

\u73b0\u5728\uff0c\u5047\u8bbe\u6211\u4eec\u5df2\u77e5 Hamilton Cycle Problem \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5c1d\u8bd5\u901a\u8fc7\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u7684\u65b9\u5f0f\u6765\u8bc1\u660e TSP \u4e5f\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

Recommended Reading

https://opendsa-server.cs.vt.edu/ODSA/Books/Everything/html/hamiltonianCycle_to_TSP.html

\u9996\u5148\u56de\u987e\u8bc1\u660e NPC \u7684\u6b65\u9aa4\uff1a

  1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH \u95ee\u9898\uff1b

\u4ee3\u5165\u5230\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u9700\u8981\u8bc1\u660e\uff1a

  1. TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
  2. Hamilton Cycle Problem \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\uff1b

TSP is NP

\u8bc1\u660e TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\u5373\u8bc1\u660e TSP \u7684\u89e3\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u88ab\u9a8c\u8bc1\u3002\u800c\u9a8c\u8bc1\u4e00\u4e2a\u89e3\u662f TSP \u95ee\u9898\u7684\u89e3\uff0c\u9700\u8981\u8bc1\u660e\u4e0b\u9762\u4e24\u4e2a\u70b9\uff1a

  1. \u8fd9\u6761\u8def\u5f84\u7ecf\u8fc7\u4e86\u6240\u6709\u8282\u70b9\u6070\u597d\u4e00\u6b21\uff1b
  2. \u8fd9\u6761\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7\\(k\\)\uff1b

\u663e\u7136\uff0c\u8fd9\u4e24\u6761\u90fd\u53ea\u9700\u8981 \\(O(N)\\) \u7684\u5f00\u9500\u5c31\u80fd\u9a8c\u8bc1\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u5f97\u5230\u7ed3\u8bba\uff1a\\(\\text{TSP} \\in \\text{NP}\\)\u3002

TSP is NPH

\u8981\u8bc1\u660e TSP \u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bc1\u660e Hamilton Cycle Problem(HCP) \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\u3002

\u4e3a\u6b64\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bd4 HCP \u548c TSP \u7684\u5dee\u5f02\u3002

\u4ee5 HCP \u4e3a\u57fa\u7840\u63cf\u8ff0 TSP\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u4e00\u5f20\u5b8c\u5168\u56fe\u4e0a\u5bfb\u627e\u603b\u957f\u4e0d\u8d85\u8fc7 \\(k\\) \u7684\u54c8\u5bc6\u987f\u73af\u8def\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

HCP TSP \u56fe \\(G(V,E)\\) \u5b8c\u5168\u56fe \\(G'(V',E')\\) \u65e0\u8fb9\u6743 \u6709\u8fb9\u6743 - \\(\\sum v_i \\leq k\\)

\u800c\u4e3a\u4e86\u8bc1\u660e \\(\\text{HCP} \\leq_p \\text{TCP}\\)\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e00\u4e2a\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u65b9\u6cd5 f() \u5b9e\u73b0 \\(G(V,E) \\to G'(V',E')\\)\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u505a\u8fd9\u4e9b\u4e8b\uff1a

  1. \u8fde\u63a5 \\(G\\) \u4e2d\u6240\u6709\u6ca1\u8fde\u4e0a\u7684\u8fb9\uff0c\u4f7f \\(G\\) \u6210\u4e3a\u4e00\u5f20\u65e0\u6743\u5b8c\u5168\u56fe\uff1b
  2. \u5bf9\u4e8e\u65e0\u6743\u5b8c\u5168\u56fe\u4e2d\u7684\u6bcf\u4e00\u6761\u8fb9 \\(v^c_i\\)\uff0c\u5982\u679c\u5728 \\(G\\) \u4e2d\u4e5f\u6709\u8fd9\u6761\u8fb9\uff0c\u90a3\u4e48\u4ee4\u5b83\u8fb9\u6743\u4e3a 0\uff0c\u5426\u5219\u4ee4\u5b83\u8fb9\u6743\u4e3a 1\uff0c\u4e8e\u662f\u5f97\u5230\u6709\u6743\u5b8c\u5168\u56fe \\(G'(V',E')\\)\uff1b

\u53f3\u56fe\u4e2d\u6240\u6709\u7684\u84dd\u8fb9\u8fb9\u6743\u90fd\u4e3a 0\uff0c\u7eff\u8fb9\u8fb9\u6743\u90fd\u4e3a 1\u3002

\u7531\u4e8e\u5b8c\u5168\u56fe\u7684\u8fb9\u6570\u4e3a \\(\\frac{n(n-1)}{2}\\)\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6b65\u9aa4\u663e\u7136\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u539f\u95ee\u9898\u4e3a\u5728 \\(G\\) \u4e0a\u5bfb\u627e\u54c8\u5bc6\u987f\u73af\uff0c\u7b49\u4ef7\u4e8e\u5728 \\(G' = f(G)\\) \u4e0a\u505a \\(k = 0\\) \u7684 TSP\u3002\u7531\u6b64\u8bc1\u660e \\(\\text{HCP} \\leq_{p} \\text{TSP}\\)\uff0c\u5373 \\(\\text{TSP} \\in \\text{NPH}\\)\u3002

\u7efc\u4e0a\u6240\u8ff0\uff0c\u7531\u4e8e \\(\\text{TSP} \\in \\text{NP}\\) \u4e14 \\(\\text{TSP} \\in \\text{NPH}\\)\uff0c\u6240\u4ee5 \\(\\text{TSP} \\in \\text{NPC}\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#circuit-sat","title":"Circuit-SAT","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

Circuit-SAT \u53c8\u53eb circuit satisfiability problem\uff0c\u5b83\u662f\u6700\u65e9\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\uff0c\u5373\u901a\u8fc7 NPC \u95ee\u9898\u7684\u5b9a\u4e49\u8bc1\u660e\u3002

\u5176\u5177\u4f53\u63cf\u8ff0\u5982\u4e0b\uff1a

Circuit-SAT

Circuit-SAT \u5373\u4e3a\u786e\u5b9a\u7ed9\u5b9a\u5e03\u5c14\u7535\u8def\u662f\u5426\u5177\u6709\u4f7f\u8f93\u51fa\u4e3a\u771f\u7684\u8f93\u5165\u5206\u914d\u7684\u51b3\u7b56\u7684\u95ee\u9898\u3002

Source: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

\u4e0a\u56fe\u4e2d\uff0c\u5de6\u4fa7\u7535\u8def\u6ee1\u8db3\u6761\u4ef6\uff0c\u53f3\u4fa7\u7535\u8def\u4e0d\u6ee1\u8db3\u6761\u4ef6\u3002

\u6216\u8005\uff0c\u66f4\u62bd\u8c61\u7684\u6765\u8bf4\uff0c\u662f\u5224\u65ad\u4e00\u4e2a\u5177\u6709 \\(n\\) \u4e2a\u5e03\u5c14\u53d8\u91cf\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u662f\u5426\u5177\u6709\u7ed3\u679c\u4e3a True \u7684\u89e3\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#3-sat","title":"3-SAT","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Boolean_satisfiability_problem#3-satisfiability

3-SAT \u6307\u7684\u662f Circuit-SAT \u95ee\u9898\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u5b83\u5bf9\u5e03\u5c14\u7535\u8def\uff0c\u6216\u8005\u8bf4\u5e03\u5c14\u8868\u8fbe\u5f0f\u7684\u5f62\u5f0f\u6709\u7279\u6b8a\u8981\u6c42\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u8981\u6c42\u5e03\u5c14\u8868\u8fbe\u5f0f\u5f62\u5982\uff1a

\\[ (x_1 \\vee x_2 \\vee x_3) \\wedge (x_4 \\vee x_5 \\vee x_6) \\wedge \\cdots \\wedge (x_{n-2} \\vee x_{n-1} \\vee x_n) \\] "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#a-formal-language-framework","title":"A formal-language Framework","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u76f8\u5173\u6982\u5ff5","title":"\u76f8\u5173\u6982\u5ff5","text":"

\u8bf4\u660e

\u4ee5\u4e0b\u90e8\u5206\u7684\u5185\u5bb9\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u8bf4\u660e\u4e0a\u6587\u4e2d\u90e8\u5206\u5185\u5bb9\u800c\u4ecb\u7ecd\u7684\u6982\u5ff5\uff0c\u5e76\u4e0d\u5177\u6709\u7ec4\u7ec7\u7ed3\u6784\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u56fe\u7075\u673a","title":"\u56fe\u7075\u673a","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Turing_machine

Wikipedia: https://en.wikipedia.org/wiki/Nondeterministic_Turing_machine

\u56fe\u7075\u673a\u6709\u4e00\u4e9b\u53d8\u4f53\uff0c\u800c\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u56fe\u7075\u673a\u662f\u4e3a\u4e86\u4ecb\u7ecd P/NP\uff0c\u53ea\u4ecb\u7ecd\u786e\u5b9a\u578b\u56fe\u7075\u673a\u548c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u3002

\u56fe\u7075\u673a\u7531\u4e00\u4e2a\u65e0\u9650\u957f\u7684\u7eb8\u5e26\u548c\u4e00\u4e2a\u8bfb\u5199\u5934\u7ec4\u6210\u3002\u7eb8\u5e26\u88ab\u5212\u5206\u4e3a\u4e00\u4e2a\u4e2a\u683c\u5b50\uff0c\u6bcf\u4e2a\u683c\u5b50\u4e0a\u6709\u4e00\u4e2a\u7b26\u53f7\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u5728\u7eb8\u5e26\u4e0a\u79fb\u52a8\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u8bfb\u53d6\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u4e5f\u53ef\u4ee5\u6539\u53d8\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u3002\u56fe\u7075\u673a\u7684\u72b6\u6001\u662f\u4e00\u4e2a\u6709\u9650\u96c6\u5408\uff0c\u6bcf\u4e2a\u72b6\u6001\u90fd\u6709\u4e00\u4e2a\u8f6c\u79fb\u51fd\u6570\uff0c\u8f6c\u79fb\u51fd\u6570\u7684\u8f93\u5165\u662f\u5f53\u524d\u72b6\u6001\u548c\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u8f93\u51fa\u662f\u4e0b\u4e00\u4e2a\u72b6\u6001\u3001\u4e0b\u4e00\u4e2a\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u548c\u8bfb\u5199\u5934\u7684\u79fb\u52a8\u65b9\u5411\u3002

\u66f4\u672c\u8d28\u7684\u6765\u8bf4\uff0c\u56fe\u7075\u673a\u662f\u4e00\u79cd\u8ba1\u7b97\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8868\u793a\u4efb\u4f55\u6709\u9650\u903b\u8f91\u6570\u5b66\u8fc7\u7a0b\u3002\u786e\u5b9a\u578b\u56fe\u7075\u673a\u4e0e\u6211\u4eec\u5e38\u89c4\u7406\u89e3\u7684\u8ba1\u7b97\u673a\u903b\u8f91\u7c7b\u4f3c\uff0c\u5373\u4e0b\u4e00\u6b65\u8981\u505a\u4ec0\u4e48\u53ef\u4ee5\u6839\u636e\u5f53\u524d\u72b6\u6001\u786e\u5b9a\u3002\u800c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u5219\u7c7b\u4f3c\u4e8e\u80fd\u591f\u8fdb\u884c\u65e0\u9650\u5e76\u884c\uff0c\u5e76\u4e14\u6700\u7ec8\u603b\u662f\u9009\u62e9\u901a\u5411\u6b63\u786e\u7b54\u6848\u7684\u65b9\u5411\u7684\u90a3\u6761\u8def\uff08\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5b83\u80fd\u5f00\u5e73\u884c\u5b87\u5b99\uff0c\u5e76\u4e14\u603b\u662f\u8ba9\u4f60\u89c2\u6d4b\u5230\u6b63\u786e\u7684\u90a3\u4e00\u4e2a\u5e73\u884c\u5b87\u5b99\uff09\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","title":"\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","text":"

Links

Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_reduction

\u6211\u4eec\u5f15\u5165 P/NP \u7b49\u8fd9\u4e9b\u6982\u5ff5\uff0c\u662f\u4e3a\u4e86\u8861\u91cf\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u800c\u5982\u4f55\u5728\u5177\u4f53\u7684\u201c\u95ee\u9898\u201d\u95f4\u4f20\u9012\u3001\u6bd4\u8f83\u8fd9\u79cd\u201c\u590d\u6742\u7a0b\u5ea6\u201d\uff0c\u5c31\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u7684\u76ee\u7684\u3002

graph LR;\nA[\"\u95ee\u9898 A\"]\nB[\"\u95ee\u9898 B\"]\nA ===>|\"\u591a\u9879\u5f0f\u65f6\u95f4\u8f6c\u5316\"| B

\u5982\u679c\u6211\u4eec\u80fd\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u590d\u6742\u5ea6\u5185\uff0c\u5c06\u95ee\u9898 A \u8f6c\u5316\u4e3a\u95ee\u9898 B\uff0c\u5219\u79f0\u95ee\u9898 A \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u4e3a B\uff0c\u8bb0\u4e3a \\(A \\leq_{p} B\\)\uff0c\u8868\u793a A \u4e0d\u4f1a\u6bd4 B \u96be\u3002

\u800c\u91c7\u53d6\u6570\u5b66\u8bed\u8a00\u6765\u63cf\u8ff0\uff0c\u5219\u662f\uff1a

\\[ \\begin{aligned} A \\leq_{p} B \\;\\;\\Leftrightarrow\\;\\; & \\exist f() \\text{ which runs in polynomial time}, \\\\ & s.t. \\;\\; \\forall x \\in A,\\; f(x) \\in B \\\\ & \\text{and}\\; \\forall f(x) \\in B,\\; y \\in A \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/","title":"Lecture 11 | Approximation","text":"

\u7ea6 5372 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 18 \u5206\u949f

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u7b97\u6cd5","title":"\u8fd1\u4f3c\u7b97\u6cd5","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Approximation_algorithm

\u5728\u4e0a\u4e00\u7ae0\u4e2d\u6211\u4eec\u4ecb\u7ecd\u4e86 P/NP \u95ee\u9898\uff0c\u800c\u5927\u5bb6\u666e\u904d\u8ba4\u4e3a P \u2260 NP\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5bf9\u4e8e\u67d0\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u65e0\u6cd5\u4f7f\u7528\u591a\u9879\u5f0f\u65f6\u95f4\u89e3\u51b3\uff0c\u800c\u5728\u95ee\u9898\u89c4\u6a21\u53d8\u5927\u65f6\uff0c\u8d8a\u53d1\u4e0d\u53ef\u63a5\u53d7\u3002

\u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u9000\u800c\u6c42\u5176\u6b21\uff0c\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u6c42\u4e00\u4e2a\u6bd4\u8f83\u4f18\u7684\u89e3\u3002\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u5c1d\u8bd5\u5bfb\u627e\u4e00\u79cd\u591a\u9879\u5f0f\u7b97\u6cd5\uff0c\u4f7f\u5f97\u5176\u7ed3\u679c\u59cb\u7ec8\u5728\u5173\u4e8e\u51c6\u786e\u89e3\u7684\u53ef\u63a5\u53d7\u504f\u5dee\u8303\u56f4\u5185\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7b97\u6cd5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u8fd1\u4f3c\u7b97\u6cd5(approximation algorithm)\u3002

\u6211\u4eec\u8bbe \\(f(n, x)\\) \u662f\u5bf9\u8f93\u5165\u5927\u5c0f\u4e3a \\(n\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u7ed3\u679c \\(x\\) \u7684\u6700\u574f\u60c5\u51b5\u7684\u4e00\u4e2a\u76f4\u89c2\u91cf\u5316\uff08\u4f8b\u5982 dist, weight...\uff09\uff0c\u82e5\u8bbe \\(x^*\\) \u4e3a\u51c6\u786e\u89e3\uff0c\\(x\\) \u4e3a\u7ed9\u5b9a\u7b97\u6cd5\u7ed3\u679c\uff0c\u5219\u6211\u4eec\u5b9a\u4e49\u8fd1\u4f3c\u6bd4(Approximation Ratio)\\(\\rho\\)\uff1a

\\[ \\forall n \\rho = \\max\\left\\{\\frac{f(n, x)}{f(n, x^*)}, \\frac{f(n, x^*)}{f(n, x)}\\right\\} \\]

\u5219\u79f0\u7ed9\u5b9a\u7b97\u6cd5\u4e3a \\(\\rho\\) \u8fd1\u4f3c\u7b97\u6cd5(\\(\\rho\\)-approximation algorithm)\u3002

\u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5

\u5728\u770b\u5230\u8fd1\u4f3c\u7b97\u6cd5\u65f6\uff0c\u6211\u8111\u5b50\u91cc\u4e00\u4e0b\u5b50\u6d6e\u73b0\u51fa\u4e86\u968f\u673a\u7b97\u6cd5\u7684\u6982\u5ff5\uff0c\u540c\u6837\u662f\u6c42\u51c6\u786e\u89e3\u7684\u8fd1\u4f3c\u89e3\uff0c\u4e24\u8005\u6709\u4f55\u533a\u522b\u5462\uff1f

hint: \u6700\u574f\u60c5\u51b5

\u8fd1\u4f3c\u7b97\u6cd5\u548c\u968f\u673a\u7b97\u6cd5\u6700\u5927\u7684\u533a\u522b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u8bbe\u8ba1\u3001\u5206\u6790\u3001\u8ba8\u8bba\u8fd1\u4f3c\u7b97\u6cd5\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u90fd\u662f\u5b83\u7684\u6700\u574f\u60c5\u51b5\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd1\u4f3c\u7b97\u6cd5\u662f\u5b8c\u5168\u53ef\u63a7\u7684\uff0c\u800c\u7eaf\u7cb9\u7684\u968f\u673a\u7b97\u6cd5\u5219\u662f\u901a\u8fc7\u6982\u7387\u6765\u51cf\u5c11\u574f\u60c5\u51b5\u51fa\u73b0\u7684\u53ef\u80fd\uff0c\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u7ea6\u675f\u3002\u8fd1\u4f3c\u7b97\u6cd5\u6700\u574f\u4e5f\u5c31\u574f\u5230 \\(\\rho\\)\uff0c\u800c\u968f\u673a\u7b97\u6cd5\u6700\u574f\u53ef\u4ee5\u574f\u5230\u6d77\u62c9\u9c81\u5927\u9646\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u8303\u5f0f","title":"\u8fd1\u4f3c\u8303\u5f0f","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_approximation_scheme

\u8fd1\u4f3c\u8303\u5f0f(approximation scheme)\u6307\u7684\u662f\u5bf9\u4e8e\u67d0\u4e2a\u4f18\u5316\u95ee\u9898\u7684\u4e00\u65cf\u76f8\u540c\u6a21\u5f0f\u7684\u7b97\u6cd5\uff0c\u5b83\u4eec\u6ee1\u8db3\u5bf9\u4e8e\u786e\u5b9a\u7684 \\(\\epsilon > 0\\)\uff0c\u7b97\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

\u53ef\u4ee5\u7c97\u7cd9\u5730\u7406\u89e3\u4e3a\uff1a\u201c\u8303\u5f0f\u201d\u662f\u4e00\u4e2a\u8f93\u51fa\u4e3a\u7b97\u6cd5\u7684\u7279\u6b8a\u51fd\u6570\uff0c\u800c \\(\\epsilon\\) \u662f\u201c\u8303\u5f0f\u201d\u7684\u4e00\u4e2a\u53c2\u6570\uff0c\u5bf9\u4e8e\u7279\u5b9a\u7684 \\(\\epsilon\\)\uff0c\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u7b97\u6cd5\uff08\u8fd9\u4e9b\u7b97\u6cd5\u6709\u7740\u76f8\u540c\u7684\u6a21\u5f0f\uff09\uff0c\u800c\u8fd9\u4e9b\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u7684\u7b97\u6cd5\uff0c\u90fd\u89e3\u51b3\u540c\u4e00\u4e2a\u95ee\u9898\uff0c\u5e76\u4e14\u5bf9\u4e8e\u4efb\u610f\u56fa\u5b9a\u7684 \\(\\epsilon\\) \u5176\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

\u800c\u5173\u4e8e \\(\\epsilon > 0\\) \u8fd9\u4e2a\u7ea6\u675f\uff0c\u662f\u56e0\u4e3a\u8fd1\u4f3c\u6bd4\u5fc5\u5b9a\u5927\u4e8e 1\u3002

\u800c\u6b64\u65f6\uff0c\u8fd9\u4e00\u65cf\u7684\u7b97\u6cd5\u7684\u590d\u6742\u5ea6\u53ef\u4ee5\u8868\u793a\u4e3a \\(O(f(n, \\epsilon))\\)\uff0c\u5982 \\(O(n^{2/\\epsilon}), O((\\frac{1}{\\epsilon})^2n^3)\\)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(polynomial-time approximation scheme, PTAS)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u548c \\(\\frac{1}{\\epsilon}\\) \u90fd\u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u5b8c\u5168\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(fully polynomial-time approximation scheme, FPTAS)\u3002

\u4e3a\u4ec0\u4e48\u8981\u533a\u5206 PTAS \u548c FPTAS \u5462\uff1f\u6211\u4eec\u89c2\u5bdf \\(\\epsilon\\) \u5bf9\u7b97\u6cd5\u7684\u5f71\u54cd\uff1a\u968f\u7740 \\(\\epsilon\\) \u7684\u51cf\u5c0f\uff0c\u8fd1\u4f3c\u6bd4\u9010\u6e10\u53d8\u5c0f\uff0c\u5373\u51c6\u786e\u5ea6\u63d0\u9ad8\uff1b\u800c \\(\\frac{1}{\\epsilon}\\) \u53d8\u5927\uff0c\u800c\u901a\u5e38\u6765\u8bf4 \\(\\frac{1}{\\epsilon}\\) \u4e0e\u7b97\u6cd5\u590d\u6742\u5ea6\u90fd\u662f\u6b63\u76f8\u5173\u7684\uff0c\u56e0\u6b64\u4f1a\u5bfc\u81f4\u7b97\u6cd5\u590d\u6742\u5ea6\u5347\u9ad8\u3002\u5982\u679c\u8bf4\u8fd9\u4e2a\u8fd1\u4f3c\u8303\u5f0f\u662f FPTAS\uff0c\u90a3\u4e48\u4e3a\u4e86\u63d0\u9ad8\u51c6\u786e\u5ea6\u800c\u7f29\u5c0f \\(\\epsilon\\)\uff0c\u5bfc\u81f4\u7684\u590d\u6742\u5ea6\u53d8\u5316\u662f\u76f8\u5bf9\u53ef\u63a5\u53d7\u7684\uff08\u591a\u9879\u5f0f\u7ea7\u7684\u53d8\u5316\uff0c\u5982 \\((\\frac{1}{\\epsilon})^2n^3\\) \u5173\u4e8e \\(\\frac{1}{\\epsilon}\\) \u662f\u591a\u9879\u5f0f\u7ea7\u7684\uff09\uff1b\u7136\u800c\u5982\u679c\u5b83\u4e0d\u662f FPTAS\uff0c\u90a3\u4e48 \\(\\epsilon\\) \u7684\u7f29\u5c0f\u53ef\u80fd\u5e26\u6765\u6050\u6016\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff08\u5982 \\(n^{2/\\epsilon}\\) \u5173\u4e8e \\(\\epsilon\\) \u662f\u6307\u6570\u7ea7\u7684\uff09\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u82e5\u5e72\u5177\u4f53\u4f8b\u5b50\u505a\u5206\u6790\uff0c\u4ee5\u4fbf\u66f4\u597d\u5730\u7406\u89e3\u8fd1\u4f3c\u7b97\u6cd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-approximate-bin-packing","title":"[\u6848\u4f8b] Approximate Bin Packing","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Bin_packing

\u88c5\u7bb1\u95ee\u9898\u6307\u7684\u662f\uff0c\u7ed9\u5b9a \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\in [1,N]\\) \u4e2a item \u7684 size \u4e3a \\(S_i \\in (0,1]\\)\uff0c\u4e00\u4e2a bin \u7684\u5927\u5c0f\u4e3a \\(1\\)\uff0c\u5c1d\u8bd5\u5bfb\u627e\u6700\u5c11\u7684\uff0c\u80fd\u591f\u88c5\u8f7d\u6240\u6709 item \u7684 bin \u7684\u6570\u91cf\u3002

\ud83c\udf30 \u4f8b\u5b50

\u7ed9\u5b9a 7 \u4e2a item\uff0csize \u5206\u522b\u4e3a \\(0.2, 0.5, 0.4, 0.7, 0.1, 0.3, 0.8\\)\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

\u8fd9\u662f\u4e00\u4e2a NP hard \u95ee\u9898\uff0c\u73b0\u5728\u6211\u4eec\u8003\u8651\u4e09\u79cd\u8fd1\u4f3c\u89e3\u6cd5\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e09\u79cd\u90fd\u662f\u5728\u7ebf(online)\u89e3\u6cd5\uff0c\u5373\u5904\u7406 \\(item_i\\) \u65f6\u6211\u4eec\u4e0d\u77e5\u9053 \\(item_{i+1}\\sim item_{N}\\) \u7684\u60c5\u51b5\u3002\u4e4b\u540e\u6211\u4eec\u4f1a\u518d\u8ba8\u8bba\u79bb\u7ebf(offline)\u505a\u6cd5\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u77e5\u9053\u6240\u6709 item \u7684\u60c5\u51b5\u4ee5\u540e\u518d\u7ed9\u51fa\u7b56\u7565\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-next-fit-nf","title":"(online) Next Fit (NF)","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Next-fit_bin_packing

NF \u7b56\u7565\u603b\u662f\u9009\u62e9\u5f53\u524d\u6700\u540e\u4e00\u4e2a bin\uff0c\u82e5\u80fd\u591f\u5bb9\u7eb3\uff0c\u5219\u5c06\u5f53\u524d item \u653e\u5165\u5176\u4e2d\uff0c\u5426\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(2M-1\\) \u4e2a bin\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

proof for 2M-1

\u6211\u4eec\u4ece NF \u7684\u7ed3\u679c\u51fa\u53d1\uff0c\u8bc1\u660e\u5f53 NF \u7684\u7ed3\u679c\u4e3a\u9700\u8981 \\(2M-1\\) \u6216 \\(2M\\) \u4e2a bin \u65f6\uff0c\u51c6\u786e\u89e3\u4e3a\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

\u5047\u8bbe \\(S(B_i)\\) \u8868\u793a\u7b2c \\(i\\) \u4e2a bin \u7684 size\uff0c\u5219\u6839\u636e NF \u7684\u5b9a\u4e49\uff0c\u6709\uff1a\\(S(B_{i}) + S(B_{i+1}) > 1\\)\uff08\u662f NF \u7684\u5fc5\u8981\u4e0d\u5145\u5206\u6761\u4ef6\uff09\u3002\u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f7f\u7528\u53cd\u8bc1\u6cd5\uff0c\u5047\u8bbe \\(S(B_{i}) + S(B_{i+1}) \\leq 1\\)\uff0c\u8fd9\u8bf4\u660e\u65e0\u8bba \\(B_{i+1}\\) \u4e2d\u6709\u591a\u5c11 item\uff0c\u90fd\u4e00\u5b9a\u80fd\u653e\u8fdb \\(B_i\\)\uff0c\u800c\u8fd9\u4e0e NF \u201c\\(B_i\\) \u653e\u4e0d\u4e0b\u4e86\u624d\u5f00\u59cb\u653e \\(B_{i+1}\\)\u201d \u7684\u6027\u8d28\u76f8\u8fdd\u80cc\u3002\u4e8e\u662f\u6211\u4eec\u5c06\u6240\u6709\u6876\u4e24\u4e24\u914d\u5bf9\uff1a

1.\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M-1\\) \u4e2a bin \u65f6\uff1a

\\[ \\left\\{ \\begin{aligned} S(B_1) + S(B_2) &> 1 \\\\ S(B_3) + S(B_4) &> 1 \\\\ \\vdots \\\\ S(B_{2M-3}) + S(B_{2M-2}) &> 1 \\\\ S(B_{2M-1}) &\\leq 1 \\end{aligned} \\right. \\\\ \\begin{aligned} &\\therefore \\sum_{i=1}^{2M-1} > \\sum_{i=1}^{2M-2} > M-1 \\\\ &\\therefore \\sum_{i=1}^{2M-1} \\geq M \\end{aligned} \\]

\u5373 item \u7684\u603b size \u81f3\u5c11\u4e3a M\uff0c\u5373\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

2.\u800c\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M\\) \u4e2a bin \u65f6\uff0c\u53ef\u4ee5\u8f6c\u5316\u4e3a \\(2M-1\\) \u7684\u60c5\u51b5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-first-fit-ff","title":"(online) First Fit (FF)","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/First-fit_bin_packing

FF \u7b56\u7565\u603b\u662f\u9009\u62e9\u7b2c\u4e00\u4e2a\u80fd\u653e\u4e0b\u5f53\u524d item \u7684 bin\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-best-fit-bf","title":"(online) Best Fit (BF)","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Best-fit_bin_packing

BF \u7b56\u7565\u603b\u662f\u9009\u62e9\u80fd\u591f\u5bb9\u7eb3\u5f53\u524d item \u4e14\u5269\u4f59\u7a7a\u95f4\u6700\u5c0f\u7684 bin\uff08\u5373 tightest\uff09\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

NF \u7b56\u7565\u4e5f\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

\u867d\u7136\u5728\u7ebf\u505a\u6cd5\u7531\u4e8e\u5bf9\u4fe1\u606f\u628a\u63e1\u7684\u4e0d\u5168\u9762\uff0c\u5728\u4e0d\u7279\u6b8a\u6784\u9020\u8f93\u5165\u7684\u60c5\u51b5\u4e0b\u751a\u81f3\u51e0\u4e4e\u4e0d\u53ef\u80fd\u8fbe\u5230\u6700\u4f18\u89e3\uff0c\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u4e2d\u6709\u5f88\u591a\u80fd\u5efa\u6a21\u4e3a\u88c5\u7bb1\u95ee\u9898\u7684\u95ee\u9898\uff0c\u90fd\u8981\u6c42\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\u89e3\u51b3\u3002\u56e0\u6b64\uff0c\u7814\u7a76\u5728\u7ebf\u505a\u6cd5\u8fd8\u662f\u6709\u5176\u610f\u4e49\u7684\u3002

\u6b64\u5916\uff0c\u5173\u4e8e\u5728\u7ebf\u505a\u6cd5\uff0c\u6709\u4e00\u4e2a\u7ed3\u8bba\uff1a

theorem

\u5bf9\u4e8e\u88c5\u7bb1\u95ee\u9898\uff0c\u5982\u679c\u9650\u5b9a\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\uff0c\u5219\u6700\u4f18\u7684\u8fd1\u4f3c\u89e3\u6cd5\uff0c\u5176\u6700\u574f\u60c5\u51b5\u7684\u7ed3\u679c\u4e5f\u81f3\u5c11\u9700\u8981\u51c6\u786e\u89e3\u7684 \\(\\frac{5}{3}\\)\u3002

PPT \u4e0a\u7684\u539f\u8bdd\u662f\uff0c\u65e0\u8bba\u54ea\u79cd\u5728\u7ebf\u505a\u6cd5\u4e5f\u81f3\u5c11\u9700\u8981\u4f7f\u7528 \\(\\frac{5}{3}\\) \u7684\u51c6\u786e\u89e3\u7ed9\u51fa\u7684\u6570\u91cf\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u4e2a \\(\\frac{5}{3}\\) \u662f\u9488\u5bf9\u6700\u574f\u89e3\u7684\u8ba8\u8bba\u3002\u56de\u987e\u300c\u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5\u300d\u8fd9\u4e2a block \u91cc\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5206\u6790\u8fd1\u4f3c\u89e3\uff0c\u90fd\u662f\u9488\u5bf9\u5176\u6700\u574f\u60c5\u51b5\u6765\u8bf4\u7684\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#offline-first-fit-decreasing-ffd","title":"(offline) First Fit Decreasing (FFD)","text":"

\u79bb\u7ebf\u505a\u6cd5\u7684\u4f18\u52bf\u5728\u4e8e\u5b83\u80fd\u591f\u83b7\u5f97\u6240\u6709 item \u7684\u4fe1\u606f\u4ee5\u6c42\u7edf\u7b79\u89c4\u5212\u3002\u8fd9\u91cc\u7ed9\u51fa\u7684\u8fd1\u4f3c\u505a\u6cd5\u662f\uff0c\u5c06 item \u6309\u7167 size \u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4f7f\u7528 FF\uff08\u6216 BF\uff0c\u7531\u4e8e\u5355\u8c03\u6027\uff0c\u4e24\u8005\u7b49\u4ef7\uff09\u3002

\ud83c\udf30 \u4f8b\u5b50

\u7ed9\u5b9a 7 \u4e2a item\uff08\u540c\u4e4b\u524d\u7684 \ud83c\udf30\uff09\uff0c\u7ecf\u8fc7\u6392\u5e8f\u540e\uff0c\u5b83\u4eec\u7684 size \u5206\u522b\u4e3a $0.8, 0.7, 0.5, 0.4, 0.3, 0.2, 0.1\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

FFD \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\frac{11}{9}M + \\frac{6}{9}\\) \u4e2a bin\uff08\u4e3a\u5565\u5c31\u8fde wiki \u4e5f\u4e0d\u7ea6 6/9\uff09\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-knapsack-problem","title":"[\u6848\u4f8b] Knapsack Problem","text":"

link

Wikipedia: https://en.wikipedia.org/wiki/Knapsack_problem

\u4e00\u4e2a\u4e0e\u88c5\u7bb1\u95ee\u9898\u5f88\u50cf\u7684\u95ee\u9898\u662f\u80cc\u5305\u95ee\u9898\u3002\u5176\u5927\u81f4\u63cf\u8ff0\u5982\u4e0b\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5bb9\u91cf\u4e3a \\(M\\) \u7684\u80cc\u5305\uff0c\u4ee5\u53ca \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\) \u4e2a item \u7684\u91cd\u91cf\u4e3a \\(w_i\\)\uff0c\u5176\u5229\u6da6\u4e3a \\(p_i\\)\u3002\u8981\u6c42\u5728\u4e0d\u8d85\u8fc7\u80cc\u5305\u5bb9\u91cf\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u5f97\u80cc\u5305\u4e2d\u7684\u5229\u6da6\u6700\u5927\u5316\u3002\uff08\u6211\u4e5f\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48 PPT \u4e0a\u4f1a\u628a\u5bb9\u91cf\u548c\u91cd\u91cf\u5173\u8054\u8d77\u6765\uff0canyway\uff0c\u5bb9\u91cf\u9650\u5236\u4e86 item \u7684\u91cd\u91cf\u548c\u3002\uff09

\u6ce8\u610f

\u6216\u8bb8\u5728\u5b66\u4e60 dp \u7684\u65f6\u5019\u4f60\u5df2\u7ecf\u63a5\u89e6\u8fc7\u80cc\u5305\u95ee\u9898\u4e86\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u8fd9\u91cc\u8ba8\u8bba\u7684\u80cc\u5305\u95ee\u9898\u6709\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u7279\u70b9\u5c31\u662f\uff0c\u5bb9\u91cf\u548c\u5229\u6da6\u90fd\u662f\u5b9e\u6570\uff0c\u66f4\u76f4\u767d\u7684\u6765\u8bf4\uff0c\u4f60\u6ca1\u529e\u6cd5\u901a\u8fc7\u5c06\u5bb9\u91cf\u6216\u5229\u6da6\u4f5c\u4e3a\u72b6\u6001\u6765 dp \u6c42\u51c6\u786e\u89e3\u3002

\u800c\u6839\u636e\u6bcf\u4e00\u4e2a\u7269\u54c1\u80fd\u5426\u81ea\u7531\u62c6\u5206\uff0c\u80cc\u5305\u95ee\u9898\u5206\u4e3a fractional version \u548c 0-1 version \u4e24\u7c7b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#fractional-version","title":"Fractional Version","text":"

\u5982\u679c\u6211\u4eec\u8bb0 \\(x_i\\in[0,1]\\) \u4e3a\u7b2c \\(i\\) \u4e2a item \u7684\u9009\u4e2d\u91cf\uff08\u5373\u5047\u8bbe item \u90fd\u662f\u8fde\u7eed\u53ef\u5206\u7684\uff09\uff0c\u5219\u7ea6\u675f\u6761\u4ef6\u53ef\u4ee5\u8868\u8ff0\u4e3a \\(\\sum_{i}^N w_ix_i \\leq M\\)\uff0c\u73b0\u5728\u6c42 \\(\\sum_{i}^{N} p_ix_i\\) \u7684\u6700\u5927\u503c\u3002

\ud83c\udf30 \u4f8b\u5b50

\u5047\u8bbe\u73b0\u5728 \\(M = 20.0\\)\uff0c\u5e76\u4e14 \\(N = 3\\)\uff0c\u5206\u522b\u662f\uff1a

\u5219\u6700\u4f18\u89e3\u4e3a \\(x_1 = 0, x_2 = 1, x_3 = \\frac{1}{2}\\)\uff0c\u6b64\u65f6 \\(\\sum_{i}^{N} p_ix_i = 31.5\\)\u3002

\u7531\u4e8e \\(x_i\\in[0,1]\\)\uff0c\u7ed9\u4e86\u6211\u4eec\u6781\u5927\u7684\u9009\u62e9\u81ea\u7531\uff0c\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u4efb\u610f\u591a\u7684\u67d0\u4e2a\u7269\u54c1\u3002\u90a3\u4e48\u975e\u5e38\u6734\u7d20\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\uff0c\u5c3d\u53ef\u80fd\u591a\u5730\u9009\u62e9\u201c\u6027\u4ef7\u6bd4\u201d\u9ad8\u7684\u7269\u54c1\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u6309\u7167 \\(\\frac{p_i}{w_i}\\)\uff08PPT \u79f0\u4e4b\u4e3a profit density\uff09\u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4ece\u5927\u5230\u5c0f\u4f9d\u6b21\u9009\u62e9\u7269\u54c1\uff0c\u76f4\u5230\u80cc\u5305\u88c5\u6ee1\u4e3a\u6b62\u3002

\u4e0d\u8fc7\u8be5\u505a\u6cd5\u5df2\u7ecf\u662f\u51c6\u786e\u89e3\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u5bf9\u5b83\u8fdb\u884c\u5173\u4e8e\u8fd1\u4f3c\u7b97\u6cd5\u7684\u8ba8\u8bba\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#0-1-version","title":"0-1 Version","text":"

\u76f8\u8f83\u4e8e fractional version\uff0c0-1 version \u8981\u6c42 \\(x_i \\in \\{0,1\\}\\)\uff0c\u6362\u53e5\u8bdd\u8bf4\u6bcf\u4e00\u4e2a\u7269\u54c1\u8981\u4e48\u9009\u8981\u4e48\u4e0d\u9009\u3002\u8fd9\u662f\u4e00\u4e2a\u7ecf\u5178\u7684 NPC \u95ee\u9898\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528\u8fd1\u4f3c\u7b97\u6cd5\u6765\u6c42\u8f83\u4f18\u89e3\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8d2a\u5fc3\u505a\u6cd5","title":"\u8d2a\u5fc3\u505a\u6cd5","text":"

\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\uff0c\u8d2a\u5fc3\u7b56\u7565\u53ef\u4ee5\u662f\u603b\u662f\u9009\u53ef\u4ee5\u653e\u5f97\u4e0b\u7684\u3001\u8fd8\u6ca1\u653e\u5165\u4e2d\u7684\uff0c\u5229\u6da6\u6700\u5927\u7684\u6216 \\(\\frac{p_i}{w_i}\\) \u6700\u5927\u7684\u3002\u8fd9\u4e9b\u505a\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u90fd\u662f 2\u3002

proof for rho = 2

\u6211\u4eec\u7528 \\(p_\\text{max}\\) \u8868\u793a\u6240\u6709 item \u4e2d\u6700\u5927\u7684\u5229\u6da6\uff0c\u7528 \\(P_\\text{optimal}\\) \u8868\u793a\u51c6\u786e\u89e3\uff0c\\(P_\\text{greedy}\\) \u8868\u793a\u6211\u4eec\u4f7f\u7528\u8d2a\u5fc3\u505a\u6cd5\u5f97\u5230\u7684\u7b54\u6848\u3002\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u8fd1\u4f3c\u6bd4\u7684\u8ba1\u7b97\u8868\u8fbe\u5f0f\u4e3a\uff1a

\\[ \\rho = \\max( \\frac{P_\\text{optimal}}{P_\\text{greedy}}, \\frac{P_\\text{greedy}}{P_\\text{optimal}} ) \\]

\u4e0b\u9762\u662f\u8bc1\u660e\u8fc7\u7a0b\uff1a

\\[ \\left\\{ \\begin{aligned} & p_\\text{max} \\leq P_\\text{greedy} & (1)\\\\ & P_\\text{optimal} \\leq P_\\text{greedy} + p_\\text{max} & (2) \\end{aligned} \\right. \\]

\u5c06 \\((1)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\) \u5f97\uff1a

\\[ \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 1 \\quad (3) \\]

\u5c06 \\((2)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\)\uff0c\u5e76\u4ee3\u5165 \\((3)\\) \u5f97\uff1a

\\[ \\frac{P_\\text{optimal}}{P_\\text{greedy}} \\leq 1 + \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 2 \\]

PPT \u7684\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0d\u7b49\u5f0f\uff0c\u867d\u7136\u6210\u7acb\uff0c\u4f46\u662f\u597d\u50cf\u6ca1\u8d77\u5230\u4f5c\u7528\uff0c\u6211\u5c31\u6269\u5c55\u4e00\u4e0b\u5199\u5728\u8fd9\u91cc\u6c42\u4e2a\u773c\u719f\u4e86\uff1a

\\[ p_\\text{max} \\leq P_\\text{greedy} \\leq P_\\text{optimal} \\leq P_\\text{frac} \\]

\u5176\u4e2d \\(P_\\text{frac}\\) \u6307\u7684\u662f\u540c\u6837\u7684\u6570\u636e\u4e0b fractional version \u7684\u7b54\u6848\u3002

\u8865\u5145\u7ed3\u8bba\uff1a\u80cc\u5305\u95ee\u9898\u5177\u6709 FPTAS\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u52a8\u6001\u89c4\u5212\u505a\u6cd5","title":"\u52a8\u6001\u89c4\u5212\u505a\u6cd5","text":"

\uff08\u771f\u662f\u6df7\u4e71\uff09

\\[ W_{i,p} = \\text{the minimum weight of a collection from } \\{1, \u2026, i\\} \\text{ with total profit being exactly } p \\\\ W_{i,p} = \\left\\{ \\begin{aligned} &\\infty && i = 0 \\\\ &W_{i-1, p} && p_i > p \\\\ &\\min\\{W_{i-1, p}, w_i + W_{i-1, p-p_i}\\} && otherwise \\end{aligned} \\right.\\\\ i = 1, ..., n; p = 1, ..., n\\cdot p_\\text{max} \\\\ O(n^2p_\\text{max}) \\]

\u5982\u679c \\(p_\\text{max}\\) \u5f88\u5927\uff0c\u53ef\u4ee5\u8003\u8651\u5c06\u5b83\u4eec\u8fd1\u4f3c\u53d6\u6574\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u6d6e\u70b9\u6570\u5411\u4e0a\u53d6\u6574\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-the-k-center-problem","title":"[\u6848\u4f8b] The K-center Problem","text":"

link

Berkeley's: https://ugtcs.berkeley.edu/src/approx-sp19/scribe-notes-2.pdf

\uff08\u4e8c\u7ef4\uff09K \u4e2d\u5fc3\u95ee\u9898\u6307\uff1a\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684\u4e00\u7cfb\u5217 site\uff08\u5373\u70b9\uff09\uff0c\u5728\u5e73\u9762\u4e2d\u627e\u51fa \\(k\\) \u4e2a\u4e0d\u540c\u7684 center\uff0c\u8bb0 \\(site_i\\) \u5230\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u4e3a \\(dis_i\\)\uff0c\u6c42 \\(\\max \\{dis_i\\}\\) \u7684\u6700\u5c0f\u503c\u3002

\u6570\u5b66\u8bed\u8a00\u8868\u8fbe

\u8bbe \\(C = \\{c_1, c_2, ..., c_k\\}\\) \u4e3a \\(k\\) \u4e2a center\uff0c\\(S = \\{s_1, s_2, ..., s_n\\}\\) \u4e3a \\(n\\) \u4e2a site\uff0c\u6211\u4eec\u5b9a\u4e49 site \u5230\u5173\u4e8e center \u7684\u96c6\u5408 \\(C\\) \u7684\u8ddd\u79bb\u4e3a\uff1a

\\[ dis(s_i, C) = \\min_{c_i\\in C} \\{ dis(s_i, c_i) \\} \\]

\u5373 \\(s_i\\) \u5230\u8ddd\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u3002

\u5b9a\u4e49\u6700\u5927\u7684\u6700\u5c0f\u8986\u76d6\u534a\u5f84\u4e3a\uff1a

\\[ r(C) = \\max_{s_i\\in S} \\{ dis(s_i, C) \\} \\\\ \\]

\u73b0\u5728\u8981\u5bfb\u627e\u4e00\u4e2a \\(C\\) \u4f7f\u5f97 \\(r(C)\\) \u6700\u5c0f\uff08\\(|C| = k\\)\uff09\u3002

\u5f88\u7ed5\uff0c\u975e\u5e38\u7ed5\u3002\u63a5\u4e0b\u6765\u5f00\u59cb\u8bf4\u4eba\u8bdd\u3002

\u5e73\u9762\u7684\u95ee\u9898\u6211\u4eec\u5c31\u7528\u5e73\u9762\u7684\u601d\u8def\u6765\u770b\uff0c\u5c31\u662f\u4e00\u4e2a\u5e73\u9762\u4e0a\u6709\u4e00\u5806\u70b9\uff0c\u73b0\u5728\u6211\u8981\u5728\u4e0a\u9762\u627e \\(k\\) \u4e2a\u4e2d\u5fc3\u53bb\u753b\u5706\uff0c\u4f7f\u5f97\u8fd9 \\(k\\) \u4e2a\u5706\u80fd\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002\u73b0\u5728\u8981\u6c42\u6700\u5927\u7684\u90a3\u4e2a\u5706\u7684\u534a\u5f84\u6700\u5c0f\u80fd\u591a\u5c0f\u3002

\u5173\u4e8e\u8ddd\u79bb

PPT \u4e0a\u5bf9\u8ddd\u79bb\u505a\u4e86\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\u660e\uff0c\u4f46\u662f\u5176\u5b9e\u5e76\u4e0d\u662f\u8fd9\u4e2a\u95ee\u9898\u7684\u91cd\u70b9\uff0c\u4f46\u662f\u4e3a\u4e86\u4e25\u8c28\u6027\uff0c\u6211\u8fd8\u662f\u5728\u8fd9\u91cc\u653e\u4e0a\u4e09\u6761\u6027\u8d28\uff1a

3 property of 'distance'

\\[ \\begin{aligned} & dis(x,x) = 0 && \\text{(identity)} \\\\ & dis(x,y) = dis(y,x) && \\text{(symmetry)} \\\\ & dis(x,y) \\leq dis(x,z) + dis(z,y) && \\text{(triangle inequality)} \\end{aligned} \\]

\u788e\u788e\u5ff5

\u8fd9\u4e2a\u4e1c\u897f\u548c\u805a\u7c7b\u6709\u70b9\u50cf\u3002\u4e3b\u8981\u96be\u70b9\u5c31\u5728\u4e8e\uff0c\u6211\u4eec\u4e0d\u77e5\u9053\u5e94\u8be5\u4ee5\u4f55\u79cd\u7b56\u7565\u53bb\u8986\u76d6\u8fd9\u4e9b\u70b9\uff0c\u8981\u662f\u628a\u4e24\u4e2a\u8ddd\u79bb\u5f88\u8fdc\u7684\u70b9\u5212\u5728\u540c\u4e00\u4e2a\u5706\u5185\uff0c\u90a3\u7b54\u6848\u80af\u5b9a\u5c0f\u4e0d\u4e86\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u5c1d\u8bd5\u89e3\u51b3\u7684\u8fd9\u4e2a\u95ee\u9898\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#naive-greedy","title":"Naive Greedy","text":"

\u4e00\u4e2a\u505a\u6cd5\u662f\uff0c\u6211\u4eec\u6bcf\u6b21\u90fd\u9009\u62e9\u6700\u53ef\u80fd\u6210\u4e3a\u4e2d\u5fc3\u7684\u90a3\u4e2a\u70b9\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

  1. \u5982\u679c\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u6240\u6709\u70b9\u7684\u4e2d\u5fc3\uff1b
  2. \u5982\u679c\u4e0d\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u80fd\u4e00\u4e2a\u6700\u80fd\u8ba9 \\(r(C)\\) \u4e0b\u964d\u7684\uff1b

\u8fd9\u4e2a\u505a\u6cd5\u7684 bug \u6bd4\u8f83\u5927\uff0c\u5047\u8bbe\u6211\u4eec\u7684\u70b9\u662f\u805a\u7c7b\u975e\u5e38\u660e\u663e\u7684\u4e24\u4e2a\u70b9\u4e91\uff0c\u90a3\u4e48\u7b2c\u4e00\u4e2a\u70b9\u5c31\u4f1a\u843d\u5728\u4e24\u4e2a\u70b9\u4e91\u4e4b\u95f4\uff0c\u8fd9\u5f88\u8822\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u6d6a\u8d39\u8fc7\u591a\u65f6\u95f4\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e0a\u3002

\u6ce8\u610f\uff0c\u968f\u7740 center \u7684\u589e\u52a0\uff0c\u539f\u6765\u4ee5 \\(c_i\\) \u4e3a center \u7684 site \u5f88\u53ef\u80fd\u4ee5\u6700\u65b0\u63d2\u5165\u7684 \\(c_j\\) \u4e3a center\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#2r-greedy","title":"2r-Greedy","text":"

\u65e2\u7136\u6b63\u5411\u505a\u5f88\u56f0\u96be\uff0c\u90a3\u6211\u4eec\u80fd\u4e0d\u80fd\u53cd\u7740\u505a\u5462\uff1f\u6709\u4e00\u79cd\u5957\u8def\u53eb\u4e8c\u5206\u7b54\u6848\uff0c\u5373\u5148\u731c\u7b54\u6848\uff0c\u518d\u9a8c\u8bc1\u662f\u5426\u662f\u7b54\u6848\u3002\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u8fd9\u4e2a\u601d\u60f3\uff0c\u5373\u5148\u731c\u4e00\u4e2a \\(r\\)\uff0c\u7136\u540e\u5c1d\u8bd5\u7528 \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u6240\u6709\u70b9\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u5047\u8bbe\u51c6\u786e\u89e3\u5bf9\u5e94\u7684\u4e00\u4e2a center \u96c6\u5408\u4e3a \\(C^*\\)\uff0c\u90a3\u4e48 \\(\\forall r(C_x) \\geq r(C^*)\\) \u7684 \\(C_x\\) \u90fd\u5fc5\u5b9a\u5b58\u5728\u8986\u76d6\u65b9\u6848\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6211\u4eec\u80fd\u591f\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u7ea6\u675f\u51c6\u786e\u89e3 \\(r(C^*) \\leq r(C_x)\\)\u3002

\u5982\u4f55\u201c\u9a8c\u8bc1\u201d

\u53ef\u662f\uff0c\u4ed4\u7ec6\u4e00\u60f3\u6211\u4eec\u53d1\u73b0\uff0c\u4e8c\u5206\u7b54\u6848\u7684\u8fc7\u7a0b\u4e2d\uff0c\u201c\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\u201d\u8fd9\u4ef6\u4e8b\u4e5f\u4e0d\u597d\u505a\uff0c\u867d\u7136\u6211\u4eec\u6709\u534a\u5f84\uff0c\u4f46\u662f\u6211\u4eec\u4e5f\u5f88\u96be\u627e\u5230\u4e00\u4e2a\u6700\u597d\u7684\u65b9\u6848\u6765\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002

hint: \u8fd1\u4f3c\u7b97\u6cd5

\u4e8e\u662f\u6211\u4eec\u7684\u8fd1\u4f3c\u7b97\u6cd5\u5c31\u53ef\u4ee5\u5927\u5c55\u62f3\u811a\u4e86\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u6240\u8c13\u7684\u8fd1\u4f3c\u7b97\u6cd5\uff0c\u6307\u7684\u662f\u4f7f\u7528\u4e8c\u5206\u7b54\u6848\u6c42\u89e3 \\(r(C)\\) \u8fd9\u4e2a\u7b97\u6cd5\uff0c\u800c\u975e\u5224\u65ad \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u80fd\u5426\u8986\u76d6\u6240\u6709\u70b9\u7684\u7b97\u6cd5\u3002\u8fd9\u4e00\u70b9\u975e\u5e38\u91cd\u8981\uff01

\u800c\u5173\u4e8e\u7b97\u6cd5\u5177\u4f53\u5982\u4f55\u64cd\u4f5c\uff0c\u8bf7\u63a5\u7740\u770b\u3002

\u9996\u5148\uff0c\u6211\u4eec\u518d\u6b21\u68b3\u7406\u4e00\u4e0b\u8fd9\u4e2a\u7b97\u6cd5\uff0c\u5b83\u5305\u542b\u5185\u5916\u4e24\u5c42\uff0c\u9996\u5148\u5916\u90e8\u901a\u8fc7\u5728\u7b54\u6848\u7684\u5019\u9009\u533a\u95f4\uff08\u5373 \\((0, r_\\text{max}]\\)\uff0c\\(r_\\text{max}\\) \u4e3a\u6700\u8fdc\u7684\u4e24\u4e2a\u70b9\u7684\u8ddd\u79bb\uff09\u4e8c\u5206\u5019\u9009\u503c\uff0c\u63a5\u7740\u901a\u8fc7\u5224\u5b9a\u7b97\u6cd5\u6765\u5224\u5b9a\u63a5\u4e0b\u6765\u7684\u4e8c\u5206\u65b9\u5411\u3002

\u7136\u800c\uff0c\u7531\u4e8e\u6211\u4eec\u5f88\u96be\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5b9e\u73b0\u51c6\u786e\u7684\u201c\u5224\u5b9a\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u91c7\u53d6\u8fd9\u6837\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u7b56\u7565\u6765\u8fdb\u884c\u5bbd\u6cdb\u7684\u5fc5\u8981\u6761\u4ef6\u7b5b\u9009\uff1a

\u6d41\u7a0b\u63cf\u8ff0

\u8bbe \\(C_x\\) \u8868\u793a\u9009\u4e2d\u7684 center\uff0c\\(S_x\\) \u8868\u793a\u5c1a\u672a\u88ab\u4efb\u4f55\u5706\u8986\u76d6\u7684 site\uff0c\\(r_x\\) \u8868\u793a\u5f53\u524d\u4e8c\u5206\u51fa\u6765\u7684\uff0c\u8981\u6211\u4eec\u5224\u65ad\u7684\u534a\u5f84\uff0c\\(S\\) \u4f9d\u7136\u8868\u793a\u6240\u6709 site \u7684\u96c6\u5408\uff1a

  1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff1b
  2. \u5f53 \\(S_x \\not = \\emptyset\\) \u65f6\uff08\u5373\u8fd8\u6709\u70b9\u6ca1\u88ab\u8986\u76d6\u65f6\uff09\uff0c\u91cd\u590d\u8fd9\u4e9b\u64cd\u4f5c\uff1a
    1. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff08\u5373\u5c06 \\(s_i\\) \u5f53\u4f5c\u4e00\u4e2a center\uff09\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff08\u5373 \\(s_i\\) \u5fc5\u5b9a\u88ab\u8986\u76d6\uff09\uff1b
    2. \u5220\u9664 \\(S_x\\) \u4e2d\u6240\u6709\u8ddd\u79bb \\(s_i\\) \u4e0d\u8db3 \\(r_x\\) \u7684\u70b9\uff08\u5373\u5220\u9664\u6ee1\u8db3 \\(dis(s_i, s_j) \\leq r_x\\) \u7684\u6240\u6709 \\(s_k \\in S_x\\)\uff09\uff1b
  3. \u5f53\u6240\u6709\u70b9\u90fd\u88ab\u8986\u76d6\u540e\uff1a
    1. \u5982\u679c \\(|C_x| \\leq k\\)\uff0c\u5219\u8fd4\u56de yes\uff1b
    2. \u5426\u5219\u8fd4\u56de no\uff1b

\u5982\u679c\u8fd4\u56de yes\uff0c\u5219\u4e0b\u4e00\u4e2a \\(r_x\\) \u5e94\u5f53\u53d6\u66f4\u5c0f\u7684 \\(r_x\\)\uff1b\u5982\u679c\u8fd4\u56de no\uff0c\u4e0b\u4e00\u6b21\u5e94\u8be5\u53d6\u66f4\u5927\u7684 \\(r_x\\)\uff08\u7a0d\u5019\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\uff09\u3002

\u73b0\u5728\u5bf9\u5176\u505a\u8fdb\u4e00\u6b65\u89e3\u91ca\u3002\u8fd9\u662f\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u505a\u6cd5\uff0c\u65e8\u5728\u6bcf\u6b21\u5bfb\u627e\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4f5c\u4e3a\u65b0\u7684 center\uff0c\u7528\u4e00\u4e2a\u534a\u5f84\u4e3a \\(2r_x\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u70b9\u3002\u901a\u8fc7\u5224\u65ad\u8fd9\u6837\u6240\u9700\u8981\u7684 center \u6570\u91cf\u662f\u5426\u8d85\u8fc7 \\(k\\) \u6765\u5224\u65ad\u662f\u5426\u80fd\u591f\u8986\u76d6\u3002\u63a5\u4e0b\u6765\u5f88\u7ed5\uff0c\u8bf7\u4e00\u6b65\u4e00\u6b65\u7684\u770b\uff1a

  1. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u6210\u529f\u65f6\uff0c\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u53ef\u4ee5\u8986\u76d6\u6240\u6709\u70b9\uff1b
  2. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u5931\u8d25\u65f6\uff0c\u4e0d\u80fd\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u4e0d\u80fd\u8986\u76d6\u6240\u6709\u70b9\uff0c\u56e0\u4e3a\u542f\u53d1\u5f0f\u65b9\u6848\u5e76\u4e0d\u662f\u6700\u4f18\u65b9\u6848\uff1b\u4f46\u662f\u80fd\u8bf4\u660e\u5fc5\u5b9a\u4e0d\u5b58\u5728 \\(r_x\\) \u7684\u8986\u76d6\uff0c\u5373 \\(r_x \\leq r(C^*)\\)\uff08\u8bc1\u660e\u89c1\u4e0b\u65b9 lemma\uff09\uff1b
lemma

\u5047\u8bbe\u534a\u5f84\u4e3a \\(r\\)\uff0c\u4ee5 \\(c\\) \u4e3a\u5706\u5fc3\u7684\u5706 \\(C\\) \u8986\u76d6\u4e86 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\u3002

\u90a3\u4e48\uff0c\u5bf9\u4e8e\u56fa\u5b9a\u7684\u534a\u5f84 \\(r'\\)\uff0c\u8981\u60f3\u53d6\u4efb\u610f\u7684 \\(s_i \\in S\\) \u4e3a\u5706\u5fc3\uff0c\u5f62\u6210\u7684\u5706 \\(C_i\\)\uff0c\u603b\u662f\u80fd\u8986\u76d6 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\uff0c\u5219 \\(r' \\geq 2r\\)\u3002

lemma \u7684\u8bc1\u660e\u5c31\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\u4e86\uff0c\u8bc1\u660e\u7684\u5173\u952e\u662f\u8003\u8651\u4e24\u70b9\u5206\u5e03\u5728\u76f4\u5f84\u4e24\u7aef\u7684\u60c5\u51b5\u3002

\u8fd9\u4e2a\u5f15\u7406\u7684\u9644\u52a0\u7ed3\u8bba\u5c31\u662f\uff1a

\\[ \\forall i \\quad C \\subset C_i \\]

\u5373\u4ee5 \\(r\\) \u4e3a\u534a\u5f84\u7684\u6700\u4f18\u8986\u76d6\u5706\uff0c\u4e00\u5b9a\u80fd\u88ab\u4ee5\u4efb\u610f \\(s_i\\) \u4e3a\u5706\u5fc3\u3001\\(2r\\) \u4e3a\u534a\u5f84\u7684\u5706\u6240\u8986\u76d6\u3002

\u5f53\u6211\u4eec\u53d1\u73b0\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 1. \u65f6\uff0c\u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u6211\u4eec\u786e\u5b9e\u5f97\u5230\u4e86\u4e00\u4e2a\u8ddd\u79bb \\(r(C^*)\\) \u66f4\u8fd1\u7684\u4e0a\u754c \\(2r_x\\)\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 1. \u786e\u5b9a\u7684\u4e0a\u754c\uff0c\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

\u5f53\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 2. \u65f6\uff0c\u6211\u4eec\u4e0d\u77e5\u9053 \\(2r_x\\) \u548c \\(r(C^*)\\) \u7684\u5927\u5c0f\u5173\u7cfb\uff0c\u4f46\u662f\u77e5\u9053 \\(r_x\\) \u548c \\(r(C^*)\\) \u7684\u5173\u7cfb\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 2. \u786e\u5b9a\u7684\u4e0b\u754c\uff0c\u4e5f\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

\u800c\u6700\u7ec8\uff0c\u6211\u4eec\u4f1a\u5f97\u5230\u4e00\u4e2a\u6700\u7ec8\u7684 \\(r_{x_0}\\)\uff0c\u6ee1\u8db3\uff1a\\(r_{x_0} \\leq r(C^*) \\leq 2r_{x_0}\\)\uff08\u5f0f\u4e2d\u54ea\u8fb9\u80fd\u53d6\u7b49\u53d6\u51b3\u4e8e\u6700\u540e\u843d\u5728 1. \u8fd8\u662f 2.\uff09\u3002

\u800c\u6211\u4eec\u6700\u7ec8\u7ed9\u51fa\u7684\u7b54\u6848\u662f \\(2r_{x_0}\\)\uff08\u56e0\u4e3a \\(r_{x_0}\\) \u4e0d\u6ee1\u8db3\u6761\u4ef6\uff0c\u4e0d\u662f\u89e3\uff0c\u66f4\u4e0d\u662f\u8fd1\u4f3c\u89e3\uff09\u3002

\u73b0\u5728\uff0c\u6211\u4eec\u6765\u8ba1\u7b97\u8fd1\u4f3c\u6bd4\uff1a

\\[ \\begin{aligned} & \\begin{aligned} \\because \\;\\;\\; & r_{x_0} \\leq r(C^*) \\leq 2r_{x_0} \\\\ & \\frac{1}{2} \\leq \\frac{r(C^*)}{2r_{x_0}} \\leq 1 \\\\ & 1 \\leq \\frac{2r_{x_0}}{r(C^*)} \\leq 2 \\end{aligned} \\\\ & \\therefore \\; \\rho = \\max\\{ \\frac{ 2 r_{x_0} }{ r(C^*) }, \\frac{ r(C^*) }{ 2 r_{x_0} } \\} = 2 \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#smarter-greedy","title":"Smarter Greedy","text":"

\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u4e0a\u9762\u90a3\u4e2a\u505a\u6cd5\u603b\u662f\u968f\u673a\u7684\u9009\u53d6\u65b0\u7684 \\(c_i\\)\uff0c\u4f46\u662f\u5bf9\u4e8e center \u7684\u9009\u53d6\uff0c\u6211\u4eec\u5176\u5b9e\u53ef\u4ee5\u603b\u662f\u9009\u62e9\u8ddd\u79bb\u5df2\u6709\u7684 center \u6700\u8fdc\u7684\u70b9\uff0c\u6b64\u5916\uff0c\u5f53 \\(|C| > k\\) \u65f6\uff0c\u6211\u4eec\u4e5f\u6ca1\u5fc5\u8981\u7ee7\u7eed\u505a\u4e86\u3002

\u6d41\u7a0b\u63cf\u8ff0

  1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff0c\\(S_x = S\\)\uff1b
  2. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
  3. \u5f53 \\(|C_x| \\leq k\\) \u4e14 \\(S_x \\not = \\emptyset\\) \u65f6\uff0c\u91cd\u590d\u4ee5\u4e0b\u6b65\u9aa4\uff1a
    1. \u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u8fd9\u4e2a site \u6ee1\u8db3 \\(\\forall s_j \\in S_x \\quad dis(s_i, C_x) \\geq dis(s_j, C_x)\\)\uff08\u5373\u8fd9\u4e2a\u70b9\u662f\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4e2d\u8ddd\u79bb \\(C_x\\) \u6700\u8fdc\u7684\u70b9\uff09\uff1b
    2. \u5c06 \\(s_i\\) \u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
  4. \u5982\u679c \\(|C_x| \\leq k\\) \u4e14 \\(S_x = \\emptyset\\)\uff0c\u5219\u8fd4\u56de yes\uff1b\u5426\u5219\u8fd4\u56de no\u3002

\u7531\u4e8e\u8fd9\u4e2a\u505a\u6cd5\u5b9e\u9645\u4e0a\u53ea\u662f\u4f18\u5316\u4e86\u4e00\u4e0b\u542f\u53d1\u5f0f\u7684\u7b56\u7565\uff0c\u5e76\u6ca1\u6709\u6539\u53d8\u5185\u6838\uff0c\u6240\u4ee5\u5176\u8fd1\u4f3c\u6bd4\u4ecd\u7136\u662f \\(2\\)\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u603b\u7ed3","title":"\u603b\u7ed3","text":"

\u5173\u4e8e\u7b97\u6cd5\u7684\u8bbe\u8ba1\uff0c\u6211\u4eec\u8003\u8651\u8fd9\u4e09\u4e2a\u7ef4\u5ea6\uff1a

  1. \u6700\u4f18\u6027(optimality)\uff1a\u5373\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
  2. \u9ad8\u6548\u6027(efficiency)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u9ad8\u6548\uff1b
  3. \u666e\u904d\u6027(all instances)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u666e\u904d\u9002\u7528\u4e8e\u6240\u6709\u7684\u60c5\u51b5\uff1b

\u5018\u82e5\u4e00\u4e2a\u89e3\u6cd5\uff1a

  1. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u9ad8\u6548\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u7279\u6b8a\u60c5\u51b5\u80fd\u9ad8\u6548\u6c42\u51c6\u786e\u89e3\uff1b
  2. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u6240\u6709\u60c5\u51b5\u90fd\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
  3. \u540c\u65f6\u6ee1\u8db3\u9ad8\u6548\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u53ef\u80fd\u662f\u4e2a\u8fd1\u4f3c\u7b97\u6cd5\uff1b

\u5c31\u7b97 N=NP \u6210\u7acb\uff0c\u6211\u4eec\u4ecd\u7136\u65e0\u6cd5\u4fdd\u8bc1\u4e09\u4e2a\u613f\u671b\u4e00\u6b21\u6ee1\u8db3\u3002

\u4e0d\u662f\u5f88\u660e\u767d\u6700\u540e\u4e00\u53e5\u8bdd\u5982\u4f55\u7406\u89e3\uff0c\u4f46\u662f\u8fd9\u4e00\u90e8\u5206\u5e94\u8be5\u5c31\u662f\u770b\u4e2a\u773c\u719f\uff0c\u4e0d\u662f\u5f88\u91cd\u8981\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/","title":"Lecture 12 | Local Search","text":"

\u7ea6 365 \u4e2a\u5b57 17 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

\u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

\u5373\u5148\u627e\u5230\u4e00\u4e2a\u53ef\u884c\u89e3\uff0c\u4ee5\u53ca\u91cf\u5316\u5176\u4f18\u7a0b\u5ea6\u7684\u76ee\u6807\u51fd\u6570\uff0c\u518d\u5728\u8fd9\u4e2a\u53ef\u884c\u89e3\u4e0a\u5bfb\u6c42\u4f18\u5316\uff0c\u76f4\u5230\u8fbe\u5230\u5c40\u90e8\u6700\u4f18\u89e3\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-vertex-cover-problem","title":"[\u6848\u4f8b] The Vertex Cover Problem","text":"

\u9876\u70b9\u8986\u76d6\u95ee\u9898(vertex cover problem)\u6307\u7ed9\u5b9a\u4e00\u4e2a\u65e0\u5411\u56fe \\(G=(V,E)\\)\uff0c\u627e\u5230\u4e00\u4e2a\u6700\u5c0f\u7684\u9876\u70b9\u96c6 \\(S\\subseteq V\\)\uff0c\u4f7f\u5f97\u6bcf\u6761\u8fb9 \\((u,v)\\) \u90fd\u81f3\u5c11\u6709\u4e00\u4e2a\u7aef\u70b9\u5728 \\(S\\) \u4e2d\uff08\u5373 \\(u\\in S \\lor v\\in S\\)\uff09\u3002

\u8fd9\u4e2a\u95ee\u9898\u7684\u53ef\u884c\u89e3\u4e3a \\(S = V\\)\uff0c\u5373\u5b8c\u5168\u8986\u76d6\uff0c\u5176\u76ee\u6807\u51fd\u6570\u4e3a \\(cost(S) = |S|\\)\u3002\u5373\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528 local search \u6765\u964d\u4f4e \\(|S|\\)\u3002

\u7ed9\u51fa\u51e0\u79cd\u6848\u4f8b\u4ee5\u53ca\u53ef\u89c6\u5316\uff0c\u8bf4\u660e\u5c40\u90e8\u641c\u7d22\u5bb9\u6613\u5931\u6548\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","title":"\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","text":"

\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5(the Metropolis algorithm)\u7684\u8fc7\u7a0b\uff1a

\u51d1\u5408\u4e00\u4e0b\uff0c\u4e4b\u540e\u6709\u7a7a\u518d\u6539\u3002

SolutionType Metropolis() {   Define constants k and T;\nStart from a feasible solution S \\in FS ;\nMinCost = cost(S);\nwhile (1) {\nS\u2019 = Randomly chosen from N(S); CurrentCost = cost(S\u2019);\nif ( CurrentCost < MinCost ) {\nMinCost = CurrentCost;    S = S\u2019;\n}\nelse {\nWith a probability e^{-\\Delta cost / (kT)}, let S = S\u2019;\nelse  break;\n}\n}\nreturn S;\n}\n

\u6ce8\uff1a\u5bf9\u4e8ecase 1\uff0c\u6709\u4e00\u5b9a\u6982\u7387\u53ef\u4ee5\u8df3\u51falocal optimum\u5f97\u5230\u6b63\u786e\u89e3\u3002\u4f46\u662f\u5bf9case 0\uff0c\u6709\u53ef\u80fd\u5728\u52a01\u548c\u51cf1\u4e4b\u95f4\u65e0\u9650\u9707\u8361\u2026\u2026 \u6ce8\uff1a\u5f53\uff08\u6e29\u5ea6\uff09T\u5f88\u9ad8\u65f6\uff0c\u4e0a\u5761\u7684\u6982\u7387\u51e0\u4e4e\u4e3a1\uff0c\u5bb9\u6613\u5f15\u8d77\u5e95\u90e8\u9707\u8361\uff1b\u5f53T\u63a5\u8fd10\u65f6\uff0c\u4e0a\u5761\u6982\u7387\u51e0\u4e4e\u4e3a0\uff0c\u63a5\u8fd1\u539f\u59cb\u7684\u68af\u5ea6\u4e0b\u964d\u6cd5\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6a21\u62df\u9000\u706b","title":"\u6a21\u62df\u9000\u706b","text":"

\u6a21\u62df\u9000\u706b(simulated annealing)

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-hopfield-neural-networks","title":"[\u6848\u4f8b] Hopfield Neural Networks","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Hopfield_network

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-maximum-cut-problem","title":"[\u6848\u4f8b] The Maximum Cut Problem","text":"

links

Wikipedia: https://en.wikipedia.org/wiki/Maximum_cut

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/","title":"Lecture 13 | Randomized Algorithms","text":"

\u7ea6 25 \u4e2a\u5b57

\u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

\u4e00\u4e9b\u6982\u5ff5\u8bf4\u660e

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#the-hiring-problem","title":"The Hiring Problem","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#modified-quick-sort","title":"Modified Quick Sort","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec14/","title":"Lecture 14 | Parallel","text":"

\u7ea6 3 \u4e2a\u5b57

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/","title":"Lecture 15 | External Sorting","text":"

\u7ea6 6424 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f

link

Wikipedia: https://en.wikipedia.org/wiki/External_sorting

\u5916\u6392\u5e8f\u4e0e\u6570\u636e\u5e93\u7cfb\u7edf\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\u6709\u4ea4\u53c9\u5173\u7cfb\uff0c\u5f53\u9700\u8981\u6392\u5e8f\u7684\u6570\u636e\u8fc7\u5927\uff0c\u800c\u65e0\u6cd5\u88ab\u5b8c\u5168\u653e\u5728\u5185\u5b58\u65f6\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u65e0\u6cd5\u88ab\u5e94\u7528\u3002\u6b64\u65f6\u9700\u8981\u4f7f\u7528\u5916\u6392\u5e8f\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u5728\u66f4\u5927\u7684\u5c3a\u5ea6\u4e0a\u8fdb\u884c\u7c7b\u4f3c\u5f52\u5e76\u7684\u64cd\u4f5c\u3002

\u800c\u6b63\u56e0\u4e3a\u6b64\uff0c\u5916\u90e8\u6392\u5e8f\u7684\u8fc7\u7a0b\u4e0e\u786c\u4ef6\u8bbe\u8ba1\u6709\u4e00\u5b9a\u5173\u7cfb\u3002

\u4e0e\u786c\u4ef6\u76f8\u5173\u7684\u4e00\u4e9b\u8bf4\u660e

\u5177\u4f53\u6765\u8bf4\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u6392\u5e8f\u7684\u5bf9\u8c61\u90fd\u662f\u653e\u5728\u5185\u5b58\u91cc\u7684\u4e00\u4e9b\u6570\u636e\uff0c\u4f8b\u5982\u4e00\u4e2a int \u6570\u7ec4\u3002\u7136\u800c\u5916\u90e8\u6392\u5e8f\u6392\u5e8f\u7684\u5bf9\u8c61\uff0c\u6216\u8005\u8bf4\u8981\u6392\u5e8f\u7684\u90a3\u4e2a\u201c\u6570\u7ec4\u201d\uff0c\u6ca1\u6cd5\u88ab\u5b8c\u6574\u5730\u5b58\u5728\u5185\u5b58\u91cc\uff0c\u5b83\u4eec\u90fd\u88ab\u5b58\u50a8\u5728\u786c\u76d8\u4e4b\u7c7b\u7684\u975e\u6613\u5931\u4ecb\u8d28\u4e2d\uff0c\u800c\u4ece\u8fd9\u79cd\u4ecb\u8d28\u91cc\u8bfb\u53d6\u6570\u636e\u5f80\u5f80\u5177\u6709\u8f83\u5927\u7684\u5f00\u9500\uff0c\u6240\u4ee5\u6211\u4eec\u603b\u662f\u201c\u4e00\u5757\u4e00\u5757\u201d\u4ece\u91cc\u9762\u90a3\u6570\u636e\u3002

\u6253\u4e2a\u6bd4\u65b9\uff0c\u4f60\u73b0\u5728\u9700\u8981\u5bf9\u4e00\u6574\u4e2a\u56fe\u4e66\u9986\uff08\u786c\u76d8\uff09\u7684\u4e66\u505a\u6392\u5e8f\uff0c\u4f46\u662f\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u6700\u591a\u653e\u4e0b\u4e09\u5341\u672c\u4e66\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4f60\u4e00\u6b21\u6700\u591a\u5904\u7406\u4e09\u5341\u672c\u4e66\u3002\u800c\u4e3a\u4e86\u4ece\u56fe\u4e66\u9986\u4e2d\u83b7\u53d6\u9700\u8981\u6392\u7684\u4e66\uff0c\u4f60\u5f97\u5148\u627e\u5230\u8fd9\u4e9b\u4e66\u5728\u54ea\uff08seek\uff09\uff0c\u7136\u540e\u518d\u628a\u8fde\u7eed\u7684\u4e09\u5341\u672c\u4e66\u62ff\u51fa\u6765\uff08block transfer\uff09\uff0c\u653e\u5230\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u518d\u6392\u5e8f\uff0c\u800c\u4e3a\u4e86\u7ed9\u63a5\u4e0b\u6765\u4e09\u5341\u672c\u4e66\u817e\u4f4d\u7f6e\uff0c\u4f60\u8fd8\u5f97\u628a\u6392\u597d\u7684\u4e09\u5341\u672c\u4e66\u518d\u653e\u56de\u53bb\uff08\u5373\u8bb0\u5f55\u4e0b\u6392\u5e8f\u7ed3\u679c\uff0c\u540c\u6837\u4e5f\u662f\u4e00\u6b21 block transfer\uff09\u3002

\u7efc\u4e0a\u6240\u8ff0\uff0c\u5916\u90e8\u6392\u5e8f\u4e3b\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u6309\u7167\u600e\u6837\u7684\u7b56\u7565\u6765\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u6392\u5e8f\u3002

\u5bfc\u8bfb

\u7531\u4e8e ADS \u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u548c\u540c\u65f6\u671f\u6570\u636e\u5e93\u7cfb\u7edf\u8fd9\u95e8\u8bfe\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u6709\u540c\u6709\u5f02\uff0c\u6240\u4ee5\u6211\u6253\u7b97\u5148\u5728\u5927\u6982\u8bb2\u5916\u6392\u5e8f\u7684\u6838\u5fc3\u601d\u8def\uff0c\u518d\u5c55\u5f00 ADS \u8bfe\u7a0b\u4e2d\u7684\u5177\u4f53\u8fc7\u7a0b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

\u5916\u6392\u5e8f\u7684\u57fa\u672c\u601d\u8def\u5c31\u662f\u5c06\u6570\u636e\u5206\u4e3a\u82e5\u5e72\u4e2a\u5c0f\u5757\uff0c\u7136\u540e\u5bf9\u6bcf\u4e2a\u5c0f\u5757\u8fdb\u884c\u6392\u5e8f\uff0c\u6700\u540e\u518d\u5c06\u8fd9\u4e9b\u5c0f\u5757\u5408\u5e76\u8d77\u6765\u3002\u800c\u6211\u4eec\u5e38\u8bf4\u7684\u5f52\u5e76\u6392\u5e8f\uff0c\u6307\u7684\u662f\u9012\u5f52\u5730\u5c06\u4e24\u5757\u5408\u6210\u4e00\u5757\uff0c\u800c\u6240\u8c13\u7684 \\(k\\) \u8def\uff08\\(k\\)-way\uff09\u5f52\u5e76\uff0c\u5c31\u662f\u5c06 \\(k\\) \u5757\u5408\u6210\u4e00\u5757\u3002

\u90a3\u4e48\u5982\u4f55\u5f52\u5e76\u5462\uff1f\u6211\u5c06\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u6765\u7b80\u5355\u9610\u8ff0\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u903b\u8f91\u7ef4\u5ea6","title":"\u903b\u8f91\u7ef4\u5ea6","text":"

\u5916\u90e8\u6392\u5e8f\u6240\u4f7f\u7528\u7684\u5f52\u5e76\u6392\u5e8f\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u548c\u666e\u901a\u7684\u5f52\u5e76\u6392\u5e8f\u4e00\u81f4\uff0c\u603b\u662f\u5c06 \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u5408\u5e76\u4e3a 1 \u4e2a\u6709\u5e8f\u5e8f\u5217\u3002

\u800c\u8fd9\u91cc\u7684\u201c\u6709\u5e8f\u5e8f\u5217\u201d\uff0c\u5728\u5916\u6392\u5e8f\u4e2d\u88ab\u79f0\u4e3a\u201crun\u201d\uff0c\u5373\u6bcf\u6b21\u5f52\u5e76\u6211\u4eec\u53e6 \\(k\\) \u4e2a run \u53d8\u6210\u4e00\u4e2a run\u3002\u6b63\u7740\u8bf4\u5c31\u662f\uff1a

run

\u4e00\u4e2a run \u6307\u7684\u662f\u4e00\u6bb5\u8fc7\u7a0b\u4e2d\u7684\u6570\u636e\uff0c\u5728\u672c\u6587\u4e2d\u7279\u6307\u5f85\u5f52\u5e76\u7684\u6709\u5e8f\u7684\u5e8f\u5217\uff0c\u5728 \\(k\\)-way merge \u4e2d\uff0c\u6211\u4eec\u603b\u662f\u5c06 \\(k\\) \u4e2a run \u5408\u5e76\u4e3a 1 \u4e2a run\u3002

\u8bf4\u660e

\u8fd9\u91cc\u7684 run \u7684\u5b9a\u4e49\u662f\u6211\u81ea\u5df1\u8111\u8865\u51fa\u6765\u7684\uff0c\u5e76\u4e0d\u786e\u5b9a\u662f\u5426\u4e25\u683c\uff0c\u4f46\u662f\u53ef\u4ee5\u4fdd\u8bc1\u7684\u662f\uff1a \u4e00\u4e2a run \u5728\u53c2\u4e0e merge \u4e4b\u524d\u80af\u5b9a\u5df2\u7ecf\u6709\u5e8f\u4e86\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a \"have already run\"\uff0c\u800c\u4e3a\u4e86\u4e0d\u6405\u7cca\u8bfb\u8005\u7684\u8111\u5b50\uff0c\u6211\u8fd9\u91cc\u5c31\u4ee5\u8fd9\u4e2a\u5b9a\u4e49\u4e3a\u51c6\u3002

\u4ece\u6267\u884c\u7684\u987a\u5e8f\u6765\u8bf4\uff0c\u5185\u6392\u5e8f\u4e2d\u7684\u5f52\u5e76\u6392\u5e8f\u662f\u4e00\u4e2a\u81ea\u4e0a\u800c\u4e0b\u4e0d\u65ad \\(\\frac{1}{k}\\) \u5730\u5212\u5206\uff0c\u518d\u81ea\u4e0b\u800c\u4e0a\u4e0d\u65ad\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002\u76f8\u53cd\uff0c\u5916\u6392\u5e8f\u7531\u4e8e\u5176\u7279\u6027\u9650\u5236\uff0c\u5176\u201c\u5f52\u5e76\u6bb5\u201d\u5e76\u4e0d\u662f\u81ea\u4e0a\u800c\u4e0b \\(\\frac{1}{k}\\) \u5212\u5206\u51fa\u6765\u7684\uff0c\u800c\u662f\u6839\u636e\u786c\u4ef6\u5904\u7406\u80fd\u529b\uff0c\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u7136\u540e\u76f4\u63a5\u81ea\u4e0b\u800c\u4e0a\u5f52\u5e76\u3002

\u800c\u8fd9\u6837\u4e00\u4e2a\u5c06 \\(k \\cdot c\\) \u4e2a run merge \u6210 \\(c\\) \u4e2a run \u7684\u8fc7\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e00\u4e2a pass\u3002\uff08\u5728\u5f52\u5e76\u6811\u4e0a\u4f53\u73b0\u4e3a\u4e00\u5c42\u3002\uff09

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u7269\u7406\u7ef4\u5ea6","title":"\u7269\u7406\u7ef4\u5ea6","text":"

\u5173\u4e8e\u7269\u7406\u7ef4\u5ea6\uff0c\u6d89\u53ca\u5230\u4e00\u4e9b\u786c\u4ef6\u77e5\u8bc6\uff0c\u5728 ADS \u4e2d\u4e3a\u4e86\u65b9\u4fbf\u8bf4\u660e\u4f1a\u5c06\u5176\u7b80\u5316\uff0c\u6709\u5173 block \u7684\u6982\u5ff5\u5c06\u88ab\u62bd\u8c61\u5316\u4e3a\u201c\u6570\u636e\u5355\u4f4d\u201d\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u5185\u5b58\u7684\u5927\u5c0f\u662f\u6709\u9650\u7684\uff0c\u5212\u5206\u7ed9\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\u4e5f\u5e94\u5f53\u662f\u6709\u9650\u7684\uff0c\u6211\u4eec\u7528 \\(M\\) \u6765\u8bb0\u5b83\uff0c\u5373\u5185\u5b58\u4e2d\u4e00\u6b21\u53ea\u80fd\u5904\u7406 \\(M\\) \u4e2a\u5355\u4f4d\u7684\u6570\u636e\u3002

\u66f4\u7ec6\u8282\u7684\uff0c\u6211\u4eec\u5e94\u5f53\u66f4\u5177\u7269\u7406\u5927\u5c0f\u6765\u8ba1\u7b97 \\(M\\)\uff0c\u4f8b\u5982\u4e00\u6761\u6570\u636e\u7684\u5927\u5c0f\u662f \\(l \\text{Bytes}\\)\uff0c\u800c\u5185\u5b58\u7684\u5927\u5c0f\u662f \\(m \\text{Bytes}\\)\uff0c\u90a3\u4e48\u4e00\u4e2a\u5185\u5b58\u80fd\u591f\u5bb9\u7eb3\u7684\u6570\u636e\u6570\u91cf\u5e94\u5f53\u4e3a \\(\\lfloor \\frac{m}{l} \\rfloor\\)\u3002

\u4f46\u662f\u65e2\u7136\u8981\u5f52\u5e76\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5c06 \\(k\\) \u8def\u7684\u6570\u636e\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u80af\u5b9a\u5e0c\u671b\u8fd9 \\(k\\) \u8def\u90fd\u80fd\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u662f\u4e0d\u5207\u5b9e\u9645\u7684\uff0c\u6211\u4eec\u6700\u591a\u516c\u5e73\u5730\u8bfb\u5165\u6bcf\u4e00\u8def\u7684\u524d \\(\\lfloor \\frac{M}{k} \\rfloor\\) \u4e2a\u6570\u636e\u2014\u2014\u4f46\u8fd9\u5df2\u7ecf\u8db3\u591f\u2014\u2014\u5bf9\u4e8e \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u7684\u5408\u5e76\u64cd\u4f5c\uff0c\u5176\u5408\u5e76\u8fc7\u7a0b\u4e2d\u4e5f\u6070\u597d\u53ea\u4e0e\u6700\u9760\u524d\u7684\u3001\u672a\u6392\u5e8f\u7684\u4e00\u90e8\u5206\u6570\u636e\u6709\u5173\u3002

\u8bf4\u660e

\u4e4b\u540e\u6240\u63d0\u5230\u7684\uff0c\u6709\u5173\u4e8e\u6392\u5e8f\u6570\u636e\u7684\u201c\u5185\u5b58\u201d\uff0c\u6307\u7684\u90fd\u662f\u5212\u5206\u7ed9\u7b97\u6cd5\uff0c\u7528\u6765\u5b58\u653e\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\uff01

example

\u4e3e\u4f8b\u6765\u8bf4\uff0c\u5047\u8bbe\u73b0\u5728\u6709\u4e24\u4e2a run\uff0c\u5206\u522b\u4e3a\uff1a

  1. 1 3 5 7 9
  2. 0 2 4 6 8

\u4f46\u662f\u5185\u5b58\u53ea\u80fd\u653e 4 \u4e2a\u5355\u4f4d\u6570\u636e\uff0c\u6240\u4ee5\u5bf9\u4e8e\u6bcf\u4e2a run \u603b\u662f\u53ea\u6709\u524d 2 \u4e2a\u6570\u636e\u662f\u53ef\u89c1\u7684\u3002\u4f46\u662f\u8fd9\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u53ef\u4ee5\u786e\u5b9a\u8fd9\u4e24\u4e2a run \u5408\u5e76\u7684\u7ed3\u679c\u4e2d\uff0c\u524d\u4e00\u90e8\u5206\u662f 0 1 2\uff0c\u800c\u81f3\u4e8e 2 \u540e\u9762\u6392\u4ec0\u4e48\uff0c\u5219\u8981\u4ece run2 \u4e2d\u53d6\u51fa\u4e4b\u540e\u7684\u6570\u636e\uff0c\u518d\u4e0e run1 \u4f59\u4e0b\u7684 _ 3 \u5408\u5e76\u3002

\u6613\u9519\u70b9

\u6ce8\u610f\uff0c\u5f53\u5176\u4e2d\u4e00\u4e2a\u6bb5\u7684 buffer \u7a7a\u4e86\u4ee5\u540e\uff0c\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u628a\u5176\u4ed6\u6bb5\u7684 buffer \u76f4\u63a5\u6392\u5e8f\u8fdb\u53bb\uff0c\u800c\u5fc5\u987b\u5148\u586b\u5145\u8fd9\u4e2a\u7a7a buffer \u7684\u5185\u5bb9\uff0c\u518d\u7ee7\u7eed\u6392\u5e8f\u3002

\u60f3\u8c61\u8fd9\u6837\u4e00\u4e2a\u60c5\u51b5\uff0c\u7a7a buffer \u5c06\u8981\u8f7d\u5165\u7684\u4e0b\u4e00\u6bb5\u6570\u636e\u662f 3 4 5\uff0c\u800c\u53e6\u5916\u4e00\u4e2a buffer \u5269\u4e0b\u7684\u6570\u636e\u662f 7\uff0c\u90a3\u4e48\u663e\u7136\uff0c3 4 5 \u5e94\u8be5\u5148\u4e8e 7 \u88ab\u6392\u5e8f\u3002

\u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e5f\u6b63\u662f\u5916\u6392\u5e8f\u80fd\u591f\u8fdb\u884c\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\u3002

\u5176\u4e2d\u6bd4\u8f83\u7279\u522b\u7684\u6b65\u9aa4\u5c31\u662f\uff0c\u6700\u5f00\u59cb\u7684\u6392\u5e8f\uff0c\u5373\u7b2c\u4e00\u4e2a pass\u3002\u5148\u524d\u6211\u4eec\u5728#\u903b\u8f91\u7ef4\u5ea6\u91cc\u63d0\u5230\u4e86\uff0c\u5916\u6392\u5e8f\u7684\u7b2c\u4e00\u4e2a pass \u4f1a\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u7684\u5927\u5c0f\u5c31\u662f \\(M\\)\u3002\u7528\u8bed\u8a00\u63cf\u8ff0\uff0c\u5c31\u662f\u6700\u65e9\u7684 run \u7684\u5927\u5c0f\u5c31\u662f\u5e73\u5747\u6bcf\u4e00\u8def\u80fd\u591f\u5728\u5185\u5b58\u4e2d\u5904\u7406\u7684\u6700\u5927\u6570\u636e\u5355\u4f4d\u91cf\u3002

\u7136\u800c\u95ee\u9898\u51fa\u73b0\u4e86\uff0c\u6839\u636e\u6211\u4e4b\u524d\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0crun \u5e94\u5f53\u662f\u6709\u5e8f\u7684\uff0c\u4f46\u662f\u4ece\u539f\u59cb\u6570\u636e\u91cc\u8bfb\u51fa\u6765\u7684\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u662f\u65e0\u5e8f\u7684\u3002\u4f46\u662f\u5bf9\u4e8e\u6700\u521d\u7684 run\uff0c\u5b83\u5fc5\u7136\u80fd\u591f\u6574\u6bb5\u653e\u5230\u5185\u5b58\u91cc\uff08\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u4e5f\u53ea\u6709\u6700\u521d\u7684 run \u80fd\u591f\u5b8c\u6574\u5730\u653e\u5230\u5185\u5b58\u91cc\uff09\uff0c\u56e0\u6b64\u76f4\u63a5\u5bf9\u5176\u8fdb\u884c\u5185\u6392\u5e8f\u5373\u53ef\u3002

\u903b\u8f91\u8054\u7cfb

\u4e2d\u7ee7

\u4ee5\u4e0a\u5185\u5bb9\u662f\u5bf9\u5916\u6392\u5e8f\u6838\u5fc3\u601d\u60f3\u7684\u4e00\u4e2a\u7b80\u5355\u4ecb\u7ecd\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u4ee5 ADS \u6240\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u8303\u5f0f\uff0c\u6765\u4ecb\u7ecd\u4e00\u4e0b\u5177\u4f53\u7684\u8fc7\u7a0b\u548c\u4e00\u4e9b\u6539\u8fdb\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5177\u4f53\u5206\u6790","title":"\u5177\u4f53\u5206\u6790","text":"

ADS \u4e2d\u76f8\u6bd4\u4e0a\u9762\u4ecb\u7ecd\u7684\u90e8\u5206\uff0c\u53c8\u5f15\u5165\u4e86\u4e00\u4e2a\u53eb tape \u7684\u6982\u5ff5\uff0ctape \u7684\u4e2d\u6587\u662f\u78c1\u5e26\uff0c\u800c\u5728\u8fd9\u4e2a\u6846\u67b6\u4e2d\uff0c\u6211\u66f4\u503e\u5411\u4e8e\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2a\u62bd\u8c61\u7684\u6982\u5ff5\u3002

\u76f8\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u9645\u8fc7\u7a0b\u4e0e\u4e0a\u9762\u63cf\u8ff0\u7684\u65b9\u6cd5\u53ef\u80fd\u6709\u4e00\u4e9b\u611f\u53d7\u4e0a\u7684\u5dee\u522b\uff0c\u5982\u679c\u53ea\u662f\u4e86\u89e3\u601d\u60f3\u7684\u8bdd\u4e0a\u534a\u90e8\u5206\u5df2\u7ecf\u8db3\u591f\uff08\u5f53\u7136\u540e\u9762\u8fd8\u6709\u4e00\u4e9b\u57fa\u4e8e\u5982\u4e0b\u6a21\u578b\u7684\u4f18\u5316\u8ba8\u8bba\uff09\uff0c\u4f46\u662f\u6bd5\u7adf\u8fd8\u662f\u9762\u5411\u8003\u8bd5\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4ee5 ADS \u8bfe\u4ef6\u7684\u65b9\u6cd5\u518d\u4ecb\u7ecd\u4e00\u6b21\u3002

\u8bf4\u660e

\u6211\u4e4b\u540e\u4f1a\u4ee5 run \u4e3a\u5355\u4f4d\uff0c\u6765\u63cf\u8ff0\u5408\u5e76\u8fc7\u7a0b\u3002\u4f46\u662f\u5b9e\u9645\u53d1\u751f\u5728\u8ba1\u7b97\u673a\u91cc\u7684\u6b65\u9aa4\u66f4\u52a0\u590d\u6742\uff1a

\u9700\u8981\u5148\u5c06\u6bcf\u4e00\u6761 tape \u7684\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\u5185\u5b58\u7684 buffer \u4e2d\uff0c\u7136\u540e\u5229\u7528\u8fd9\u4e9b buffer \u6765\u8fdb\u884c\u6392\u5e8f\uff1b\u5f53\u67d0\u4e2a buffer \u7a7a\u4e86\u4ee5\u540e\u8981\u7acb\u523b\u5c06\u5bf9\u5e94 tape \u7684\u4e0b\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\uff0c\u76f4\u5230\u6ca1\u6709\u6570\u636e\u53ef\u4ee5\u586b\u5145\u4e3a\u6b62\u3002

\u4e5f\u6b63\u662f#\u7269\u7406\u7ef4\u5ea6\u6240\u8bf4\u7684\u90a3\u4e9b\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","title":"\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","text":"

\u6211\u4eec\u4ee5 2-way merge \u4e3a\u4f8b\uff0c\u7ed3\u5408 ADS \u8bfe\u4ef6\u4e2d\u7684\u914d\u56fe\u6765\u8bf4\u660e\u3002

\u51c6\u5907

\u56fe\u4e2d \\(T_1\\) \u662f\u4e00\u6761 tape \u7684\u7f16\u53f7\uff0c\u6211\u4eec\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u5e8f\u5217\u7684\u7269\u7406\u5730\u5740\uff0c\u6216\u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a\u6570\u7ec4\uff0c\u53ea\u4e0d\u8fc7\u5b83\u7684\u5b9e\u9645\u6570\u636e\u662f\u5728\u786c\u76d8\u4e2d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684 tape \u8868\u793a\u7684\u90fd\u662f\u786c\u76d8\u4e2d\u7684\u6570\u636e\u3002

\u8fd9\u6761 tape \u4e2d\u6709 13 \u4e2a\u5143\u7d20\uff0c\u6211\u4eec\u8bb0\u5176\u4e3a \\(N = 13\\)\u3002\u800c\u8fd9\u6761\u539f\u59cb\u7684 tape \u88ab\u5212\u5206\u4e3a\u4e86 5 \u6bb5\uff0c\u6bcf\u4e00\u6bb5\u90fd\u6709\u4e0d\u8d85\u8fc7 3 \u4e2a\u5143\u7d20\uff0c\u6b64\u65f6 \\(M = 3\\)\u3002\u5373\u6709 \\(\\lceil \\frac{N}{M} \\rceil = 5\\)\u3002

Pass 1

\u73b0\u5728\u6211\u4eec\u8981\u5f00\u59cb merge \u4e86\u3002\u5bf9\u4e8e\u8fd9\u6bb5\u6570\u636e\u6765\u8bf4\uff0c\u8fd9\u662f\u610f\u4e49\u91cd\u5927\u7684\u201c\u4eba\u751f\u7b2c\u4e00\u6b21\u201d\uff0c\u76f8\u6bd4\u4e8e\u5176\u4ed6\u5f52\u5e76\u90fd\u662f\u4ece 2 \u4e2a tape \u5f00\u59cb\u7684 pass\uff0c\u8fd9\u4e00\u6b21\u663e\u5f97\u6709\u4e9b\u7279\u6b8a\u3002

\u5728\u7b2c\u4e00\u8f6e\u4e2d\uff0c\u9762\u5bf9\u5168\u90e8\u90fd\u662f\u65e0\u5e8f\u7684\u6570\u636e\uff0c\u6211\u4eec\u5c06\u8fd9 \\(\\lceil \\frac{N}{M} \\rceil = 5\\) \u4e2a\u6bb5\u5747\u5206\u5230\u4e24\u6761 tape \u4e0a\uff082-way\uff09\uff0c\u8fd9\u91cc\u7ecf\u5386\u4e24\u4e2a\u6b65\u9aa4\uff1a

  1. \u4f9d\u6b21\u8bfb\u53d6 \\(T_1\\) \u4e2d\u6bcf\u4e00\u6bb5\u6570\u636e\uff08\u521a\u597d\u5360\u6ee1\u5185\u5b58\uff09\uff0c\u5e76\u5bf9\u5b83\u4eec\u8fdb\u884c\u5185\u6392\u5e8f\uff1b
  2. \u5c06\u6392\u5e8f\u5b8c\u7684\u6bb5\uff0c\u8ffd\u52a0\u5199\u5230 \\(T_2\\) \u6216 \\(T_3\\) \u4e2d\uff08\u5177\u4f53\u6bcf\u4e00\u4e2a tape \u5199\u51e0\u6761\uff0c\u4f1a\u6709\u4e13\u95e8\u7b56\u7565\u505a\u8c03\u6574\uff0c\u76ee\u524d\u5148\u5e73\u5206\u7740\u653e\uff09\uff1b

\u4e8e\u662f\uff0c\\(T_1\\) \u4e2d\u7684\u6570\u636e\u4fbf\u88ab\u8f6c\u79fb\u5230\u4e86 \\(T_2\\) \u548c \\(T_3\\)\u3002\u4e3a\u4e86\u91cd\u590d\u5229\u7528 tape\uff0c\u6b64\u65f6\u7684 \\(T_1\\) \u88ab\u770b\u4f5c\u53ef\u4ee5\u7528\u7684\u7a7a\u78c1\u76d8\u4e86\u3002

\u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e00\u4e2a pass\u3002

Pass 2

\u4e4b\u540e\u7684 pass \u5219\u57fa\u672c\u9075\u5faa\u540c\u6837\u7684\u89c4\u5219\uff0c\u4e0d\u65ad\u53d6\u6bcf\u4e00\u8def\u7684\u7b2c\u4e00\u4e2a run \u5e76 merge\uff0c\u5e76\u4e14\u5c06\u7ed3\u679c\u5199\u5230\u4e24\u4e2a\uff08k \u4e2a\uff09\u95f2\u7f6e\u7684 tape \u4e0a\uff08\u548c\u524d\u9762\u8bf4\u8fc7\u7684\u4e00\u6837\uff0c\u8fd9\u91cc\u6682\u4e14\u5c06\u5206\u914d\u7b56\u7565\u5b9a\u4e3a\u5e73\u5206\u5230\u6bcf\u4e00\u4e2a tape \u4e0a\uff09\u3002

\u4f8b\u5982\uff0c\u6211\u4eec\u8981\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u6267\u884c\u5f52\u5e76\u64cd\u4f5c\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684\uff0c\u6709 6 \u4e2a\u6570\u636e\u7684 run\uff0c\u5e76\u5199\u5230\u95f2\u7f6e\u7684 \\(T_1\\) \u4e0a\uff1b\u63a5\u4e0b\u6765\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u6b64\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\\(T_1\\)\u3001\\(T_2\\)\u3001\\(T_3\\) \u90fd\u4e0d\u662f\u95f2\u7f6e\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u65b0\u7684 tape\uff0c\u5199\u5230 \\(T_4\\) \u4e0a\u3002

\u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e8c\u4e2a pass\u3002

Pass 3

pass 3 \u548c pass 2 \u7684\u8fc7\u7a0b\u57fa\u672c\u4e00\u81f4\u3002\u73b0\u5728\u7684 tape \u72b6\u6001\u662f \\(\\{T_2, T_3\\}\\) \u95f2\u7f6e\uff0c\u6211\u4eec\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 12 \u4e2a\u5143\u7d20\uff1b\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 1 \u4e2a\u5143\u7d20\u3002\u8fd9\u4e24\u6bb5\u88ab\u5206\u914d\u5230\u4e24\u6761\u7a7a\u95f2 tape \u4e0a\uff0c\u5373 \\(T_2\\) \u548c \\(T_3\\)\u3002

\u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e09\u4e2a pass\u3002

Pass 4

\u540c\u6837\uff0cpass 4 \u548c\u524d\u9762\u4e24\u4e2a pass \u7684\u8fc7\u7a0b\u4e5f\u662f\u4e00\u81f4\u6027\u7684\uff0c\u4e0d\u505a\u8fc7\u591a\u89e3\u91ca\uff0c\u5bf9\u4e8e\u89c4\u6a21\u66f4\u5927\u7684\u6570\u636e\u4e5f\u662f\u4e00\u6837\uff0c\u9664\u4e86\u7b2c\u4e00\u4e2a pass \u6bd4\u8f83\u7279\u6b8a\uff0c\u5176\u5b83 pass \u90fd\u662f\u4e00\u6837\u7684\u3002\u6700\u7ec8\u5f97\u5230\u53ea\u5269\u4e0b\u4e00\u4e2a tape \u4e2d\u5305\u542b\u552f\u4e00\u7684 run \u65f6\uff0c\u6392\u5e8f\u5c31\u7ed3\u675f\u4e86\u3002

\u81f3\u6b64\uff0c\u6392\u5e8f\u7ed3\u675f\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u4f18\u5316\u7a7a\u95f4","title":"\u4f18\u5316\u7a7a\u95f4","text":"

\u53ef\u4ee5\u4f18\u5316\u7684\u90e8\u5206\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\uff1a

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#pass-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"pass \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

\u4f8b\u5b50\u4e2d\u4e00\u5171\u7ecf\u8fc7\u4e86 4 \u6b21 pass\u3002\u5982\u679c\u6211\u4eec\u8bb0 \\(max(\\#run)\\) \u4e3a \\(\\#run\\) \u6700\u591a\u7684 tape \u7684 \\(\\#run\\)\uff0c\u5219\u6bcf\u4e00\u6b21 pass \u4f1a\u4ee4 \\(max(\\#run)\\) \u7f29\u5c0f\u4e00\u534a\uff0c\u76f4\u5230 \\(max(\\#run)\\) \u53d8\u4e3a 1\uff0c\u4e14\u53ea\u6709\u5b83\u4e00\u6761 tape \u8fd8\u6709\u6570\u636e\uff0c\u6807\u5fd7\u7740\u6392\u5e8f\u7ed3\u675f\u3002

\u5982\u679c\u4e13\u6ce8\u4e8e \\(\\#run\\) \u7684\u53d8\u5316\uff0c\u90a3\u4e48\u4e0a\u9762\u7684\u6a21\u62df\u6b65\u9aa4\u5927\u81f4\u662f\u8fd9\u4e48\u4e00\u4e2a\u8fc7\u7a0b\uff1a

Pass 1

\u539f\u5148 \\(T_1\\) \u4e0a \\(\\#run = 5\\)\uff0c\u73b0\u5c06\u5b83\u5206\u914d\u5230\u4e24\u6761 tape \u4e0a\uff0c\u4e8e\u662f\u6709\uff1a

Pass 2

\u4f9d\u6b21\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u5747\u5206\u5230\u53e6\u5916\u4e24\u6761 tape \u4e0a\uff08\u672a\u4f18\u5316\u7684\u505a\u6cd5\uff0c\u4f18\u5316\u505a\u6cd5\u53c2\u8003#tape-\u4f18\u5316\uff09\uff0c\u4e8e\u662f\u6709\uff1a

\u7ee7\u7eed\u53d6\uff0c\u5373\uff1a

\\(T_3\\) \u4e0a\u5df2\u7ecf\u6ca1\u6709\u4e86\uff0c\u4f46\u662f \\(T_2\\) \u8fd8\u6ca1\u53d6\u5b8c\uff0c\u6240\u4ee5\u53ea\u4ece \\(T_2\\) \u62ff\uff1a

\u6a21\u62df\u5230\u4ece\u8fd9\u91cc\u5176\u5b9e\u5df2\u7ecf\u53ef\u4ee5\u770b\u51fa\u6765\u4e86\uff0c\u5bf9\u4e8e 2-way merge \u6765\u8bf4\uff0c\u6392\u9664\u672b\u6bb5\u60c5\u51b5\uff0c\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u57fa\u672c\u4e0a\u6bcf\u6b21\u90fd\u662f\u4ece 2 \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{2}\\)\u3002

\u90a3\u4e48\uff0c\u5bf9\u4e8e \\(k\\)-way merge \u6765\u8bf4\uff0c\u5c31\u662f\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u6bcf\u6b21\u4ece \\(k\\) \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{k}\\)\u3002

\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5f52\u7eb3\u5f97\u5230\u5982\u4e0b\u8ba1\u7b97\u5f0f\uff1a

\\[ \\begin{aligned} \\#pass &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{(\\#run)}\\rceil }_{\\text{rest passes}} \\\\ &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{ \\lceil \\frac{N}{M} \\rceil }\\rceil }_{\\text{rest passes}} \\end{aligned} \\]

\u5176\u4e2d\uff0c\\(k\\) \u8868\u793a\u5f52\u5e76\u8def\u6570\uff0c\\(N\\) \u8868\u793a\u6570\u636e\u91cf\uff0c\\(M\\) \u8868\u793a\u5185\u5b58\u4e00\u6b21\u80fd\u5904\u7406\u7684\u6570\u636e\u91cf\u3002

\u90a3\u4e48\uff0c\u51cf\u5c11 pass \u7684\u65b9\u6cd5\u4e5f\u5f88\u76f4\u89c2\u4e86\uff0c\u53ea\u9700\u8981\u589e\u52a0 \\(k\\) \u5373\u53ef\uff0c\u5373\u91c7\u53d6\u66f4\u591a\u8def\u7684\u5f52\u5e76\uff0c\u5c31\u80fd\u51cf\u5c11 pass\u3002

\u7136\u800c\uff0c\u5176\u4e2d\u5fc5\u7136\u5b58\u5728\u4e00\u4e2a trade-off \u7684\u5173\u7cfb\uff0c\u867d\u7136 \\(k\\) \u589e\u52a0\u53ef\u4ee5\u51cf\u5c11 \\(\\#pass\\)\uff0c\u4f46\u662f\u5728\u63a5\u4e0b\u6765\u4e00\u8282\u4e2d\u6211\u4eec\u4f1a\u77e5\u9053\uff0c\\(k\\) \u8fc7\u5927\u4f1a\u5bfc\u81f4 tape \u9700\u6c42\u91cf\u589e\u52a0\uff0c\u6b64\u5916\uff0c\\(k\\) \u7684\u589e\u52a0\u4e5f\u4f1a\u5bfc\u81f4\u5185\u6392\u5e8f\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff0c\u4e5f\u4f1a\u589e\u52a0 pass \u5185\u7684 seek \u6b21\u6570\u3002

\u5f53\u7136\uff0c\u9664\u4e86\u66b4\u529b\u7684\u589e\u52a0 \\(k\\) \u4ee5\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u66ff\u6362\u9009\u62e9(Replacement Selection)\u7b97\u6cd5\uff0c\u6765\u751f\u6210\u6bd4 \\(M\\) \u5927\u7684\u521d\u59cb run\uff0c\u4ee5\u76f8\u5bf9\u51cf\u5c11 pass \u6570\u91cf\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","title":"\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","text":"

\u66ff\u6362\u9009\u62e9(Replacement Selection) \u5728 hw15 \u4e2d\u88ab\u5e03\u7f6e\u4e3a\u7f16\u7a0b\u9898\uff0c\u6240\u4ee5\u5176\u5b9e\u73b0\u8fc7\u7a0b\u53ef\u4ee5\u7ed3\u5408\u90a3\u9053\u9898\u76ee\u6765\u5b66\u4e60\u3002

Replacement Selection @ PTA

When the input is much too large to fit into memory, we have to do external sorting instead of internal sorting. One of the key steps in external sorting is to generate sets of sorted records (also called runs) with limited internal memory. The simplest method is to read as many records as possible into the memory, and sort them internally, then write the resulting run back to some tape. The size of each run is the same as the capacity of the internal memory.

Replacement Selection sorting algorithm was described in 1965 by Donald Knuth. Notice that as soon as the first record is written to an output tape, the memory it used becomes available for another record. Assume that we are sorting in ascending order, if the next record is not smaller than the record we have just output, then it can be included in the run.

For example, suppose that we have a set of input { 81, 94, 11, 96, 12, 99, 35 }, and our memory can sort 3 records only. By the simplest method we will obtain three runs: { 11, 81, 94 }, { 12, 96, 99 } and { 35 }. According to the replacement selection algorithm, we would read and sort the first 3 records { 81, 94, 11 } and output 11 as the smallest one. Then one space is available so 96 is read in and will join the first run since it is larger than 11. Now we have { 81, 94, 96 }. After 81 is out, 12 comes in but it must belong to the next run since it is smaller than 81. Hence we have { 94, 96, 12 } where 12 will stay since it belongs to the next run. When 94 is out and 99 is in, since 99 is larger than 94, it must belong to the first run. Eventually we will obtain two runs: the first one contains { 11, 81, 94, 96, 99 } and the second one contains { 12, 35 }.

Your job is to implement this replacement selection algorithm.

\u5229\u7528\u66ff\u6362\u9009\u62e9\u7b56\u7565\u4ee5\u540e\uff0c\u6bcf\u4e00\u6b21\u751f\u6210\u7684 run \u4e00\u5b9a\u4e0d\u5c0f\u4e8e \\(M\\)\uff08\u672b\u7aef\u4f59\u6570\u9664\u5916\uff09\uff0c\u4e8e\u662f\u76f8\u5bf9\u6765\u8bf4 \\(\\#pass\\) \u5c31\u4f1a\u51cf\u5c11\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#tape-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"tape \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

\u5982\u679c\u4f7f\u7528#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u7684\u65b9\u6cd5\uff0c\u90a3\u4e48\u6211\u4eec\u4f7f\u7528 \\(k\\)-way merge \u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape\u3002

\u8fd9\u5176\u5b9e\u5f88\u597d\u7406\u89e3\uff0c\u6211\u4eec\u6bcf\u4e00\u4e2a pass \u9700\u8981 \\(k\\) \u4e2a tape \u6765\u5b58\u653e\u6bcf\u4e00\u8def\u7684\u5e8f\u5217\uff0c\u800c\u5176\u7ed3\u679c\u8981\u5e73\u5206\u653e\u590d\u5236\u5230\u4e0b\u4e00\u4e2a pass \u6240\u9700\u8981\u7684 \\(k\\) \u4e2a pass \u4e2d\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape \u8f6e\u6362\u7740\u6765\u5b58\u50a8\u6570\u636e\u3002

\u800c\u8fd9\u4e0d\u5229\u4e8e\u6211\u4eec\u901a\u8fc7\u589e\u52a0 \\(k\\) \u6765\u51cf\u5c11 \\(\\#pass\\)\uff0c\u56e0\u6b64\u6211\u4eec\u8003\u8651\u67d0\u79cd\u7b56\u7565\u6765\u4f18\u5316 tape \u7684\u4f7f\u7528\u3002

\u5728#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u6211\u591a\u6b21\u6697\u793a\uff0c\u4e4b\u540e\u4f1a\u5bf9\u300c\u5c06\u5f52\u5e76\u540e\u7684 run \u5e73\u5206\u5230\u5404 tape\u300d\u8fd9\u4ef6\u4e8b\u505a\u4f18\u5316\u3002

\u6211\u4eec\u53ef\u4ee5\u8003\u8651\uff0c\u4e0d\u5e73\u5747\u7684\u5c06\u5f52\u5e76\u540e\u7684 run \u5206\u914d\u5230\u5404\u4e2a tape \u4e0a\uff0c\u5373\u603b\u6709\u4e00\u4e9b tape \u6bd4\u522b\u7684 tape \u591a\u4e00\u4e9b run\u3002\u867d\u7136\u5728\u5e73\u5206\u7684\u7b56\u7565\u4e2d\uff0c\u4e5f\u6709\u53ef\u80fd\u4f1a\u6709\u591a\u51fa\u6765\u7684 run\uff0c\u4f46\u662f\u53ea\u4f1a\u591a\u4e00\u4e2a\uff08\u4e5f\u5c31\u662f\u5c06 \\(x \\mod k\\) \u7684\u4f59\u6570\u5206\u914d\u5230\u5176\u4e2d\u51e0\u4e2a tape \u4e0a\uff09\u3002\u6b64\u65f6\u8fd9\u4e9b\u591a\u51fa\u6765\u7684 run \u53ef\u80fd\u5c31\u662f\u5355\u7eaf\u7684\u4ece\u4e00\u4e2a tape \u522b\u590d\u5236\u5230\u53e6\u5916\u4e00\u4e2a tape \u4e0a\uff0c\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u6ca1\u5fc5\u8981\u7684\u64cd\u4f5c\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u7559\u4e0b\u5b83\uff0c\u5c06\u5f53\u524d tape \u62ff\u5230\u4e0b\u4e00\u8f6e\u7528\u5462\uff1f

\u4f46\u662f\u7531\u4e8e\u5e73\u5206\u7b56\u7565\u4e0b\uff0c\u8fd9\u4e2a\u60c5\u51b5\u7684\u51fa\u73b0\u5e76\u4e0d\u53ef\u63a7\uff0c\u800c\u4e14\u603b\u662f\u4f1a\u5f15\u8d77\u60ac\u6b8a\u7684 tape \u95f4\u7684\u6570\u91cf\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u80fd\u4e0d\u80fd\u4e3b\u52a8\u5229\u7528\u8fd9\u4e2a\u6027\u8d28\u3002

\u5b9e\u5728\u60f3\u4e0d\u5230\u600e\u4e48\u8fc7\u5ea6\u4e86\uff0c\u800c\u4e14\u6025\u6025\u6025\uff0c\u6240\u4ee5\u76f4\u63a5\u4e0a\u7ed3\u8bba\u3002

\u6211\u4eec\u6309\u7167 Fibonacci \u6570\u5217\u7684\u9879\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\)\uff0c\u6b64\u65f6\u6bcf\u4e00\u4e2a pass \u53ea\u9700\u8981\u4e00\u4e2a\u6709\u4e00\u4e2a\u7a7a\u95f2\u7684 tape \u5373\u53ef\u3002

example

\\[ \\text{Fibonacci}: {1,1,2,3,5,8,13,21,...} \\]

\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u4e24\u4e2a tape\uff0c\u5206\u522b\u6709 23 \u4e2a run \u548c 13 \u4e2a run\uff0c\u5219\uff1a

\\(T_1\\) \\(T_2\\) \\(T_3\\) \u8bf4\u660e 21 13 - \u521d\u59cb\u60c5\u51b5 8 - 13 \\(T_1\\) \u7684\u524d 13 \u4e2a\u4e0e \\(T_2\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_3\\) - 8 5 \\(T_3\\) \u7684\u524d 8 \u4e2a\u4e0e \\(T_1\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_2\\) 5 3 - \u7565 2 - 3 \u7565 - 2 1 \u7565 1 1 - \u7565 0 - 1 \u7565

\u4f7f\u7528 Fibonacci \u6211\u4eec\u603b\u53ef\u4ee5\u6eda\u52a8\u7740\u5c06 \\(\\#run\\) \u7684\u89c4\u6a21\u7f29\u5c0f\u3002

k-way merge with k-order Fibonacci Sequence

\u5bf9\u4e8e \\(k\\)-way merge\uff0c\u6211\u4eec\u53ea\u9700\u8981\u6784\u9020 k \u9636 Fibonacci \u6570\u5217\uff0c\u7136\u540e\u6309\u7167\u8fd9\u4e2a\u6570\u5217\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u5373\u53ef\u3002

k-order Fibonacci Sequence

\u7ed9\u51fa k \u9636 Fibonacci \u6570\u5217\uff08\u4e0e PPT \u7565\u6709\u4e0d\u540c\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e0b\u6807\u4ece\u8c01\u5f00\u59cb\uff0c\u65e0\u4f24\u5927\u96c5\uff09\uff1a

\\[ \\left\\{ \\begin{aligned} F^k_1 &= 1 \\\\ F^k_2 &= 1 \\\\ & \\vdots\\\\ F^k_n &= F^k_{n-1} + F^k_{n-2} + \\cdots + F^k_{n-k} \\quad (n > k) \\end{aligned} \\right. \\]

\u8fd9\u4e2a\u7ed3\u8bba\u770b\u8d77\u6765\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u600e\u4e48\u64cd\u4f5c\u7684\u5462\uff1fPPT \u538b\u6839\u6ca1\u8bb2\uff0c\u56e0\u6b64\uff0c\u6211\u5728\u8be2\u95ee ch \u8001\u5e08\u4ee5\u540e\uff0c\u5199\u4e0b\u4e86\u8fd9\u4e2a\u90e8\u5206\uff0c\u65e8\u5728\u8865\u5145 \\(k\\)-way merge \u4f7f\u7528 k \u9636 Fibonacci \u4f18\u5316\u7684\u65b9\u6cd5\u3002

\u9996\u5148\uff0c\u505a\u4e00\u4e9b\u5f3a\u8c03\uff1a

  1. \u8be5\u65b9\u6cd5\u9648\u8ff0\u8fc7\u7a0b\u4e2d\uff0ck \u8def\u59cb\u7ec8\u76f4\u63a5\u5408\u5e76\u6210\u4e00\u8def\uff08\u5343\u4e07\u4e0d\u8981\u7528\u201citerative\u201d\u7684\u601d\u8def\u6765\u8003\u8651\uff0c\u5c31\u7b97 iterative\uff0c\u8fed\u4ee3\u5b8c\u4e86\u4e5f\u8fd8\u662f k \u8def\u5f52\u4e3a 1 \u8def\uff09\uff1b
  2. \u6211\u4eec\u7684\u76ee\u7684\u662f\u4f18\u5316\u6bcf\u4e00\u4e2a pass \u4e2d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u4e0d\u4e00\u6837\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898\uff08\u4f8b\u5982\u5c34\u5c2c\u7684 \\(n\\) \u548c \\(n+1\\) \u5f52\uff0c\u4e0b\u4e00\u4e2a pass \u5c31\u5f97 \\(1\\) \u548c \\(n\\) \u5f52\u4e86\uff09\uff1b

\u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a pass\uff0c\u6709 \\(k\\) \u4e2a tape\uff0c\u6211\u4eec\u8bb0\u6bcf\u4e00\u4e2a tape \u7684 \\(\\#run\\) \u4e3a \\(r_i\\)\uff0c\u5219\u6709\uff1a

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6bcf\u4e2a pass \u6700\u5927\u548c\u6700\u5c0f\u7684 \\(\\#run\\) \u5206\u522b\u6709 k \u9636 Fibonacci \u4e2d\u76f8\u90bb\u7684\u4e24\u9879\u3002

\u8fd9\u91cc\u5206\u5f00\u7528 i \u548c j \u662f\u60f3\u8868\u8fbe\u8fd9\u4e2a\u5339\u914d\u5173\u7cfb\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6700\u5927\u503c\u6700\u5c0f\u503c\u7531 Fibonacci \u76f8\u90bb\u9879\u6240\u786e\u5b9a\u3002

\u90a3\u4e48\u5939\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u4e2d\u95f4\u7684\u5176\u4ed6 \\(\\#run\\) \u8981\u5982\u4f55\u786e\u5b9a\u5462\uff1f\u9996\u5148\u6211\u4eec\u8fdb\u884c\u4e00\u6bb5\u63a8\u5bfc\uff1a

\u5047\u8bbe \\(\\{r_i\\}\\) \u7ecf\u8fc7\u6392\u5e8f\uff0c\u5e76\u4e14\u521a\u597d\u80fd\u51d1\u4e0a\u6211\u4eec\u6240\u9700\u8981\u7684\u6570\u91cf\uff0c\u6709\uff1a

\\[ r_k > r_{k-1} > ... > r_{2} > r_{1} \\text{where } r_k = F^k_j \\text{ and } r_1 = F^k_{j-1} \\]

\u5728\u8fd9\u4e00\u4e2a pass \u4e2d\uff0c\u6211\u4eec\u5c06\u6240\u6709 tape \u7684\u524d \\(r1\\) \u4e2a run \u62ff\u51fa\u6765 merge\uff0c\u8fd9\u6837\uff0c\u9664\u4e86 \\(r_1\\) \u8fd9\u4e2a tape\uff0c\u5176\u4ed6 tape \u7684 \\(\\#run\\) \u90fd\u53d8\u4e3a \\(r_i-r_1\\)\u3002\u6b64\u65f6\u6709\u4e0d\u7b49\u5173\u7cfb\uff1a

\\[ r_1 > r_k - r_1 > r_{k-1} - r_1 > ... > r_{2} - r_1 \\]

\u8fd9\u91cc\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f \\(r_1 > r_k - r_1\\)\uff1a

proof of the relation \\[ \\begin{aligned} &\\begin{aligned} \\because r_1 &= F^k_{j-1} \\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} + F^k_{j-k-1} \\end{aligned} & (1)\\\\ &\\begin{aligned} \\text{and } r_k &= F^k_{j} \\\\ &= F^k_{j-1} + F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (2)\\\\ &\\begin{aligned} \\therefore r_k - r_1 &= F^k_{j} - F^k_{j-1} \\quad \\text{ i.e. } (2) - (1)\\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (3)\\\\ &\\begin{aligned} \\therefore r_1 - (r_k - r_1) &= F^k_{j-k-1} > 0 \\quad \\text{ i.e. } (1) - (3) \\\\ \\end{aligned} \\\\ &\\begin{aligned} \\therefore r_1 > r_k - r_1 \\end{aligned} \\\\ \\end{aligned} \\]

\u5982\u679c\u6211\u4eec\u5c06\u73b0\u5728\u8fd9\u4e2a\u6392\u5e8f\u540e\u7684\u6570\u5217\u8bb0\u4e3a \\(\\{r_i'\\}\\)\uff0c\u5219\u6709\uff1a

\\[ \\left\\{ \\begin{aligned} r_1' &= r_2 - r_1 \\\\ r_2' &= r_3 - r_1 \\\\ \\vdots \\\\ r_{k-1}' &= r_k - r_1 \\\\ r_k' &= r_1 \\end{aligned} \\right. \\]

\u6b64\u65f6\u6839\u636e\u6211\u4eec\u5173\u4e8e\u6700\u5927\u6700\u5c0f\u503c\u7684\u9648\u8ff0\uff0c\u53c8\u6709\uff1a

\\[ \\left\\{ \\begin{aligned} r_1' &= F^k_{j-2} \\\\ r_k' &= F^k_{j-1} \\end{aligned} \\right. \\]

\u4e8e\u662f\u53ef\u4ee5\u63a8\u5f97\uff1a\\(r_2 = r_1 + F^k_{j-2} = F^k_{j-1} + F^k_{j-2}\\)\u3002\u5173\u4e8e \\(r_3, r_4\\)\uff0c\u4e5f\u662f\u4e00\u6837\u7684\u529e\u6cd5\uff0c\u5c06 \\(r_2\\) \u7684\u7ed3\u8bba\u8fc1\u79fb\u5230 \\(r_2'\\)\uff0c\u518d\u56de\u8fc7\u5934\u5f97\u5230 \\(r_3 = r_1 + r_2'= F^k_{j-1} + F^k_{j-2} + F^k_{j-3}\\)\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff0c\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7ed3\u8bba\uff1a

\\[ \\left\\{ \\begin{aligned} r_1 &= F^k_{j-1} \\\\ r_2 &= F^k_{j-1} + F^k_{j-2} \\\\ r_3 &= F^k_{j-1} + F^k_{j-2} + F^k_{j-3} \\\\ \\vdots \\\\ r_k &= F^k_{j-1} + F^k_{j-2} + ... + F^k_{j-k} = F^k_{j} \\end{aligned} \\right. \\]

\u601d\u8003\u9898

\u53ef\u4ee5\u611f\u53d7\u601d\u8003\u4e00\u4e0b\u8fd9\u4e2a\u7279\u6027\uff08\u8003\u8651 2-way \u5373\u53ef\uff09\u4e0e\u9ec4\u91d1\u6bd4\u4f8b\u7684\u5173\u7cfb\uff01

hint: \u5982\u4f55\u7406\u89e3 \\(\\frac{a_n}{a_{n-1}} \\approx \\frac{a_{n-1}}{a_n - a_{n-1}}\\) \u4e0e\u8fd9\u4e2a\u6027\u8d28\u7684\u5173\u7cfb\uff1f

\u5f53\u7136\uff0c\u521a\u597d\u80fd\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\u81ea\u7136\u662f\u5c11\u6570\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u591a\u4f59\u7684\u90e8\u5206\u5747\u5300\u7684\u5206\u5230\u8f83\u591a\u82e5\u5e72 tape \u4e0a\uff0c\u4ee5\u76f8\u5bf9\u7684\u5229\u7528 Fibonacci \u6570\u5217\u7684\u6027\u8d28\uff08\u8054\u7cfb\u601d\u8003\u9898\u7406\u89e3\uff09\u3002

\u6ce8\u610f

\u6216\u8bb8\u4f60\u5df2\u7ecf\u5f00\u59cb\u4ea7\u751f\u7591\u95ee\u4e86\uff0c\u5982\u679c\u8fd9\u6837\u6765\u505a\uff0c\u524d\u9762\u5bf9 \\(\\#pass\\) \u7684\u5206\u6790\u662f\u4e0d\u662f\u4e0d\u6210\u7acb\u4e86\u5462\uff1f

\u6211\u60f3\u5e94\u8be5\u786e\u5b9e\u4e0d\u518d\u5b8c\u5168\u4e00\u6837\u4e86\uff0c\u4f46\u662f\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u4e4b\u540e\u5229\u7528\u90a3\u4e2a\u7ed3\u8bba\u505a\u5b9a\u6027\u5206\u6790\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\uff0c\u91c7\u53d6 Fibonacci \u7b56\u7565\u6765\u4f18\u5316\u4f1a\u5bfc\u81f4 \\(\\#pass\\) \u589e\u591a\u5373\u53ef\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#k-\u8def\u5185\u6392\u5e8f\u4f18\u5316","title":"k \u8def\u5185\u6392\u5e8f\u4f18\u5316","text":"

\u968f\u7740 \\(k\\) \u7684\u589e\u52a0\uff0c\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u4e24\u8def\u5f52\u5e76\u90a3\u6837\u76f4\u63a5\u8f93\u51fa\u8f83\u5c0f\u7684\u90a3\u4e2a\uff0c\u800c\u662f\u9700\u8981\u7ef4\u62a4\u6570\u636e\u7ed3\u6784\u6765\u603b\u662f\u8f93\u51fa k \u4e2a\u4e2d\u6700\u5c0f\u7684\u90a3\u4e2a\u2014\u2014\u6211\u4eec\u7528\u5806\u6765\u7ef4\u62a4\u6bcf\u4e00\u4e2a run \u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\u7684\u961f\u9996\u5143\u7d20\uff08\u540c\u65f6\u4e5f\u662f\u6700\u5c0f\u5143\u7d20\uff09\uff0c\u6bcf\u5f53\u5806\u9876\u5143\u7d20\u88ab\u8f93\u51fa\uff0c\u5c31\u9700\u8981\u4ece\u5bf9\u5e94\u7684 run \u4e2d\u8bfb\u5165\u4e0b\u4e00\u4e2a\u5143\u7d20\u3002

\u6ce8\u610f

\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u5806\u662f\u989d\u5916\u7ef4\u62a4\u7684\uff0c\u800c\u6bcf\u6b21\u63a8\u5165\u5806\u4e2d\u7684\u5143\u7d20\u90fd\u662f\u4ece\u5bf9\u5e94\u7684 run \u7684 buffer \u4e2d\u62ff\u7684\uff0c\u800c\u4e0d\u662f\u6bcf\u6b21\u90fd\u4ece\u786c\u76d8\u4e2d\u62ff\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u970d\u592b\u66fc\u6811\u4f18\u5316","title":"\u970d\u592b\u66fc\u6811\u4f18\u5316","text":"

\u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u76f4\u63a5 \\(k\\) \u8def\u5408\u5e76\uff0c\u800c\u662f\u91c7\u7528\u4e24\u4e24\u5f52\u5e76\u7684\u65b9\u6cd5\uff0c\u4e5f\u5c31\u662f wiki \u4e2d\u63d0\u5230\u7684\u8fed\u4ee3\u5f52\u5e76\uff08\u6ce8\u610f\uff0c\u8be5\u6761\u76ee\u4e2d\u63d0\u5230\u7684\u5f52\u5e76\u5e76\u6ca1\u6709\u8bf4\u660e\u662f\u5916\u6392\u5e8f\u80cc\u666f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fc1\u79fb\uff09\u3002

\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u82e5\u5e72\u4e2a run\uff0c\u5e76\u4e14\u6211\u4eec\u5c06\u8981\u8fdb\u884c\u4e24\u4e24\u5f52\u5e76\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u6bcf\u4e00\u4e2a run \u7684\u5927\u5c0f\uff0c\u6839\u636e\u970d\u592b\u66fc\u6811\u7684\u89c4\u5f8b\u6765\u8fdb\u884c\u5f52\u5e76\uff0c\u5373\u603b\u662f\u9009\u6700\u5c0f\u7684\u4e24\u4e2a\u8fdb\u884c\u5f52\u5e76\u3002

"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5e76\u884c\u4f18\u5316","title":"\u5e76\u884c\u4f18\u5316","text":"

\u8fd9\u91cc\u5e76\u884c\u7684\u76ee\u6807\u4e3b\u8981\u662f\u4f7f\u7b97\u6cd5\u652f\u6301\u6570\u636e\u7684\u8bfb-\u7528-\u5199\u7684\u6d41\u6c34\u7ebf\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u8981\u60f3\u529e\u6cd5\u8ba9\u8bfb\u4e0d\u963b\u585e\u7528\uff0c\u7528\u4e0d\u963b\u585e\u5199\u3002

\u5148\u524d\u6211\u4eec\u9700\u8981\u5148\u8bfb\u5165\u6570\u636e\uff0c\u7136\u540e\u8fdb\u884c\u6392\u5e8f\uff0c\u6392\u5e8f\u5b8c\u4e86\u518d\u5199\u5165\u78c1\u76d8\uff0c\u817e\u51fa\u5185\u5b58\u7a7a\u95f4\u4ee5\u4f9b\u4e0b\u4e00\u6b21\u8bfb\u5165\u3002\u90a3\u4e3a\u4ec0\u4e48\u4f1a\u963b\u585e\u5462\uff1f\u56e0\u4e3a\u6211\u4eec\u6ca1\u6cd5\u8bfb\u4e00\u4e2a\u6b63\u5728\u5199\u7684\u6570\u636e\u5757\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e0d\u540c\u7684\u6570\u636e\u5757\u8bfb\u548c\u5199\u5c31\u884c\u4e86\u3002\u5bf9\u4e8e \\(k\\)-way \u4e2d\u7684\u6bcf\u4e00\u8def\uff0c\u6211\u4eec\u90fd\u63d0\u4f9b\u4e24\u4e2a input buffer\uff0c\u4e00\u4e2a\u7528\u4e8e\u5199\uff0c\u4e00\u4e2a\u7528\u4e8e\u6392\u5e8f\u3002\u5f53\u6392\u5e8f buffer \u7a7a\u4e86\u7684\u65f6\u5019\uff0c\u5c31\u548c\u8bfb\u6ee1\u4e86\u7684 input buffer \u4ea4\u6362\uff0c\u65e0\u7f1d\u8854\u63a5\u7ee7\u7eed\u8f93\u51fa\u3002\u4e8e\u6b64\u540c\u65f6\uff0c\u521a\u521a\u88ab\u4ea4\u6362\u8fc7\u53bb\u7684 buffer \u5219\u53ef\u7528\u4e8e\u7ee7\u7eed\u8bfb\u5165\u3002

\u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u6267\u884c direct \\(k\\)-way merge\uff0c\u5c31\u9700\u8981 \\(2k\\) \u4e2a input buffer\uff08\u8fd9\u91cc\u5f3a\u8c03 direct \u662f\u56e0\u4e3a\uff0c\u5982\u679c\u4f7f\u7528 iterative \u7684\u8bdd\uff0cinput buffer \u53ea\u9700\u8981 4 \u4e2a\uff09\u3002

\u800c\u5bf9\u4e8e\u8f93\u51fa\uff0c\u6211\u4eec\u53ea\u9700\u8981 2 \u4e2a output buffer \u4ea4\u66ff\u4f7f\u7528\u5373\u53ef\uff0c\u4e00\u4e2a\u7528\u6765\u63a5\u6536\u6765\u81ea\u6392\u5e8f\u7b97\u6cd5\u7684\u8f93\u51fa\uff0c\u4e00\u4e2a\u7528\u6765\u5c06\u6570\u636e\u5199\u5165\u78c1\u76d8\u3002

\u4f46\u662f\uff0c\u5e76\u884c\u4f18\u5316\u7684\u7f3a\u70b9\u5c31\u662f\u5360\u636e\u4e86\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u2014\u2014\u539f\u5148 \\(k + 1\\) \u4e2a buffer \u5e73\u5206\u7684\u7528\u4e8e\u5904\u7406\u6570\u636e\u7684\u5185\u5b58\uff0c\u73b0\u5728\u9700\u8981\u88ab \\(2k + 2\\) \u4e2a buffer \u5e73\u5206\uff0c\u6240\u4ee5\u6bcf\u4e00\u4e2a buffer \u7684\u5927\u5c0f\u4f1a\u53d8\u5c0f\u3002\u8fdb\u800c\u5bfc\u81f4\u6bcf\u4e00\u6b21\u4ece disk \u4e2d\u8bfb\u53d6\u7684\u6570\u636e\u53d8\u5c11\uff0c\u6240\u4ee5\u8981\u8bfb\u5b8c\u6570\u636e\u6240\u9700\u8981\u7684\u8bfb\u53d6\u6b21\u6570\u5c31\u589e\u52a0\uff0c\u5373 seek \u6b21\u6570\u589e\u52a0\u3002

"},{"location":"cour_note/D2CX_ComputerOrganization/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7ec4\u6210 | Computer Organization","text":"

\u7ea6 57 \u4e2a\u5b57

\u7531\u4e8e\u7b14\u8bb0\u592a\u6d6a\u8d39\u65f6\u95f4\u4e86\uff0c\u6211\u5b66\u4e60\u8ba1\u7ec4\u4f7f\u7528\u7684\u662f xxjj \u7684\u7b14\u8bb0\uff1a

https://xuan-insr.github.io/computer_organization/1_prelude/

\u987a\u4fbf\u61d2\u5f97\u81ea\u5df1\u91cd\u65b0\u8c03\u6574\uff0c\u76f4\u63a5\u5728\u4ed6\u7684\u7b14\u8bb0\u4e0a\u4fee\u6539\u7136\u540e PR \u4e86\u3002

"},{"location":"cour_note/D2HJ_StanfordWriting/","title":"\ud83d\udd2e \u79d1\u5b66\u6587\u7ae0\u5199\u4f5c | Writing in the Sciences","text":"

\u7ea6 1331 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u5410\u69fd

\u4e0d\u662f\u6211\u8bf4\uff0c\u6211\u611f\u89c9\u8fd9\u8bfe\u7684\u7ec4\u7ec7\u6ca1\u6709\u5f88\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6216\u8005\u8bf4\u5b9e\u9645\u4e0a\u5b83\u5e76\u4e0d\u5c5e\u4e8e\u80fd\u591f\u7528\u6846\u67b6\u6027\u7684\u5185\u5bb9\u6982\u62ec\u7684\uff0c\u800c\u662f\u4e0d\u65ad\u7684\u628a\u7ec6\u8282\u5185\u5bb9\u4e22\u51fa\u6765\u5e76\u5728\u6848\u4f8b\u4e2d\u5206\u6790\uff0c\u6240\u4ee5\u611f\u89c9\u7b14\u8bb0\u5f88\u96be\u505a\u554a\uff0c\u7136\u540e\u611f\u89c9\u7b2c\u4e00\u5355\u5143\u7684\u5185\u5bb9\u662f\u5bf9\u6574\u4e2a\u8bfe\u7a0b\u7684\u5927\u81f4\u6897\u6982\uff0c\u6240\u4ee5\u8fd9\u91cc\u653e\u7684\u4e3b\u8981\u662f\u7b2c\u4e00\u7ae0\u7684\u5185\u5bb9\uff0c\u540e\u9762\u5982\u679c\u6709\u9047\u5230\u6211\u89c9\u5f97\u6709\u5fc5\u8981\u4e14\u65b9\u4fbf\u8bb0\u4e0b\u6765\u7684\u4e1c\u897f\u4f1a\u5fd8\u91cc\u9762\u4e22\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u611f\u89c9\u8fd9\u4efd\u7b14\u8bb0\u7684\u8d28\u91cf\u4e0d\u662f\u5f88\u9ad8\uff0c\u6548\u679c\u4e5f\u4e0d\u662f\u5f88\u597d\u2014\u2014\u5bf9\u4e8e\u66ff\u4ee3\u8fd9\u95e8\u8bfe\u6765\u8bf4\u3002

\u6897\u6982

\u79d1\u5b66\u6587\u732e\u662f\u4e3a\u4e86\u89c2\u70b9\u4ea4\u6d41\u5b58\u5728\u7684\uff0c\u800c\u201c\u6587\u7ae0\u201d\u53ea\u662f\u89c2\u70b9\u4ea4\u6d41\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u627f\u8f7d\u5f62\u5f0f\u3002\u6211\u4eec\u8981\u7740\u91cd\u4e8e\u8ba9\u8bfb\u8005\u80fd\u4ee5\u66f4\u5c0f\u7684\u8d1f\u62c5\u7406\u89e3\u6587\u7ae0\u7684\u5185\u6db5\uff0c\u5373\u7528\u7b80\u660e\u627c\u8981\u7684\u3001\u8109\u7edc\u6e05\u6670\u7684\u6587\u5b57\uff0c\u8868\u8fbe\uff08\u6709\u53ef\u80fd\u6bd4\u8f83\u590d\u6742\u7684\uff09\u89c2\u70b9\u548c\u903b\u8f91\u3002

\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u201c\u4e3a\u8bfb\u8005\u670d\u52a1\u201d\uff0c\u8003\u8651\u5230\u6587\u7ae0\u7684\u9605\u8bfb\u8282\u594f\uff0c\u5c3d\u53ef\u80fd\u8ba9\u6587\u7ae0\u80fd\u591f\u88ab\u884c\u4e91\u6d41\u6c34\u5730\u9605\u8bfb\u4e0b\u6765\uff0c\u800c\u975e\u78d5\u78d5\u7eca\u7eca\u6216\u53cd\u53cd\u590d\u590d\u3002

\u4e00\u7bc7\u79d1\u5b66\u6587\u7ae0\u662f\u4e3a\u4e86\u4ea4\u6d41\u89c2\u70b9\u800c\u5b58\u5728\u7684\uff0c\u6240\u4ee5\u5b83\u5e94\u5f53\u80fd\u591f\u8ba9\u4eba \u9ad8\u6548 \u5730\u83b7\u53d6\u6838\u5fc3\u5185\u5bb9\uff0c\u6e05\u6670 \u5730\u641e\u6e05\u695a\u6587\u7ae0\u8bf4\u4e86\u4ec0\u4e48\uff0c\u5c24\u5176\u5728\u64b0\u5199\u6587\u7ae0\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u8981\u5c24\u5176\u6ce8\u91cd\u8fd9\u4e9b\uff1b\u5728\u6b64\u57fa\u7840\u4e0a \u4f18\u96c5 \u7684\u6587\u98ce\u80fd\u8ba9\u6587\u7ae0\u66f4\u4e0a\u4e00\u5c42\u697c\uff0c\u800c\u8fd9\u4e9b\u901a\u5e38\u662f\u5728\u4fee\u6539\u4e0e\u6da6\u8272\u4e2d\u4f53\u73b0\u51fa\u6765\u7684\u3002

\u800c\u4e3a\u4e86\u5b9e\u73b0\u300c\u9ad8\u6548\u300d\u548c\u300c\u6e05\u6670\u300d\uff0c\u4f60\u9996\u5148\u5fc5\u987b\u6e05\u695a\u81ea\u5df1\u5c06\u8981\u8868\u8fbe\u4ec0\u4e48\uff08Have something to say.\uff09\uff0c\u5e76\u4e14\u68b3\u7406\u6e05\u8fd9\u4e9b\u5185\u5bb9\u7684\u8109\u7edc\u548c\u903b\u8f91\u5173\u7cfb\uff08Logical thinking.\uff09\uff0c\u6b64\u5916\uff0c\u4e3a\u4e86\u8f85\u52a9\u6784\u5efa\u8d77\u4e00\u7bc7\u6587\u7ae0\uff0c\u4f60\u8fd8\u9700\u8981\u4e00\u4e9b\u5199\u4f5c\u5957\u8def\uff08A few simple, learnable rules of style.\uff09\u3002

\u8fd9\u91cc\u6709\u4e00\u4e9b\u5176\u5b83\u4e60\u60ef\u80fd\u591f\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u5199\u4f5c\uff1a

  1. \u65e5\u5e38\u591a\u8bfb\u591a\u5199\u591a\u6a21\u4eff\uff0c\u4e0d\u4e00\u5b9a\u8981\u548c\u79d1\u5b66\u6587\u7ae0\u6709\u5173\uff1b
  2. \u6539\u6b63\u4e00\u4e9b\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u517b\u6210\u7684\u574f\u7684\u201c\u5b66\u672f\u201d\u5199\u4f5c\u4e60\u60ef\uff0c\u8bb2\u8005\u79f0\u4e4b\u4e3a deprogramming step\uff1b
  3. \u52a8\u7b14\u4e4b\u524d\u5148\u5c1d\u8bd5\u7740\u7528\u8bed\u8a00\u6765\u8bb2\u8ff0\u6587\u7ae0\u5185\u5bb9\uff0c\u6bd4\u5982\u548c\u4f60\u7684\u670b\u53cb\u8c08\u8c08\uff1b
  4. \u5c1d\u8bd5\u8ba9\u6587\u7ae0\u53d8\u5f97\u6709\u5438\u5f15\u529b\uff1b
  5. \u8ba4\u8bc6\u5230\u5199\u4f5c\u4e0d\u9700\u8981\u7075\u611f\uff0c\u4e0d\u8981\u628a\u7075\u611f\u5f53\u4f5c\u501f\u53e3\uff1b
  6. \u8ba4\u8bc6\u5230\u5199\u4f5c\u672c\u8eab\u662f\u56f0\u96be\u7684\uff0c\u800c\u5927\u5bb6\u90fd\u4e00\u6837\uff1b
  7. \u575a\u6301\u53cd\u590d\u4fee\u6539\uff0c\u751a\u81f3\u662f\u5728\u5199\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u4f18\u5148\u628a\u6587\u7ae0\u6210\u54c1\u5199\u51fa\u6765\uff0c\u518d\u4e0d\u538c\u5176\u70e6\u5730\u4fee\u7f2e\uff1b
  8. \u6740\u4f10\u679c\u65ad\uff0c\u4e0d\u8981\u6267\u7740\u4e8e\u5df2\u7ecf\u5199\u51fa\u6765\u7684\u4f46\u662f\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u7684\u6587\u5b57\uff1b
  9. \u627e\u4e00\u4e2a\u597d\u7f16\u8f91\uff0cta \u4eec\u53ef\u80fd\u4f1a\u7ed9\u4f60\u597d\u7684\u610f\u89c1\u548c\u5efa\u8bae\uff1b
  10. \u53bb\u5192\u9669\uff0c\u52c7\u6562\u5730\u53bb\u7a81\u7834\u684e\u688f\uff1b

\u5177\u4f53\u5230\u5199\u4f5c\u65f6\uff0c\u6211\u4eec\u8981\u5207\u5fcc\u53e5\u5b50\u6666\u6da9\u96be\u61c2\uff0c\u5728\u5199\u4f5c\u8fc7\u7a0b\u4e2d\u6211\u4eec\u53ef\u80fd\u65e0\u610f\u8bc6\u5730\u7528\u6666\u6da9\u590d\u6742\u7684\u8bed\u53e5\u63a9\u76d6\u6211\u4eec\u60f3\u8981\u8868\u8fbe\u7684\u5185\u5bb9\uff0c\u5176\u4e2d\u53ef\u80fd\u7684\u539f\u56e0\u6709\uff1a

\u5c06\u8bb8\u591a\u52a8\u8bcd\u8f6c\u5316\u4e3a\u540d\u8bcd\u4f7f\u7528

Verbs drive sentences along and nouns slow them down.

bad eg

Adoptive cell transfer (ACT) immunotherapy is based on the ex vivo selection of tumor-reactive lymphocytes, and their activation and numerical expression before reinfusion to the autologous tumor-bearing host.

\u4f7f\u7528\u6a21\u7cca\u5bbd\u6cdb\u7684\u8bcd

\u6a21\u7cca\u5bbd\u6cdb\u7684\u3001\u4e0d\u591f\u5177\u4f53\u7684\u3001\u4e0d\u80fd\u8ba9\u8bfb\u8005\u8111\u4e2d\u4ea7\u751f\u76f4\u63a5\u5370\u8c61\u7684\u8bcd\u4f1a\u8ba9\u8bfb\u8005\u611f\u5230\u56f0\u60d1\u3002

\u4f7f\u7528\u4e0d\u5fc5\u8981\u7684\u7f29\u5199\u6216\u672f\u8bed

\u9664\u975e\u662f\u4e00\u4e9b\u5e7f\u4e3a\u4eba\u77e5\u7684\u7f29\u5199\uff0c\u5426\u5219\u5f88\u53ef\u80fd\u4e3a\u8bfb\u8005\u5e26\u6765\u56f0\u6270\u3002\u5373\u4f7f\u4f60\u5728\u524d\u6587\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5b83\u4eec\u5f88\u53ef\u80fd\u9700\u8981\u56de\u8fc7\u5934\u6765\u67e5\u9605\u624d\u80fd\u201c\u8bb0\u8d77\u201d\u8fd9\u4e2a\u7f29\u5199\u7684\u542b\u4e49\u3002

\u4f7f\u7528\u88ab\u52a8\u8bed\u6001

\u8fdd\u53cd\u4e86\u60c5\u7eea\u4e0a\u7684 \u4e3b-\u8c13-\u5bbe \u7684\u987a\u5e8f\u3002\u5f53\u7136\u8981\u6309\u7167\u5b9e\u9645\u60c5\u51b5\u6765\u8bf4\uff0c\u5173\u952e\u662f\u8981\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u8bed\u6cd5\u53d8\u5316\u3002

\u4e3b\u8bed\u548c\u52a8\u8bcd\u592a\u9065\u8fdc

\u8bfb\u8005\u603b\u662f\u5728\u671f\u5f85\u627e\u5230\u4e00\u53e5\u8bdd\u91cc\u7684\u201c\u52a8\u8bcd\u201d\uff0c\u800c\u5982\u679c\u8fd9\u4e2a\u201c\u52a8\u8bcd\u201d\u592a\u96be\u627e\uff0c\u5c06\u4f1a\u5f71\u54cd\u6574\u53e5\u8bdd\u7684\u9605\u8bfb\u6548\u7387\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u4f60\u7684\u5185\u5bb9\u662f\u5426\u590d\u6742\uff0c\u627f\u8f7d\u8fd9\u4e9b\u5185\u5bb9\u7684\u8bed\u53e5\u90fd\u4e0d\u5e94\u5f53\u662f\u590d\u6742\u7684\u3002

\u603b\u7684\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e9b\u539f\u5219\uff1a

  1. \u5220\u51cf\u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u5bf9\u6b64\u4fdd\u6301 \u654f\u611f \u548c \u65e0\u60c5\uff0c\u4e0d\u8981\u6297\u62d2\u91cd\u6784\u5b57\u53e5\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u5b9e\u9645\u542b\u4e49\u7684\u8bcd\uff0c\u4e00\u4e9b\u53ea\u6709\u8bed\u6c14\u4f5c\u7528\u7684\u8bcd\u7b49\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u610f\u4e49\u7684\u7f29\u5199\u548c\u672f\u8bed\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u524d\u540e\u8bed\u4e49\u91cd\u590d\u7684\u8bcd\uff1b
    • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1aadv. \u4eec\uff1b
  2. \u66f4\u591a\u5730\u4f7f\u7528\u4e3b\u52a8\u8bed\u6001\uff08\u4e3b\u8c13\u5bbe\uff09\u800c\u975e\u88ab\u52a8\u8bed\u6001\uff1b
  3. \u56f4\u7ed5 \u52a8\u8bcd \u5199\u4f5c\uff1a\u4f7f\u7528\u5f3a\u52a8\u8bcd\uff0c\u907f\u514d\u5c06\u52a8\u8bcd\u53d8\u6210\u540d\u8bcd\uff0c\u5e76\u5c06\u52a8\u8bcd\u653e\u5728\u9192\u76ee\u7684\u4f4d\u7f6e\uff1b
  4. \u9ad8\u8003\u82f1\u8bed\u4f5c\u6587\u600e\u4e48\u5199\uff0c\u79d1\u5b66\u6587\u732e\u5c31\u4e0d\u8981\u600e\u4e48\u5199\uff1b

\u51cf\u5c11\u6587\u7ae0\u4e2d\u7684\u6df7\u4e71\u6709\u5982\u4e0b\u65b9\u6cd5\uff1a

\u8f6c\u5426\u5b9a\u4e3a\u80af\u5b9a

from to not honest dishonest not harmful safe not important unimportant do not have lack do not remember forget do not pay attention to ignore do not succeed fail

\u5220\u53bb\u8fc7\u5269\u7684 \"there are\" / \"there is\"

\u5220\u53bb\u4e0d\u5fc5\u8981\u7684\u4ecb\u8bcd

"},{"location":"cour_note/D2QD_DigitalDesign/","title":"\ud83d\udd2e \u6570\u5b57\u903b\u8f91\u8bbe\u8ba1 | Digital Design","text":"

\u7ea6 385 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

\u6ce8\u610f\uff01

\u672c\u7ad9\u90e8\u7f72\u5728 GitHub pages \u4e0a\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u5361\u987f\u60c5\u51b5\uff0c\u4f7f\u7528\u4ee3\u7406\u53ef\u4ee5\u6781\u5927\u4f18\u5316\u9605\u8bfb\u4f53\u9a8c\u3002

\u8bfe\u7a0b\u4fe1\u606f

\u5f88\u663e\u7136\uff0c\u6211\u70c2\u5c3e\u4e86\uff0c\u7b2c\u4e94\u7ae0\u5185\u5bb9\u5f88\u7b80\u964b\uff0c\u7b2c\u4e03\u7ae0\u57fa\u672c\u6ca1\u5199\uff0c\u5b9e\u5728\u662f\u8003\u524d\u6765\u4e0d\u53ca\u5199\u5b8c\u4e86\u3002\u4f46\u662f\u6211\u53ef\u4ee5\u4fdd\u8bc1\u9664\u6b64\u4e4b\u5916\u7684\u5185\u5bb9\u6211\u90fd\u662f\u4ed4\u7ec6\u63a8\u6572\u540e\u624d\u5199\u51fa\u6765\u7684orz\u3002

\u6b64\u5916\uff0c\u5bf9\u4e8e\u6211\u5df2\u7ecf\u5199\u4e86\u7684\u5185\u5bb9\u6709\u7591\u4e49\uff0c\u6216\u662f\u5e0c\u671b\u80fd\u8865\u5145\u6211\u6ca1\u5199\u7684\u5185\u5bb9\uff0c\u6b22\u8fce\u63d0\u4ea4 PR\uff01

List

\u8865\u5929\u65f6\u5019\u7684\u4e00\u70b9\u60f3\u6cd5\uff0c\u56e0\u4e3a\u8bfe\u672c\u6bcf\u4e00\u7ae0\u90fd\u6709\u4e00\u4e2a summary\uff0c\u6240\u4ee5\u5982\u679c\u8981\u770b\u4e66\u7684\u8bdd\u6216\u8bb8\u53ef\u4ee5\u5148\u770b\u90a3\u4e2a summary \u518d\u770b\u5177\u4f53\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/","title":"Chap 1 Digital Systems and Information","text":"

\u7ea6 2053 \u4e2a\u5b57 9 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4fe1\u606f\u8868\u8fbe--information-representation","title":"\u4fe1\u606f\u8868\u8fbe | Information Representation","text":"

\u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u4fe1\u606f\u5f80\u5f80\u662f \u8fde\u7eed(continuous) \u7684\uff0c\u4f46\u5728\u4eba\u9020\u7269\u7684\u4e16\u754c\u4e2d\uff0c\u5927\u90e8\u5206\u4fe1\u606f\u90fd\u662f \u79bb\u6563(discrete) \u7684\u3002

\u5728\u7535\u5b50\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u4fe1\u53f7\u5206\u4e3a \u6a21\u62df\u4fe1\u53f7(analog signal) \u548c \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e24\u79cd\u3002\u5176\u4e2d\uff0c\u5728 \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e2d\u53c8\u6709\u591a\u79cd\u8868\u793a\u65b9\u6cd5\uff0c\u5982\u4eca\u6211\u4eec\u6700\u5e38\u7528\u7684\u662f \u4e8c\u8fdb\u5236(binary)\u3002\u5bf9\u5e94\u5230\u7535\u8def\u5c42\u9762\uff0c\u6211\u4eec\u5e38\u5e38\u7528 \u9ad8\u7535\u4f4d(HIGH) \u548c \u4f4e\u7535\u4f4d(LOW) \u6765\u8868\u5f81 1 \u548c 0\u3002

\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e2d\uff0c\u9ad8\u4f4e\u7535\u4f4d\u7684\u63a5\u53d7\u8303\u56f4\u662f\u4e0d\u540c\u7684\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8f93\u5165\u7684\u5224\u5b9a\u8303\u56f4\u6bd4\u8f93\u51fa\u7684\u5224\u5b9a\u8303\u56f4\u5927\uff0c\u5373 \u5bbd\u8fdb\u4e25\u51fa\u3002\u5176\u76ee\u7684\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u63d0\u9ad8\u7535\u8def\u5728\u566a\u97f3\u7b49\u5f02\u5e38\u5f71\u54cd\u4e0b\u4e5f\u80fd\u6b63\u5e38\u8868\u73b0\u7684\u80fd\u529b\u3002

HIGH input LOW input HIGH output LOW output 0.6 ~ 1.1 -0.1 ~ 0.4 0.9 ~ 1.1 -0.1 ~ 0.1

\u6216\u8bb8\u4f60\u4e5f\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u5728\u56fe\u4e2d\uff0cHIGH \u7684\u63a5\u53d7\u8303\u56f4\u548c LOW \u7684\u63a5\u53d7\u8303\u56f4\u4e4b\u95f4\u8fd8\u5b58\u5728\u4e00\u6bb5\u533a\u57df\u3002\u843d\u5728\u8fd9\u4e00\u90e8\u5206\u7684\u7535\u5e73\u662f \u672a\u5b9a\u4e49(undefined) \u7684\uff0c\u4e5f\u88ab\u79f0\u4e3a\u662f \u6d6e\u52a8(floating) \u7684\u3002\u5982\u679c\u8f93\u51fa\u7684\u7535\u5e73\u662f\u5728\u6d6e\u52a8\u533a\u95f4\u7684\uff0c\u90a3\u4e48\u5176\u8ba4\u5b9a\u503c\u5c06\u662f\u968f\u673a\u7684\u3002

\u4e8b\u5b9e\u4e0a\uff0c\u5728\u4fe1\u606f\u7684\u5bf9\u5e94\u4e0a\uff0c\u867d\u7136\u5c06\u9ad8\u4f4e\u7535\u5e73\u540c HIGH/LOW \u8054\u7cfb\u662f\u5f88\u81ea\u7136\u7684\uff0c\u4f46\u662f\u5c06\u4ed6\u4eec\u540c true/false \u6216\u8005 1/0 \u8054\u7cfb\u5176\u5b9e\u5e76\u4e0d\u552f\u4e00\u3002\u4f46\u662f\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\uff08\u6211\u4eec\u79f0\u4e4b\u4e3a positive logic\uff09\uff0c\u6211\u4eec\u90fd\u8ba4\u4e3a HIGH ~ true ~ 1\uff0c LOW ~ false ~ 0\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c(b) \u56fe\u4e2d\u7684\u6a21\u62df\u4fe1\u53f7\u5728\u7ecf\u8fc7\u6211\u4eec\u7684\u5668\u4ef6\u540e\uff0c\u4f1a\u88ab\u8ba4\u4e3a\u662f (c) \u56fe\u6240\u793a\u7684\u4fe1\u53f7\u3002\u800c\u8fd9\u4e9b\u64cd\u4f5c\u5728\u786c\u4ef6\u5c42\u9762\uff0c\u6211\u4eec\u901a\u8fc7 \u6676\u4f53\u7ba1(transistors) \u6765\u5b9e\u73b0\u3002

\u8fd9\u4e5f\u7275\u626f\u5230\u6211\u4eec\u4e3a\u4ec0\u4e48\u6700\u7ec8\u4f7f\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u4fe1\u606f\u3002\u4e00\u65b9\u9762\u662f\u56e0\u4e3a\u4e8c\u503c\u5668\u4ef6\u6bd4\u8f83\u5e38\u89c1\uff0c\u4ea6\u5373\u8fd9\u91cc\u63d0\u5230\u7684\u6676\u4f53\u7ba1\uff1b\u53e6\u5916\u4e00\u65b9\u9762\u662f\u4f7f\u7528\u4e8c\u8fdb\u5236\u53ef\u4ee5\u964d\u4f4e\u7535\u8def\u6210\u672c\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42--abstraction-layers-in-computer-systems-design","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42 | Abstraction Layers in Computer Systems Design","text":"\u8d8a\u4e0a\u5c42\u62bd\u8c61\u7a0b\u5ea6\u8d8a\u9ad8 Algorithms Programing Languages Operating Systems Instruction Set Architecture Microarchitecture Register Transfers Logic Gates Transistor Circuits"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u6570\u5b57\u7cfb\u7edf--number-systems","title":"\u6570\u5b57\u7cfb\u7edf | Number Systems","text":"

\u9996\u5148\u9700\u8981\u6d89\u53ca\u7684\u95ee\u9898\u662f\u8fdb\u5236\u8f6c\u6362\u3002

\u5bf9\u4e8e\u4e00\u4e2a \\(r\\) \u8fdb\u5236\u6570\uff0c\u5b83\u4e00\u822c\u88ab\u5199\u6210\u8fd9\u6837\uff1a

\\[ (A_{n-1}A_{n-2}...A_1A_0A_{-1}...A_{-(m-1)}A_{-m})_{r} \\]

\u800c\u5b83\u5bf9\u5e94\u7684\u5341\u8fdb\u5236\u771f\u503c\u4e3a\uff1a

\\[ \\begin{aligned} \\sum_{i=-m}^{n-1} A_ir^i\\;\\; =&A_{n-1}r^{n-1}+A_{n-2}r^{n-2}+...\\\\ +&A_{1}r^{1}+A_0r^0+A_{-1}r^{-1}+...\\\\ +&A_{-(m-1)}r^{m-1}+A_{-m}r^{-m} \\end{aligned} \\]

\u8ba1\u7b97\u673a\u9886\u57df\u5e38\u89c1\u7684\u8fdb\u5236\u4e3b\u8981\u662f \u4e8c\u8fdb\u5236(binary)\uff0c\u516b\u8fdb\u5236(octal)\uff0c\u5341\u8fdb\u5236(decimal) \u548c \u5341\u516d\u8fdb\u5236(hexadecimal)\u3002

\u5176\u4e2d\u4e8c\u3001\u516b\u3001\u5341\u516d\u8fdb\u5236\u4e4b\u95f4\u7684\u8f6c\u6362\u975e\u5e38\u7b80\u5355\uff0c\u5b58\u5728\u591a\u4f4d\u5230\u4e00\u4f4d\u4e4b\u95f4\u7684\u65e0\u540e\u6548\u6027\u6620\u5c04\uff0c\u4f8b\u5982\u4e8c\u8fdb\u5236\u8f6c\u6362\u5230\u5341\u516d\u8fdb\u5236\u53ea\u9700\u8981\u5c06\u4ece\u4f4e\u5230\u9ad8\u6bcf\u56db\u4f4d\u8f6c\u5316\u6210\u5341\u516d\u8fdb\u5236\u4e2d\u7684\u4e00\u4f4d\u5373\u53ef\u3002

\u9700\u8981\u6ce8\u610f\uff0c\u7531\u4e8e\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u5728\u96f6\u4f4d\u4e0a\u7684\u6743\u91cd\u76f8\u540c\uff0c\u8fd9\u610f\u5473\u7740\u5728\u6574\u6570\u90e8\u5206\uff0c\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u662f\u53ef\u4ee5\u76f8\u4e92\u7cbe\u51c6\u8f6c\u5316\u7684\uff08\u5373\u6700\u5c0f\u7cbe\u5ea6\u662f\u4e00\u81f4\u7684\uff0c\u90fd\u662f 1\uff09\uff1b\u7136\u800c\u8be5\u6027\u8d28\u5728\u5c0f\u6570\u90e8\u5206\u5e76\u4e0d\u6210\u7acb\uff08\u56e0\u4e3a\u5c0f\u6570\u90e8\u5206\u4e0d\u5b58\u5728\u201c\u6700\u5c0f\u7cbe\u5ea6\u201d\u4e00\u8bf4\uff09\uff0c\u5373\u5341\u8fdb\u5236\u65e0\u6cd5\u7cbe\u51c6\u8f6c\u5316\u4e3a\u4e8c\u8fdb\u5236\uff0c\u4f46\u4e8c\u8fdb\u5236\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5341\u8fdb\u5236\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7b97\u672f\u8fd0\u7b97--arithmetic-operations","title":"\u7b97\u672f\u8fd0\u7b97 | Arithmetic Operations","text":"

\u8fd9\u91cc\u6d89\u53ca\u7684\u4e3b\u8981\u662f \u52a0\u6cd5(Addition)\u3001\u51cf\u6cd5(Subtraction)\u3001\u4e58\u6cd5(Multiplication)\u3002

\u6574\u4f53\u6d41\u7a0b\u548c\u5c0f\u5b66\u7ad6\u5f0f\u52a0\u6cd5\u662f\u4e00\u81f4\u7684\u3002

\u4e8c\u8fdb\u5236\u8fd0\u7b97

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7f16\u7801--codes","title":"\u7f16\u7801 | Codes","text":"

\u4e8c\u8fdb\u5236\u7f16\u7801\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u72ec\u70ed\u7801--\u72ec\u51b7\u7801","title":"\u72ec\u70ed\u7801 & \u72ec\u51b7\u7801","text":"

\u72ec\u70ed\u7801(one-hot) \u8981\u6c42\u6bd4\u7279\u5411\u91cf\u4e2d\u53ea\u6709\u4e00\u4f4d\u662f 1\uff1b\u5bf9\u5e94\u7684\u8fd8\u6709 \u72ec\u51b7\u7801(one-cold)\u3002

\u4f7f\u7528\u8fd9\u79cd\u7f16\u7801\u7684\u597d\u5904\u662f\uff0c\u51b3\u5b9a\u6216\u6539\u53d8\u72b6\u6001\u673a\u76ee\u524d\u7684\u72b6\u6001\u7684\u6210\u672c\u76f8\u5bf9\u8f83\u4f4e\uff0c\u5bb9\u6613\u8bbe\u8ba1\u4e5f\u5bb9\u6613\u68c0\u6d4b\u975e\u6cd5\u884c\u4e3a\u7b49\u3002

\u4f46\u662f\u76f8\u5bf9\u5e94\u7684\uff0c\u7f3a\u70b9\u662f\u4fe1\u606f\u8868\u793a\u7387\u8f83\u4f4e\uff0c\u975e\u6cd5\u72b6\u6001\u975e\u5e38\u591a\u800c\u6709\u6548\u72b6\u6001\u5f88\u5c11\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#bcd-\u7801","title":"BCD \u7801","text":"

\u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6570\u636e\u8868\u8ff0\u90fd\u662f\u4ee5\u5341\u8fdb\u5236\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7814\u7a76\u5982\u4f55\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u5341\u8fdb\u5236\u3002

\u9996\u5148\uff0c\u4e00\u4f4d\u4e8c\u8fdb\u5236\u6570\u80fd\u5305\u542b\u7684\u4fe1\u606f\u662f 1bit\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u201c\u771f\u201d\u6216\u8005\u4e00\u4e2a\u201c\u5047\u201d\u3002\u6211\u4eec\u79f0\u4e00\u4e2a\u62e5\u6709 n \u4e2a\u5143\u7d20\u7684\u4e8c\u8fdb\u5236\u5411\u91cf\u4e3a\u4e00\u4e2a n\u4f4d\u4e8c\u8fdb\u5236\u7f16\u7801(n-bit binary code)\u3002\u4e00\u4e2a n \u4f4d\u4e8c\u8fdb\u5236\u6570\u62e5\u6709 \\(2^{n}\\) \u79cd\u53ef\u80fd\u7684\u7ec4\u5408\uff0c\u56e0\u800c\u53ef\u4ee5\u8868\u793a \\(2^n\\) \u79cd\u4fe1\u606f\u3002

\u800c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u7684\u7f16\u7801\u7cfb\u7edf\uff0c\u5c31\u662f\u5c06\u6211\u4eec\u9700\u8981\u7684\u4fe1\u606f\u6620\u5c04\u5230\u8fd9 \\(2^n\\) \u4e2a\u201c\u7a7a\u4f4d\u201d\u4e2d\u3002\u5f53\u7136\uff0c\u5f53\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u4fe1\u606f\u6570\u91cf\u5e76\u4e0d\u662f 2 \u7684\u5e42\u6b21\u65f6\u5019\uff0c\u4f1a\u51fa\u73b0\u4e00\u4e9b \u672a\u5206\u914d(unassigned) \u7684\u6bd4\u7279\u7ec4\u5408\u3002

\u800c\u5728\u8fd9\u79cd\u7f16\u7801\u4e2d\uff0c\u6700\u5e38\u7528\u7684\u5c31\u662f BCD\u7801(binary-coded demical)\u3002\u5176\u6838\u5fc3\u601d\u8def\u5c31\u662f\uff0c\u5c06\u5341\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d \u5206\u522b \u7528 \u771f\u503c\u76f8\u7b49\u7684 4 \u4f4d\u4e8c\u8fdb\u5236 \u8868\u793a\uff0c\u5373 0 ~ 9 \u5206\u522b\u7528 0000 ~ 1001 \u8868\u793a\u3002

DecimalSymbol BCDDigit 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001

eg

\\[ \\mathrm{ (185)_{10}\\;=\\;(0001\\;1000\\;0101)_{BCD}\\;=\\;(10111001)_2 } \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4f59\u4e09\u7801","title":"\u4f59\u4e09\u7801","text":"

\u4e00\u79cd BCD\u7801 \u7684\u6539\u8fdb\u662f \u4f59\u4e09\u7801(Excess3)\u3002\u5176\u6838\u5fc3\u601d\u8def\u662f\u5728 BCD\u7801\u7684\u57fa\u7840\u4e0a\uff0c\u589e\u52a0\u4e00\u4e2a\u5927\u5c0f\u4e3a 3 \u7684\u504f\u79fb\u91cf\u3002

DecimalSymbol Excess3Digit 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100

\u4e3a\u4ec0\u4e48\u662f 3 \u5462\uff1f\u9996\u5148\u8fd9\u4e2a 3 \u6765\u81ea\u4e8e \\(\\frac{16-10}{2}\\)\uff0c\u4e5f\u5c31\u662f 8421 \u7801\u7684\u5bb9\u91cf\u51cf\u53bb\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u6570\u5b57\u6570\u91cf\uff0c\u518d\u9664\u4ee5\u4e8c\u3002\u8fd9\u6837\u7684\u597d\u5904\u662f\uff0c\u5341\u8fdb\u5236\u4e0b\u80fd\u8fdb\u4f4d\u7684\u4e24\u4e2a\u6570\uff0c\u5728\u4f59\u4e09\u7801\u4e0b\u76f8\u52a0\u4e5f\u521a\u597d\u8fdb\u4f4d\u3002

\u4f46\u662f\u9700\u8981\u5f3a\u8c03\u7684\u4e00\u70b9\u662f\uff0c\u7f16\u7801\u548c\u6570\u503c\u662f\u5b58\u5728\u533a\u522b\u7684\uff0c\u867d\u7136\u6211\u4eec\u63d0\u5230\u4e86\u4f59\u4e09\u7801\u76f8\u52a0\uff0c\u4f46\u662f\u7f16\u7801\u505a\u8fd0\u7b97\u591a\u6570\u60c5\u51b5\u4e0b\u662f\u6ca1\u6709\u610f\u4e49\u7684\u3002\u201c\u8fd0\u7b97\u201d\u7684\u4e3b\u4f53\u66f4\u591a\u662f\u6570\u503c\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u683c\u96f7\u7801","title":"\u683c\u96f7\u7801","text":"

\u6b64\u5916\uff0c\u8fd9\u91cc\u4e0d\u5f97\u4e0d\u63d0\u7684\u53e6\u5916\u4e00\u4e2a\u7f16\u7801\u662f \u683c\u96f7\u7801(Gray Codes)\u3002\u683c\u96f7\u7801\u7684\u7279\u5f81\uff0c\u4e5f\u662f\u4ed6\u7684\u4f18\u70b9\uff0c\u5c31\u662f\u76f8\u90bb\u7684\u4e24\u4e2a\u6570\u5728\u4e8c\u8fdb\u5236\u4e0b\u7684\u8868\u793a\u53ea\u5dee\u4e00\u4f4d\uff08\u5f53\u5728\u5360\u6ee1\u65f6\uff0c\u5bf9\u4e8e\u6574\u4e2a\u7f16\u7801\u5e8f\u5217\uff0c\u73af\u72b6\u6ee1\u8db3\u8be5\u6761\u4ef6\uff09\u3002

\u6bd4\u5982\u6709\u5982\u4e0b\u5e94\u7528\uff1a

\u4ee5\u53ca\u5728\u8bb8\u591a\u72b6\u6001\u63a7\u5236\u4e2d\u90fd\u6709\u7740\u5e7f\u6cdb\u7684\u5e94\u7528\u3002

\u4ece\u7b14\u8bd5\u505a\u9898\u89d2\u5ea6\u6765\u8bf4\uff0c\u683c\u96f7\u7801\u6700\u9ebb\u70e6\u7684\u5176\u5b9e\u662f\u4e0e\u5341\u8fdb\u5236\u6570\u7684\u8f6c\u6362\u3002\uff08\u6b64\u5904 @CSP-S2019-Day1-T1\uff09

\u4e2a\u4eba\u8ba4\u4e3a\u6700\u597d\u505a\u7684\u505a\u6cd5\u5c31\u662f\uff0c\u5047\u8bbe\u6211\u4eec\u8981\u627e\u7684\u662f\u7b2c k \u4e2a\u683c\u96f7\u7801\uff0c\u5219\u5bf9\u5e94\u7684\u683c\u96f7\u7801\u4e3a\uff1a

\\[ k \\;\\;\\mathrm{XOR}\\;\\; (k>>1) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#ascii-\u7801","title":"ASCII \u7801","text":"

\u5b57\u7b26\u7f16\u7801\u6240\u4f7f\u7528\u7684\u4e00\u822c\u662f ASCII \u7f16\u7801\uff0c\u7531\u4e8e ASCII \u5df2\u7ecf\u662f\u8001\u751f\u5e38\u8c08\u4e86\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e0d\u518d\u5c55\u5f00\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u5947\u5076\u6821\u9a8c\u4f4d","title":"\u5947\u5076\u6821\u9a8c\u4f4d","text":"

\u4fe1\u9053\u7f16\u7801\u4e0e\u4fe1\u6e90\u7f16\u7801\uff1a

\u5728\u4fe1\u53f7\u4f20\u8f93\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u80fd\u7531\u4e8e\u73af\u5883\u5e72\u6270\u7b49\u539f\u56e0\uff0c\u51fa\u73b0\u5404\u79cd\u4fe1\u53f7\u6296\u52a8\uff0c\u6240\u4ee5\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u4fe1\u5ea6\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u9519\u8bef\u68c0\u6d4b\u673a\u5236\u3002

\u4e00\u79cd\u5e38\u89c1\u7684\u65b9\u6cd5\u662f \u5197\u4f59(Redundancy)\uff0c\u5373\u52a0\u5165\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u7528\u4ee5\u6821\u9a8c\u3002

graph TD\nA[Error Detection Techniques]\nB[Single Parity Check]\nC[Cyclic Redundancy Check]\nD[Check Sum]\n\nA-->B\nA-->C\nA-->D

\u5176\u4e2d\u4e00\u79cd\u505a\u6cd5\u662f\u5f15\u5165 \u5947\u5076\u6821\u9a8c\u4f4d(Parity Bit)\u3002\u5b83\u5206\u4e3a \u5947\u6821\u9a8c(Odd Parity) \u548c \u5076\u6821\u9a8c(Even Parity)\u3002\u5206\u522b\u901a\u8fc7\u5f15\u5165\u989d\u5916\u7684\u4e00\u4f4d\uff0c\u6765\u4fdd\u8bc1\u6574\u4e2a\u4fe1\u606f\u4e32\u4e2d 1 \u7684\u6570\u91cf\u662f\u5947\u6570/\u5076\u6570\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/","title":"Chap 2 Combinational Logic Circuits","text":"

\u7ea6 8091 \u4e2a\u5b57 25 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 27 \u5206\u949f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u8fd0\u7b97","title":"\u903b\u8f91\u8fd0\u7b97","text":"

\u903b\u8f91\u8fd0\u7b97\u7684\u5bf9\u8c61\u662f\u5e03\u5c14\u53d8\u91cf\uff0c\u4e5f\u5c31\u662f 0/1 \u4e8c\u503c\u3002

\u4e3b\u8981\u7684\u8fd0\u7b97\u5c31\u662f \u4e0e(AND)\uff0c\u6216(OR)\uff0c\u975e(NOT)\uff0c\u5f02\u6216(XOR)\uff0c\u4ee5\u53ca \u4e0e\u975e(NAND)\uff0c\u6216\u975e(NOR)\uff0c\u540c\u6216(XNOR)\u3002

\u9ad8\u7ef4

\u591a\u8f93\u5165\u7684\u5f02\u6216\u548c\u540c\u6216\u88ab\u79f0\u4e3a\u5947\u51fd\u6570\u548c\u5076\u51fd\u6570\u3002

\u53ef\u4ee5\u7528\u5b83\u4eec\u6765\u5b9e\u73b0\u5947\u6821\u9a8c\u548c\u5076\u6821\u9a8c\u3002

\u800c\u4e14\u89c2\u5bdf\u5176\u5361\u8bfa\u56fe\u7684\u5f62\u72b6\uff08\u68cb\u76d8\u5f62\uff09\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u4eec\u662f\u5929\u7136\u4f18\u5316\u7684\uff0c\u5373\u4e0d\u53ef\u4f18\u5316\u7684\u3002

\u8fd0\u7b97\u89c4\u5219\u633a\u7b80\u5355\u7684\uff0c\u5728\u6b64\u7565\u53bb\u3002

\u6bd4\u8f83\u57fa\u7840\u7684\uff0c\u9700\u8981\u4e86\u89e3\u4e0e\u6216\u975e\u7684\u7b26\u53f7\u8868\u793a\u3002

\u7531\u6b64\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u7ec4\u5408\uff0c\u4f8b\u5982\uff1a

\u518d\u6b21\u8fd8\u9700\u8981\u63d0\u5230\u7684\u662f \u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b(De Morgan's Laws)\uff0c\u5176\u8868\u8ff0\u4e3a\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u95e8","title":"\u903b\u8f91\u95e8","text":"

\u903b\u8f91\u95e8\u662f\u5728\u786c\u4ef6\u5c42\u9762\u4e0a\u5b9e\u73b0\u5e03\u5c14\u4ee3\u6570\u7684\u903b\u8f91\u5355\u5143\u3002\u5176\u64cd\u4f5c\u5bf9\u8c61\u4e3a\u9ad8\u4f4e\u7535\u5e73\u3002

\u5982\u56fe\uff0c(a)\u4e2d\u7ed8\u5236\u4e86\u4e09\u4e2a\u5e38\u7528\u903b\u8f91\u95e8\u7684\u7b26\u53f7\uff1b(b)\u4e2d\u5219\u63cf\u8ff0\u4e86\u8fd9\u4e9b\u8fd0\u7b97\u5728 \u65f6\u5e8f\u56fe(timing diagram) \u4e2d\u7684\u72b6\u6001\uff1b(c)\u5219\u63cf\u8ff0\u4e86\u5728\u5ef6\u65f6\uff08\u89c1\u4e0b\uff09\u6548\u5e94\u4e0b\u7684\u65f6\u5e8f\u56fe\u3002

\u8fd8\u6709\u4e00\u4e2a\u6ce8\u610f\u70b9\u662f\uff0c\u975e\u95e8\u5176\u5b9e\u66f4\u591a\u7684\u88ab\u79f0\u4e3a inverter\uff0c\u800c\u975e NOT\u3002

\u4f46\u662f\u7531\u4e8e\u662f\u7269\u7406\u5c42\u9762\u7684\u5b9e\u73b0\uff0c\u6240\u4ee5\u4f1a\u6709\u4e00\u4e9b\u903b\u8f91\u8fd0\u7b97\u5c42\u9762\u4e0d\u4f1a\u51fa\u73b0\u7684\u95ee\u9898\uff0c\u6bd4\u5982 \u5ef6\u65f6(delay)\u3002

Source: https://en.wikipedia.org/wiki/Signal_propagation_delay#Electronics

\u5ef6\u65f6\u7684\u957f\u77ed\u4e0e\u5f88\u591a\u56e0\u7d20\u6709\u5173\uff0c\u53d6\u51b3\u4e8e\u903b\u8f91\u95e8\u7684\u5b9e\u73b0\u6280\u672f\u3002\u800c\u4e14\u901a\u5e38\u6765\u8bf4\uff0c\u5bf9\u4e8e\u4e0d\u540c\u8fd0\u7b97\u53c2\u6570\uff0c\u5176\u5ef6\u65f6\u4e5f\u4f1a\u6709\u4e0d\u540c\u3002

\u6b64\u5916\uff0c\u4e0e\u95e8\u548c\u6216\u95e8\u53ef\u80fd\u6709\u66f4\u591a\u7684\u8f93\u5165\u5f15\u811a\uff0c\u5982\u4e0b\uff1a

\u81f3\u6b64\uff0c\u7ed9\u51fa\u4e86 AND, OR, NOT \u4e09\u4e2a\u95e8\u7684\u7b26\u53f7\u8868\u793a\uff0c\u7c7b\u4f3c\u4e0a\u4e00\u5c0f\u8282\u63d0\u5230\u7684\u90a3\u6837\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5229\u7528\u8fd9\u4e09\u4e2a\u57fa\u7840\u7684\u95e8\u7535\u8def\u6765\u6784\u6210\u5176\u4ed6\u7684\u95e8\u7535\u8def\uff08\u867d\u7136\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u662f\u901a\u8fc7 NAND + NOT \u6765\u5b9e\u73b0 AND \u7684\uff09\u3002

\u4e8e\u662f\u53c8\u5f15\u7533\u51fa\u4e00\u4e2a\u6982\u5ff5\u2014\u2014\u901a\u7528\u95e8(Universal Gate)\u3002\u4e00\u4e2a\u529f\u80fd\u5b8c\u5168\u7684\uff0c\u80fd\u591f\u8868\u793a\u5176\u4ed6\u6240\u6709\u95e8\u7684\u903b\u8f91\u95e8\u88ab\u79f0\u4e3a\u901a\u7528\u95e8\uff0c\u5728\u6211\u4eec\u5b66\u8fc7\u7684\u903b\u8f91\u95e8\u4e2d\uff0cNAND \u548c NOR \u90fd\u662f\u901a\u7528\u95e8\u3002

\u63a8\u8350\u9605\u8bfb

Universal Logic gates can be used to produce any other logic or Boolean function with the NAND and NOR gates being minimal

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5e03\u5c14\u4ee3\u6570","title":"\u5e03\u5c14\u4ee3\u6570","text":"

literal ~ \u5b57\u9762\u91cf\uff0c\u4e5f\u5c31\u662f\u201c\u53d8\u91cf\u201d\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b","title":"\u8fd0\u7b97\u5f8b","text":"

\u8fd9\u5f20\u56fe\u7247\u603b\u7ed3\u4e86\u5e03\u5c14\u8fd0\u7b97\u4e2d\u7684\u8fd0\u7b97\u5f8b\uff0c\u4e2a\u4eba\u611f\u89c9\u6700\u9700\u8981\u5f3a\u5316\u8bb0\u5fc6\u7684\u662f 15 \u6761\uff0c\u56e0\u4e3a\u5e03\u5c14\u4ee3\u6570\u501f\u7528\u4e86\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\uff0c\u4f46\u7b2c 15 \u6761\u5728\u666e\u901a\u4ee3\u6570\u4e2d\u5e76\u4e0d\u6210\u7acb\uff0c\u6240\u4ee5\u5bf9\u4e8e\u4e60\u60ef\u8fd9\u5957\u7b26\u53f7\u7684\u4eba\u6765\u8bf4\u53ef\u80fd\u4e0d\u592a straightfoward\u3002

\u5728\u8bb0\u5fc6\u8fd9\u5957\u8fd0\u7b97\u89c4\u5f8b\u7684\u65f6\u5019\uff0c\u6211\u4e2a\u4eba\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u4e00\u5b9a\u8981\u5efa\u7acb \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\u89c2\u5ff5\u3002\u6211\u4eec\u4e60\u60ef\u7528\u201c\u771f\u201d\u53bb\u7406\u89e3\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5982\u679c\u4f60\u4ee5\u201c\u5047\u201d\u4e3a\u4e3b\u4f53\u53bb\u5206\u6790\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f1a\u53d1\u73b0\u548c\u201c\u771f\u201d\u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u3002\u6362\u8a00\u4e4b\uff0c \u4e0e \u548c \u6216 \u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u8fd0\u7b97\uff0c\u800c\u975e\u50cf\u4ed6\u4eec\u501f\u7528\u7684\u7b26\u53f7 \\(\\times\\) \u548c \\(+\\) \u90a3\u6837\u5b58\u5728\u975e\u5bf9\u79f0\u5173\u7cfb\u3002

\u4f46\u662f\u8ba9\u8fd9\u4ef6\u4e8b\u53d8\u5f97\u53c8\u6ca1\u90a3\u4e48\u7b80\u5355\u7684\u4e8b\u60c5\u662f\uff0c\u867d\u7136 \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u501f\u7528\u666e\u901a\u4ee3\u6570\u7b26\u53f7\u4f53\u7cfb\u7684\u540c\u65f6\uff0c\u53c8\u4eba\u4e3a\u5730\u7ed9\u4ed6\u4eec\u6dfb\u52a0\u4e86\u4f18\u5148\u7ea7\uff08\u4f46\u662f\u8fd9\u4e5f\u662f\u5fc5\u8981\u7684\uff0c\u5426\u5219\u8868\u8fbe\u5f0f\u5c31\u4f1a\u5145\u6ee1\u62ec\u53f7\uff09\u3002

\u4f18\u5148\u7ea7\u4ece\u9ad8\u5230\u4f4e\u4f9d\u6b21\u4e3a\uff1a

  1. \u62ec\u53f7 / ()\uff1b
  2. \u975e / NOT / \\(\\overline A\\)\uff1b
  3. \u4e0e / AND / \\(\\cdot\\)\uff1b
  4. \u6216 / OR / \\(+\\)\uff1b

\u4e2a\u4eba\u611f\u89c9\uff0c\u8fd9\u4e00\u79cd\u601d\u8def\u5e76\u4e0d\u76f4\u89c9\uff0c\u5c24\u5176\u662f\u501f\u7528\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\u4f53\u7cfb\u4ee5\u540e\u66f4\u52a0\u6df7\u6dc6\uff0c\u6240\u4ee5\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u7ec3\u4e60\u6765\u6446\u8131\u8fd9\u4e9b\u201c\u523b\u677f\u5370\u8c61\u201d\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b\u63a8\u5e7f","title":"\u8fd0\u7b97\u5f8b\u63a8\u5e7f","text":"

\u9664\u6b64\u4e4b\u5916\uff0c\u4ece\u4e0a\u9762\u63d0\u5230\u7684\u8fd0\u7b97\u5f8b\u4e2d\u8fd8\u80fd\u63a8\u5e7f\u51fa\u5982\u4e0b\u51e0\u4e2a\u6a21\u578b\uff1a

\u5bf9\u6bd4\u524d\u4e09\u4e2a\u548c\u540e\u4e09\u4e2a\uff0c\u6211\u4eec\u518d\u6b21\u53d1\u73b0\uff0c\u4e0e \u548c \u6216 \u5728\u903b\u8f91\u4e0a\u662f\u5bf9\u79f0\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5bf9\u5076\u6cd5\u5219","title":"\u5bf9\u5076\u6cd5\u5219","text":"

\u5bf9\u5076\u6cd5\u5219(Duality Rule)\uff1a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u7684 \u5bf9\u5076(dual) \u4e3a\uff0c\u5c06\u6240\u6709\u7684 \u4e0e \u548c \u6216 \u5bf9\u8c03\u5f97\u5230\u7684\u5f0f\u5b50\uff08\u6ce8\u610f\uff01\u9700\u8981\u4fdd\u8bc1\u53c2\u4e0e\u8fd0\u7b97\u7684\u7ed3\u6784\u4e0d\u80fd\u53d8\uff08\u662f\u201c\u5e26\u62ec\u53f7\u201d\u7684\u5b8f\u5c55\u5f00\uff09\uff0c\u6bd4\u5982 \u4e00\u822c\u60c5\u51b5\u4e0b \\(A\\cdot B\\) \u4f1a\u88ab\u5bf9\u5076\u4e3a \\((A+B)\\) \u4ee5\u4fdd\u8bc1\u8fd0\u7b97\u987a\u5e8f\uff09\u3002

eg

\u800c\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u9664\u975e\u67d0\u4e2a\u8868\u8fbe\u5f0f\u662f \u81ea\u5bf9\u5076(self-dual) \u7684\uff0c\u90a3\u4e48\u5b83\u7684\u8868\u73b0\u90fd\u4e0e\u539f\u8868\u8fbe\u5f0f\u4e0d\u540c\u3002

\u5bf9\u5076\u8868\u8fbe\u5f0f\u5177\u6709\u5982\u4e0b\u6027\u8d28\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e92\u8865\u51fd\u6570","title":"\u4e92\u8865\u51fd\u6570","text":"

\u4e00\u4e2a \u51fd\u6570\u7684\u4e92\u8865(Complement of a Function) \u6307\u7684\u662f\uff0c\u5c06\u5b83\u7684 \u5bf9\u5076\u51fd\u6570 \u4e2d\u6bcf\u4e00\u4e2a \u53d8\u91cf \u90fd\u53d6\u53cd\u5f97\u5230\u7684\u51fd\u6570\uff0c\u800c\u8be5\u51fd\u6570\u6b63\u597d\u7b49\u4e8e\u539f\u51fd\u6570\u7684 \u975e\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u66ff\u4ee3\u6cd5\u5219","title":"\u66ff\u4ee3\u6cd5\u5219","text":"

\u66ff\u4ee3\u6cd5\u5219(Substitution Rules): \u5982\u679c\u5c06\u4e00\u4e2a\u7b49\u5f0f\u4e2d \u6240\u6709\u7684 \u67d0\u4e2a\u53d8\u91cf \u90fd\u66ff\u6362\u4e3a\u540c\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u5219\u7b49\u5f0f\u4f9d\u7136\u6210\u7acb\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e00\u81f4\u6027\u5b9a\u7406","title":"\u4e00\u81f4\u6027\u5b9a\u7406","text":"

\u5728\u7b80\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u7684\u65f6\u5019\uff0c\u4e00\u81f4\u6027\u5b9a\u7406(Consensus Theorem) \u4e5f\u5f88\u6709\u7528\uff1a

\\[ XY+\\overline{X}Z+YZ=XY+\\overline{X}Z \\]

\u5176\u8bc1\u660e\u7684\u7b2c\u4e00\u6b65\u662f\u8fd9\u6837\u7684\uff1a \\(XY+\\overline{X}Z+YZ=XY+\\overline{X}Z+(X+\\overline{X})YZ\\)\uff0c\u90a3\u540e\u9762\u5c31\u5f88\u7b80\u5355\u4e86\u3002\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7b49\u5f0f\u662f\u5229\u7528\u4e86\u88c2\u9879\uff0c\u9700\u8981\u5c06\u5176\u4e2d\u6700\u672c\u8d28\u7684\u90e8\u5206\uff0c\u6700\u5c0f\u7684\u7c92\u5ea6\u7ed9\u88c2\u5f00\u6765\uff0c\u7136\u540e\u518d\u6162\u6162\u6d88\u6389\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","title":"\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","text":"

\u7531\u4e8e\u672c\u8d28\u4e0a\u76f8\u7b49\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u5b9e\u9645\u4e0a\u6709\u5f88\u591a\u79cd\u5199\u6cd5\uff0c\u800c\u4e14\u968f\u7740\u53d8\u91cf\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u4ed6\u4eec\u4e4b\u95f4\u7684\u6bd4\u8f83\u4f1a\u5f88\u56f0\u96be\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u5f62\u5f0f\uff0c\u4f7f\u5f97\u6240\u6709\u76f8\u540c\u7684\u8868\u8fbe\u5f0f\u90fd\u80fd\u6bd4\u8f83\u65b9\u4fbf\u7684\u201c\u5316\u7b80\u201d\u4e3a\u540c\u4e00\u4e2a\u5f62\u5f0f\uff0c\u540c\u65f6\u4e5f\u80fd\u8fa8\u522b\u51fa\u4e24\u4e2a\u8868\u8fbe\u5f0f\u662f\u4e0d\u540c\u7684\u3002\u8fd9\u5c31\u5f15\u5165\u4e86 \u6807\u51c6\u5f62\u5f0f(Standard Forms)\uff0c\u5305\u62ec SOP \u548c POS\uff1b\u4ee5\u53ca \u89c4\u8303\u5f62\u5f0f(Canonical Forms)\uff0c\u5206\u522b\u4e3a \u6700\u5c0f\u9879\u4e4b\u548c(Sum of Minterms, SOM) \u548c \u6700\u5927\u9879\u4e4b\u79ef(Product of Maxterms, POM)\u3002

\u4e3a\u4e86\u65b9\u4fbf\u63cf\u8ff0\uff0c\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u5148\u7ed9\u51fa\u8fd9\u6837\u4e00\u5f20 \ud83c\udf30 \u771f\u503c\u8868\u3002

\ud83c\udf30 Index X Y Z Output 0 / 000 0 0 0 0 1 / 001 0 0 1 0 2 / 010 0 1 0 1 3 / 011 0 1 1 0 4 / 100 1 0 0 1 5 / 101 1 0 1 1 6 / 110 1 1 0 0 7 / 111 1 1 1 1

\u6570\u503c\u662f\u968f\u4fbf\u6413\u7684\uff0c\u8bf7\u7559\u610f\u4e3a\u4ec0\u4e48\u4e3a\u8981\u5728 Index \u7279\u5730\u5199\u51fa\u4e8c\u8fdb\u5236\u7684\u8868\u8ff0\u3002

\u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u9700\u8981\u5f3a\u8c03\uff0c\u6211\u4eec\u5f15\u5165 SOM \u548c POM \u7684\u76ee\u7684\u662f\u5bfb\u627e\u4e00\u79cd\u6bd4\u8f83\u5178\u578b\u7684 \u8868\u8fbe\uff0c\u4f7f\u5f97\u4ed6\u4eec\u80fd\u591f \u786e\u5b9a \u4e00\u5f20\u771f\u503c\u8868\u3002\u5373\uff0c\u77e5\u9053\u8fd9\u79cd \u8868\u8fbe \u6211\u4eec\u5c31\u8db3\u591f\u5199\u51fa\u8fd9\u5f20\u771f\u503c\u8868\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5c0f\u9879\u4e4b\u548c-som","title":"\u6700\u5c0f\u9879\u4e4b\u548c SOM","text":"

\u8bfe\u672c\u4e2d\u5bf9\u6700\u5c0f\u9879\u7684\u63cf\u8ff0\u662f\uff1a

A product term in which all the variables appear exactly once, either complemented or uncomplemented, is called minterm.

Its characteristic property is that it represents exactly one combination of binary variable values in the truth table.

\u7528\u6211\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u5c31\u662f\u6311\u51fa\u771f\u503c\u8868\u4e2d\u6240\u6709\u7ed3\u679c\u662f 1 \u7684\u6700\u5c0f\u9879\uff08\u6bd4\u8f83\u6a21\u7cca\u4f46\u76f4\u89c2\uff0c\u6240\u4ee5\u8bf7\u5148\u56eb\u56f5\u541e\u67a3\uff0c\u6211\u5728\u201c\u8ffd\u52a0\u8bf4\u660e\u201d\u4f1a\u8fdb\u4e00\u6b65\u8bf4\u660e\uff09\u7136\u540e OR \u8d77\u6765\u3002\u663e\u7136\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u542b\u4e49\u5c31\u662f\uff0c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u4e86\u8fd9\u51e0\u4e2a\u201c\u6700\u5c0f\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f 1\uff0c\u7b26\u5408\u4e86 OR \u7684\u201c\u67091\u5f971\u201d\u7684\u89c4\u5219\u3002

\u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(m_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5c0f\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

\u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 1 \u7684\u9879\u6709\uff1a010 100 101 111 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(m_{2}=\\overline{X}Y\\overline{Z}, \\; m_{4}=X\\overline{Y}\\overline{Z}, \\; m_{5}=X\\overline{Y}Z, \\; m_{7}=XYZ\\)\uff0c\u8fd9\u4e9b\u53d8\u91cf\u8868\u8fbe\u5f0f\u90fd\u662f\u5f53\u4e14\u4ec5\u5f53\u53d8\u91cf\u7ec4\u5408\u4e3a\u5bf9\u5e94\u9879\u65f6\u624d\u4f1a\u53d6 1 \u7684\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u8fd9\u5199\u8868\u8fbe\u5f0f\u552f\u4e00\u8868\u8fbe\u4e86\u8fd9\u4e9b\u771f\u503c\u8868\u4e2d\u7684 1\u3002

\u8ffd\u52a0\u8bf4\u660e\uff08\u7b80\u5355\uff0c\u4f46\u662f\u5efa\u8bae\u770b\u4e00\u770b\uff09

\u6216\u8bb8\u60a8\u89c9\u5f97\u6700\u5c0f\u9879\u7684\u5f97\u5230\u975e\u5e38\u7684\u81ea\u7136\u4e14\u7b80\u5355\uff0c\u6211\u5efa\u8bae\u60a8\u4e5f\u5c1d\u8bd5\u7740\u770b\u4e00\u770b\u8ffd\u52a0\u8bf4\u660e\uff0c\u56e0\u4e3a\u8fd9\u5bf9\u7406\u89e3\u6700\u5927\u9879\u633a\u6709\u5e2e\u52a9\u7684\u3002

\u90a3\u4e48\u4ec0\u4e48\u662f\u201c\u5217\u4e3e\u201d\u5462\uff1f\u8ba9\u6211\u4eec\u518d\u770b\u4e00\u773c\u4e0a\u9762\u5bf9\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u63cf\u8ff0\uff1a\u201c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5c0f\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f\u771f\u201d\uff0c\u8ffd\u672c\u6eaf\u6e90\uff0c\u5728\u6700\u5c0f\u9879\u4e2d\uff0c\u6211\u4eec\u5c31\u9700\u8981\u505a\u5230\u53ea\u6709\u5f53\u4e00\u4e2a\u7535\u8def\u7684\u72b6\u6001\u662f\u7279\u5b9a\u7ec4\u5408\u65f6\uff0c\u5176\u8fd4\u56de\u503c\u4e3a 1\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(m_{5}=X\\overline{Y}Z\\)\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u4e00\u79cd\u66f4\u5570\u55e6\u7684\u65b9\u5f0f\u8868\u8fbe\u51fa\u6765\u662f\u8fd9\u6837\u7684\uff1a

if(X == 1 && Y == 0 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

\uff08\u5faa\u5e8f\u6e10\u8fdb\uff09\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u53d8\u5316\u4e3a\u8fd9\u6837\uff1a

if(X == 1 && (!Y) == 1 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

\u5982\u679c\u4f60\u719f\u6089\u201c\u538b\u884c\u201d\u6280\u5de7\uff0c\u90a3\u4e48\u8fd9\u4e00\u6bb5\u90fd\u53ef\u4ee5\u5199\u6210\uff1a

Output = (X == 1 && (!Y) == 1 && Z == 1);\n

\u800c\u8fd9\u4e2a\u903b\u8f91\u8868\u8fbe\u5f0f\uff0c\u5b9e\u9645\u4e0a\u5df2\u7ecf\u548c \\(m_5=X\\overline{Y}Z\\) \u4e00\u6a21\u4e00\u6837\u4e86\u3002

\u5728\u8fd9\u91cc\u7ed9\u51fa\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002\uff08\u8fd9\u91cc\u4e4b\u6240\u4ee5\u5199\u7684\u662f \\(f\\) \u800c\u4e0d\u662f 1\uff0c\u662f\u4e3a\u4e86\u7ed9\u4e4b\u540e\u5206\u6790 POM \u505a\u94fa\u57ab\uff0c\u5bf9\u4e8e POM\uff0c0 \u624d\u662f\u552f\u4e00\u8868\u8fbe\u7684\u7279\u5f81\u7ed3\u679c\u3002\uff09

\u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 SOM\uff1a

\\[ \\begin{array}{l} F(X,Y,Z) & = \\sum m(2,4,5,7) \\\\ & = m_2+m_4+m_5+m_7 \\\\ & = \\overline{X}Y\\overline{Z}+X\\overline{Y}\\,\\overline{Z}+X\\overline{Y}Z+XYZ \\end{array} \\]

\u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 1 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u548c\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff08\u4e8b\u5b9e\u4e0a\u4e0d\u505a\u5316\u7b80\u7684\u8bdd\u4f60\u4e5f\u53ea\u80fd\u6ee1\u8db3\u4e00\u9879\u7684\u503c\u53d6\u5230 1\uff09\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 1\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 0\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5927\u9879\u4e4b\u79ef-pom","title":"\u6700\u5927\u9879\u4e4b\u79ef POM","text":"

\u5c31\u50cf\u6211\u4e4b\u524d\u4e0d\u65ad\u4e0d\u65ad\u4e0d\u65ad\u5f3a\u8c03\u7684\uff0c\u6240\u8c13\u7684 1 \u548c 0 \u90fd\u53ea\u662f\u4eba\u4e3a\u5b9a\u4e49\u7684\uff0c\u6446\u8131\u6f5c\u610f\u8bc6\u91cc\u5bf9\u8fd9\u4e24\u8005\u4e4b\u4e00\u7684\u503e\u5411\uff08\u4f8b\u5982\u6211\u672c\u4eba\u5c31\u4e00\u76f4\u5f88\u503e\u5411\u4e8e\u4ee5 1 \u4e3a\u4e3b\u4f53\u7814\u7a76\u95ee\u9898\uff09\u4f1a\u5bf9\u7406\u89e3\u6700\u5927\u9879\u4e4b\u79ef\u548c\u903b\u8f91\u8868\u8fbe\u5f0f\u5316\u7b80\u5f88\u6709\u5e2e\u52a9\u3002

\u800c\u6700\u5927\u9879\u4e4b\u79ef\u2014\u2014\u4ee5\u6211\u4e2a\u4eba\u7684\u611a\u89c1\u2014\u2014\u5c31\u662f\u4ee5 0 \u4e3a\u4e3b\u4f53\u6765\u7814\u7a76\u771f\u503c\u8868\u7684\u7279\u5f81\u7684\u3002

\u8bfe\u672c\u4e2d\u5bf9\u6700\u5927\u9879\u7684\u63cf\u8ff0\u662f\uff1a

A sum term that contains all the variables in complemented or uncomplemented form is called a maxterm.

\u4e0e\u6700\u5c0f\u9879\u5bf9\u6bd4\uff0c\u65e0\u975e\u662f\u628a \"product term\" \u6362\u6210\u4e86 \"sum term\"\uff0c\u4e5f\u5c31\u662f\u628a AND \u6362\u6210\u4e86 OR\u3002

\u800c\u6700\u5927\u9879\u4e4b\u79ef\uff0c\u5c31\u662f\u6311\u51fa\u6240\u6709\u7ed3\u679c\u4e3a 0 \u7684\u6700\u5927\u9879\uff08\u201c\u6311\u51fa\u201d\u7684\u5b9a\u4e49\u6211\u5df2\u7ecf\u5728 SOM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u7ed9\u51fa\uff0c\u5728 POM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u6211\u8fd8\u4f1a\u518d\u4e00\u6b21\u63d0\u53ca\uff09\uff0c\u518d\u505a AND\u3002\u4ee5 1 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u662f\u201c\u90fd1\u51fa1\u201d\uff0c\u800c\u4ee5 0 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u5219\u662f\u201c\u67090\u51fa0\u201d\uff0c\u8fd9\u4e0e OR \u7684\u201c\u67091\u51fa1\u201d\u4e5f\u662f\u9ad8\u5ea6\u5bf9\u79f0\u7684\uff08\u53cd\u4e4b\u4ea6\u7136\uff09\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u7684\u542b\u4e49\u662f\uff0c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u201c\u6700\u5927\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u3002

\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(M_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5927\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

\u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 0 \u7684\u9879\u6709\uff1a000 001 011 110 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(M_{0}=X+Y+Z, \\; M_{1}=X+Y+\\overline{Z}, \\; M_{3}=X+\\overline{Y}+\\overline{Z}, \\; M_{6}=\\overline{X}+\\overline{Y}+Z\\)\u3002\u53ef\u4ee5\u68c0\u9a8c\uff0c\u53ea\u6709\u4ee3\u5165\u4ed6\u4eec\u5bf9\u5e94\u7684\u90a3\u4e00\u884c\u771f\u503c\u8868\u7ec4\u5408\u65f6\uff0c\u4ed6\u4eec\u624d\u4f1a\u5f97\u5230 0\u3002

\u8ffd\u52a0\u8bf4\u660e

\u540c\u6837\u7684\uff0c\u56de\u987e\u6700\u5927\u9879\u4e4b\u79ef\u7684\u63cf\u8ff0\uff1a\u201c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5927\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u201d\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u5982\u4e0b\u63cf\u8ff0\uff1a

if(X == 1 && Y == 1 && Z == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

\u56de\u987e\u6700\u5927\u9879\u7684\u76ee\u7684\u662f\u6ee1\u8db3\u8fd9\u4e2a\u5206\u652f\u6761\u4ef6\u7684\u60c5\u51b5\u4e0b\u8f93\u51fa 0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u9700\u8981\u8868\u8fbe (X == 1 && Y == 1 && Z == 0) \u8fd9\u4e2a\u903b\u8f91\u6761\u4ef6\u3002\u4f46\u7531\u4e8e\u6700\u5927\u9879\u7684\u5b9e\u73b0\u5f62\u5f0f\u662f OR\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 && \u7684\u5f0f\u5b50\u4ee5 || \u7684\u5f62\u5f0f\u8868\u8fbe\u3002

\u5f53\u7136\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u5404\u79cd\u8fd0\u7b97\u5f8b\u6765\u5316\u7b80\uff0c\u4f46\u662f\u4e0d\u59a8\u60f3\u4e00\u60f3 AND \u548c OR \u7684\u8fd0\u7b97\u7279\u5f81\uff0c\u524d\u8005\u662f\u201c\u67090\u51fa0\u201d\uff0c\u540e\u8005\u662f\u201c\u67091\u51fa1\u201d\u3002\u800c\u5bf9\u4e8e AND \u6765\u8bf4\uff0c\u60f3\u8981\u505a\u5230\u6761\u4ef6\u7b5b\u9009\uff0c\u5c31\u9700\u8981\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 1\uff0c\u6700\u540e\u5982\u679c\u7b5b\u9009\u6210\u529f\u7ed3\u679c\u5c31\u662f 1\uff1b\u5bf9\u4e8e OR \u6765\u8bf4\uff0c\u5c31\u662f\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 0\uff0c\u5982\u679c \u7b5b\u9009\u6210\u529f \u7684\u7ed3\u679c\u5c31\u662f 0\u3002\u4e5f\u5c31\u662f\u8bf4\u5bf9\u4e8e\u6216\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8868\u793a\uff1a

if((X == 0 || Y == 0 || (!Z) == 0) == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

\u540c\u6837\u8fdb\u884c\u4e00\u4e0b\u538b\u884c\uff1a

// It might be too complex.\nOutput = !((X == 0 || Y == 0 || (!Z) == 0) == 0);\n// So we can simplify it.\nOutput = (X == 0 || Y == 0 || (!Z) == 0);\n

\u8fd9\u4e5f\u6b63\u5bf9\u5e94\u4e86 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\u3002

\u518d\u6b21\u7ed9\u51fa\u8fd9\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002

\u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 POM\uff1a

\\[ \\begin{aligned} F(X,Y,Z) & = \\prod M(0,1,3,6) \\\\ & = M_0M_1M_3M_6 \\\\ & = (X+Y+Z)(X+Y+\\overline{Z})(X+\\overline{Y}+\\overline{Z})(\\overline{X}+\\overline{Y}+Z) \\end{aligned} \\]

\u540c\u6837\u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 0 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u79ef\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 0\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 1\u3002

\u4e0e\u6700\u5c0f\u9879\u76f8\u6bd4\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u7684 1 \u7684\u53ef\u80fd\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u662f 0 \u7684\u53ef\u80fd\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u503c\u8868\u8fbe\u5f0f\u6765\u8bf4\uff0c\u4e24\u79cd \u8868\u8fbe \u90fd\u662f\u5145\u8981\u7684\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u8fd8\u80fd\u53d1\u73b0\uff1a

\u4f8b\u5982\uff1a\\(M_5 = \\overline{X} + Y + \\overline{Z} = \\overline{ X\\overline{Y}Z } = \\overline{m}_5\\)

\u5173\u4e8e\u8fd9\u4e2a\u53d1\u73b0\u7684\u66f4\u591a\u7684\u4f8b\u5b50\u548c\u8bf4\u660e\uff0c\u53ef\u4ee5\u770b\u4e0b\u9762\u7684\u7b2c\u4e00\u4e2a\u7ec3\u4e60\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ec3\u4e60","title":"\u7ec3\u4e60","text":"

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u4e00\u4e9b\u4f8b\u5b50\u6765\u8fdb\u4e00\u6b65\u5f3a\u5316\u8fd9\u4e9b\u7406\u89e3\uff0c\u5e76\u4e14\u6316\u6398\u4e00\u4e9b\u795e\u5947\u7684\u7279\u6027\u3002

\u9898\u9762\u7b54\u6848

\u8bf7\u5206\u522b\u5199\u51fa\u5982\u4e0b\u771f\u503c\u8868\u4e2d \\(F\\) \u548c \\(\\overline{F}\\) \u7684 SOM \u548c POM\u3002

\u7b54\u6848\uff1a \\begin{array}{l} \\overline{F}(X,Y,Z) & = \\sum m(1,3,4,6) \\\\ & = \\overline{X}\\,\\overline{Y}Z + \\overline{X}YZ + X\\overline{Y}\\,\\overline{Z} + XY\\overline{Z} \\\\ & = \\prod M(0,2,5,7) \\\\ & = (X+Y+Z)(X+\\overline{Y}+Z)(\\overline{X}+Y+\\overline{Z})(\\overline{X}+\\overline{Y}+\\overline{Z}) \\end{array} \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u4e00\u4ef6\u5f88\u6709\u610f\u601d\u7684\u4e8b\u60c5\uff0c\\(F\\) \u7684 SOM \u7684\u4e0b\u6807\u4e0e \\(\\overline{F}\\) \u7684 POM \u7684\u4e0b\u6807\u662f\u4e00\u6837\u7684\uff1b\u5f53\u7136\u5bf9\u4e8e \\(F\\) \u7684 POM \u548c \\(\\overline{F}\\) \u7684 SOM \u4e5f\u662f\u4e00\u6837\u7684\u3002\u8fd9\u53c8\u5370\u8bc1\u4e86\u5bf9\u79f0\u6027\u3002

\u4e4b\u540e\u7684\u7ec3\u4e60\u7b49\u6211\u505a\u4e86\u518d\u6dfb\u52a0x \u5982\u679c\u505a\u4e86\u7684\u8bddx \ud83d\ude0b

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","title":"\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","text":"

\u5f15\u5165

\u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u6807\u51c6\u5f62\u5f0f\u6765\u5f97\u5230\u5bf9\u5e94\u7684\u7535\u8def\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u60c5\u51b5\u4e2d\uff0c\u8fd9\u6837\u505a\u4f1a\u5bfc\u81f4\u6210\u672c\u8fc7\u9ad8\u4ee5\u53ca\u7535\u8def\u590d\u6742\uff08\u56e0\u4e3a\u95e8\u592a\u591a\u4e86\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5bf9\u7535\u8def\u8fdb\u884c\u4f18\u5316\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u4ecb\u7ecd\u901a\u8fc7 \u5361\u8bfa\u56fe(Karnaugh map) \u6765\u4f18\u5316\u903b\u8f91\u7535\u8def\u7684\u65b9\u6cd5\u3002

\u4e0d\u8fc7\u518d\u5f00\u59cb\u201c\u4f18\u5316\u201d\u7684\u8bdd\u9898\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4ec0\u4e48\u662f\u201c\u4f18\u201d\uff0c\u4e5f\u5c31\u662f\u7ed9\u51fa\u4e00\u4e2a\u7535\u8def\u6210\u672c\u7684\u8861\u91cf\u4f9d\u636e\uff0c\u5373 \u6210\u672c\u6807\u51c6(cost criteria)\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6210\u672c\u6807\u51c6","title":"\u6210\u672c\u6807\u51c6","text":"

\u5728\u6210\u672c\u6807\u51c6\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u7684\u4e3b\u8981\u6709\u4e09\u79cd\u6807\u51c6\uff0c\u5206\u522b\u662f\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","title":"\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","text":"

\u5f88\u76f4\u767d\uff0c\u5c31\u662f\u6309\u7167\u8868\u8fbe\u5f0f\u4e2d\u6709\u591a\u5c11\u5b57\u9762\u91cf\u6765\u8ba1\u7b97\uff0c\u4f8b\u5982\uff1a

\u53ef\u4ee5\u60f3\u8c61\uff0c\u867d\u7136\u8fd9\u79cd\u8ba1\u7b97\u65b9\u6cd5\u975e\u5e38\u7684\u7b80\u5355\uff0c\u4f46\u662f\u611f\u89c9\u4e0d\u592a\u9760\u8c31\u3002\u6bd4\u5982\uff0c\u540e\u9762\u4e24\u4e2a\u4f8b\u5b50\uff0c\u867d\u7136\u4ed6\u4eec\u7684 literal cost \u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\u663e\u7136\u5f00\u9500\u4e0d\u592a\u4e00\u6837\uff08\u56e0\u4e3a\u4e00\u4e2a\u662f 3+3 \u4e00\u4e2a\u662f 2+2+2\uff09\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u5408\u9002\u7684\u8ba1\u7b97\u65b9\u6cd5\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u95e8\u8f93\u5165\u8ba1","title":"\u6309\u95e8\u8f93\u5165\u8ba1","text":"

\u6309\u7167\u95e8\u8f93\u5165\u8ba1\u5c31\u662f\u6309\u7167\u903b\u8f91\u95e8\u8f93\u5165\u5f15\u811a\u7684\u603b\u4e2a\u6570\u6765\u8ba1\u7b97\uff0c\u8fd9\u91cc\u7684\u8f93\u5165\u5e76\u4e0d\u4ec5\u4ec5\u662f\u76f4\u63a5\u6765\u81ea\u4e8e\u5b57\u9762\u91cf\u8f93\u5165\u7684\u90a3\u4e9b\u5f15\u811a\uff0c\u4e5f\u5305\u62ec\u5b57\u9762\u91cf\u505a\u8fd0\u7b97\u540e\u5f97\u5230\u7684\u7ed3\u679c\u4f5c\u4e3a\u8f93\u5165\u4f20\u5165\u4e0b\u4e00\u7ea7\u903b\u8f91\u95e8\u7684\u5f15\u811a\u3002

\u6ce8\u610f

\u867d\u7136\u975e\u95e8\u4e5f\u662f\u95e8\uff0c\u4f46\u662f\u6211\u4eec\u901a\u5e38\u4e0d\u628a\u975e\u95e8\u76f4\u63a5\u8ba1\u5165 gate-input cost\uff0c\u6240\u4ee5\u63a5\u4e0b\u6765\u63d0\u5230\u7684\u201c\u8f93\u5165\u5f15\u811a\u201d\u9ed8\u8ba4\u662f\u4e0d\u5305\u542b\u975e\u95e8\u7684\u8f93\u5165\u5f15\u811a\u7684\u3002

\u4f8b\u5982\u8fd9\u5f20\u5bf9\u5e94\u8868\u8fbe\u5f0f \\(F = A+BC+\\overline{B}\\,\\overline{C}\\) \u7684\u56fe\u4e2d\uff1a

\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u4e00\u5171\u6709 5 + 2 = 7 \u4e2a\u8f93\u5165\u5f15\u811a\uff0c\u4ee5\u53ca 2 \u4e2a\u975e\u95e8\u8f93\u5165\u5f15\u811a\u3002

\u4ece\u8868\u8fbe\u5f0f\u6765\u770b\uff0c\u5b83\u53ef\u4ee5\u770b\u4f5c\u662f\u6bcf\u4e00\u5c42\u8fd0\u7b97\u7684\u53c2\u6570\u6570\u91cf\u6c42\u548c\uff0c\u4e0d\u8fc7\u6211\u4eec\u5ffd\u7565\u975e\u95e8\u3002

\u4f8b\u5982\uff0c\u5f0f\u5b50 \\(F=AB+\\overline{B}C+C\\overline{D}\\) \u4e2d\uff0c\u6700\u9876\u5c42\u7684\u8fd0\u7b97\u662f\u4e00\u4e2a\u4e09\u8f93\u5165\u6216\u8fd0\u7b97\uff0c\u6240\u4ee5\u6709 3 \u4e2a\u8f93\u5165\uff1b\u63a5\u4e0b\u6765\u6709\u4e09\u4e2a\u4e8c\u8f93\u5165\u4e0e\u8fd0\u7b97\uff0c\u6240\u4ee5\u5404\u8ba1 2 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171 2 * 3 = 6 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171\u662f 9 \u4e2a\u8f93\u5165\u3002

\u5f53\u7136\uff0c\u5b9e\u9645\u4e0a\u4ece\u5e95\u5c42\u5f80\u4e0a\u6570\u66f4\u65b9\u4fbf\uff1a

\u603b\u4e4b\uff0c\u5c31\u662f\u7c7b\u4f3c\u4e8e\u5728\u505a\u7b97\u5f0f\u5316\u7b80\uff0c\u6bcf\u505a\u4e00\u6b21\u5316\u7b80\u90fd\u9700\u8981\u8ba1\u5165\u4e00\u6b21\u64cd\u4f5c\u6570\u7684\u6570\u91cf\u3002

\u800c\u5bf9\u4e8e gate-input cost with NOTs\uff0c\u53ea\u8981\u518d\u989d\u5916\u8ba1\u5165\u975e\u95e8\u7684\u8f93\u5165\u5373\u53ef\u3002\u4f8b\u5982\u4e0a\u9762\u90a3\u4e2a\u5f0f\u5b50\uff1a

\u6ce8\u610f

\u5982\u679c\u51fa\u73b0\u4e86\u6bd4\u5982 \\(F=\\overline{A}B+\\overline{A}C\\) \u7684\u60c5\u51b5\uff0c\u975e\u95e8\u53ea\u9700\u8981\u8ba1 1 \u4e2a\uff0c\u56e0\u4e3a\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u628a\u975e\u4e86\u4ee5\u540e\u7684\u4e1c\u897f\u5f53\u4f5c\u4e86\u4e00\u4e2a\u5b57\u9762\u91cf\u518d\u7528\u7684\uff0c\u5728\u5b9e\u9645\u7535\u8def\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u975e\u4e00\u6b21\uff0c\u4e4b\u540e\u53ea\u9700\u8981\u628a\u8fd9\u4e2a\u8f93\u51fa\u503c\u62ff\u8d70\u53bb\u7528\u5c31\u884c\u3002

\u63a5\u4e0b\u6765\u653e\u51e0\u9053\u4f8b\u9898\u3002

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=ABC+\\overline{A}\\,\\overline{B}\\,\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=(A+\\overline{C})(\\overline{B}+C)(\\overline{A}+B)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=(A+\\overline{B})(A+D)(B+C+\\overline{D})(\\overline{B}+\\overline{C}+D)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=BD+A\\overline{B}C+A\\overline{B}\\,\\overline{D}+AB\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

\u9898\u9762\u7b54\u6848

\u8ba1\u7b97 \\(F=\\overline{A}\\,\\overline{C}(B+\\overline{D})+AC(B+\\overline{D})\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

\u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u8fd0\u7b97\uff0c\u4ee5 \\(\\overline{A}\\,\\overline{C}(B+\\overline{D})\\) \u4e3a\u4f8b\uff0c\u81ea\u9876\u5411\u4e0b\u662f\uff1a\u24f5\u4e09\u8f93\u5165\u4e0e\u95e8\uff0c\u24f6\u4e8c\u8f93\u5165\u6216\u95e8\uff1b\u6240\u4ee5\u5e94\u8be5\u662f \\(1^{\\overline{A}} + 1^{\\overline{C}} + 1^{B} + 1^{\\overline{D}} + 1^{B+\\overline{D}} + 1^{\\overline{A}\\,\\overline{C}(B+\\overline{D})}\\)\uff0c\u5373 6\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe","title":"\u5361\u8bfa\u56fe","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u601d\u60f3","title":"\u5361\u8bfa\u56fe\u7684\u601d\u60f3","text":"

\u4f18\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u6700\u76f4\u767d\u7684\u601d\u60f3\u5c31\u662f\u51cf\u5c11\u95e8\u7535\u8def\uff0c\u4e5f\u5c31\u662f\u53bb\u51cf\u5c11 gate-input cost\u3002\u90a3\u4e48\u8981\u5982\u4f55\u505a\u5462\uff1f

\u6211\u4eec\u8003\u8651\u5230\u903b\u8f91\u8fd0\u7b97\u5f8b\u4e2d\u7684\u8fd9\u4e2a\u63a8\u5e7f\uff1a\\(XY+X\\overline{Y}=X(Y+\\overline{Y})=X\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u4e24\u4e2a\u6700\u5c0f\u9879\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u90a3\u4e48\u4ed6\u4eec\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u5f53\u7136\uff0c\u5bf9\u79f0\u7684\uff0c\u6839\u636e\\((X+\\overline{Y})(X+Y)=X+Y\\overline{Y}=X\\)\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u7ed3\u8bba\u5bf9\u6700\u5927\u9879\u4e5f\u6210\u7acb\u3002

\u662f\u4e0d\u662f\u89c9\u5f97\u201c\u53ea\u5dee\u4e00\u4e2a\u201d\u5f88\u8033\u719f\uff1f\u662f\u7684\uff01\u6211\u4eec\u60f3\u5230\u4e86\u683c\u96f7\u7801\uff01\u5047\u8bbe\u6211\u4eec\u5c06 n \u4e2a\u5b57\u9762\u91cf\u6392\u5217\u6210\u4e00\u4e2a n bits \u7684\u5411\u91cf\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u6309\u7167\u683c\u96f7\u7801\u6392\u5e8f\uff0c\u4e00\u65e6\u53d1\u73b0\u6709\u76f8\u90bb\u7684\u6700\u5c0f\u9879\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5408\u5e76\u4ed6\u4eec\u3002

\u4f46\u8fd9\u8fd8\u4e0d\u591f\u5145\u5206\uff0c\u4f8b\u5982\u5728\u4e00\u4e2a\u6709\u4e09\u4e2a\u5b57\u9762\u91cf\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e2d\uff0c\u201c\u4e0e\u4e00\u4e2a\u8868\u8fbe\u5f0f\u76f8\u90bb\u201d\u7684\u8868\u8fbe\u5f0f\u5176\u5b9e\u6709\u4e09\u4e2a\uff0c\u4f46\u662f\u7528\u7ebf\u6027\u7684\u8868\u793a\u65b9\u6cd5\u53c8\u6ca1\u6cd5\u5f88\u597d\u7684\u8868\u793a\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u60f3\u5230\u5c06\u5b83\u5199\u6210\u4e00\u5f20\u4e8c\u7ef4\u7684\u8868\uff0c\u5373\u5c06\u5b57\u9762\u91cf\u62c6\u6210\u4e24\u7ec4 bit \u5411\u91cf\uff0c\u5404\u81ea\u6309\u7167\u683c\u96f7\u7801\u6392\u5217\uff0c\u5f62\u6210\u4e00\u5f20\u4e8c\u7ef4\u8868\uff0c\u8fd9\u5c31\u662f \u5361\u8bfa\u56fe(Karnaugh Map)\uff0c\u4e5f\u53eb K-map\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4efb\u610f\u4e24\u4e2a\u76f8\u90bb\u7684\u683c\u5b50\u90fd\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u800c\u4e14\u662f\u5145\u8981\u7684\uff0c\u5373\u6240\u6709\u201c\u76f8\u90bb\u201d\u90fd\u53ef\u4ee5\u5728\u8fd9\u5f20\u56fe\u8868\u73b0\u51fa\u6765\u3002

\u8bf4\u660e

\u7531\u4e8e\u683c\u96f7\u7801\u7684\u6027\u8d28\u662f\u4e00\u4e2a\u5728\u201c\u6ee1\u201d\u72b6\u6001\u4e0b \u73af\u72b6\u6210\u7acb \u7684\u6027\u8d28\uff0c\u6240\u4ee5\u5361\u8bfa\u56fe\u4e5f\u9700\u8981\u7528\u201c\u73af\u72b6\u201d\u7684\u601d\u8def\u53bb\u770b\uff0c\u8fd9\u91cc\u53ef\u4ee5\u8054\u60f3\u4e00\u4e0b\u884c\u5217\u5f0f\u7684\u5f62\u8c61\u5316\u8ba1\u7b97\u65b9\u6cd5\uff0c\u5c06\u8fd9\u5f20\u8868\u5f53\u4f5c\u4e00\u4e2a\u65e0\u9650\u6269\u5c55\u7684\u8868\u683c\u3002

\u601d\u8003\u9898

\u5728\u8fd9\u91cc\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u7740\u611f\u53d7\u4e00\u4e0b\u4e24\u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\u4e0b\uff0c\u5373\u5b9e\u9645\u4e0a\u201c\u76f8\u90bb\u4e5f\u53ea\u67092\u4e2a\u201d\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u3002\u4e8b\u5b9e\u4e0a\uff0c\u4e09\u4e2a\u5b57\u9762\u91cf\u4e5f\u53ea\u6709\u201c3\u4e2a\u76f8\u90bb\u201d\uff0c\u4f46\u662f\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u7528\u660e\u660e\u6709\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u6765\u5b9e\u73b0\u5462\uff1f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","title":"\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","text":"

\u7136\u800c\uff0c\u4e0a\u9762\u7684\u8bf4\u6cd5\u5176\u5b9e\u5f88\u7275\u5f3a\u3002\u56e0\u4e3a\u4e00\u5f20\u4e8c\u7ef4\u8868\u4e2d\uff0c\u80fd\u4e0e\u4e00\u4e2a\u5143\u7d20\u76f8\u90bb\u7684\u5143\u7d20\u6700\u591a\u53ea\u6709\u56db\u4e2a\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u6491\u6b7b\u4e5f\u53ea\u80fd\u7528\u5361\u8bfa\u56fe\u8868\u793a 4 \u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\uff08\u5f53\u7136\u66f4\u591a\u7684\u53d8\u91cf\u4e5f\u6709\u5904\u7406\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u591a\u5c11\u6709\u70b9\u9ebb\u70e6\u4e86\uff09\u3002\u56e0\u6b64\uff0c\u5b9e\u9645\u4e0a\u5361\u8bfa\u56fe\u53ea\u80fd\u7528\u4e8e\u5316\u7b80\u975e\u5e38\u7b80\u5355\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u3002

cm \u8001\u5e08\u5982\u662f\u8bf4

\u66f4\u591a\u60c5\u51b5\u4e0b\uff0c\u5361\u8bfa\u56fe\u5b9e\u9645\u4e0a\u53ea\u9002\u5408\u6211\u4eec\u505a\u9898\u3002\u4f46\u662f\u5176\u601d\u8def\u662f\u975e\u5e38\u6709\u610f\u601d\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","title":"\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","text":"

\u8fd9\u91cc\u6211\u4eec\u4ee5 3 \u5143\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e3a\u4f8b\uff0c2 \u5143\u548c 4 \u5143\u7684\u601d\u8def\u662f\u4e00\u6837\u7684\u3002

\u540c\u6837\uff0c\u4e3e\u4e00\u4e2a \ud83c\udf30 \uff1a\\(F(X,Y,Z) = \\sum m(2,3,4,5)\\)

\u9996\u5148\u6211\u4eec\u6309\u7167\u6bd4\u7279\u5411\u91cf\u7684\u5f62\u5f0f\u628a\u6700\u5c0f\u9879\u5199\u51fa\u6765\uff1a

\u503c X Y Z 2 0 1 0 3 0 1 1 4 1 0 0 5 1 0 1

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u7ed8\u5236\u5361\u8bfa\u56fe\uff0c\u6211\u4eec\u5c06 bit \u5411\u91cf [x, y, z] \u62c6\u6210 [x] \u548c [y, z] \u505a\u5982\u4e0b\u8868\u683c\uff1a

yz = 00 yz = 01 yz = 11 yz = 10 x = 0 0 0 1 1 x = 1 1 1 0 0

\u53e6\u5916\u4e00\u79cd\u6807\u6ce8\u8868\u683c\u7684\u65b9\u5f0f\u662f\u8fd9\u6837\uff0c\u5b83\u53ef\u80fd\u66f4\u6e05\u6670\uff1a

\u4f46\u662f\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u683c\u96f7\u7801\u3002

4 \u5143\u5b57\u9762\u91cf\u7684\u5361\u8bfa\u56fe\u5219\u957f\u8fd9\u4e2a\u6837\u5b50\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","title":"\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","text":"

\u5df2\u7ecf\u8bb2\u4e86\u601d\u60f3\u548c\u5361\u8bfa\u56fe\u7684\u7ed3\u6784\uff0c\u90a3\u4e48\u5230\u5e95\u8981\u5982\u4f55\u5229\u7528\u5361\u8bfa\u56fe\u8fdb\u884c\u4f18\u5316\u5462\uff1f

\u8ba9\u6211\u4eec\u56de\u987e\u4f18\u5316\u7684\u65b9\u6cd5\uff0c\u5373\u5408\u5e76\u76f8\u90bb\u4e24\u9879\uff0c\u4e5f\u5c31\u662f\u627e\u5230\u5361\u8bfa\u56fe\u4e2d\u76f8\u90bb\u7684\u90e8\u5206\u3002\u4f46\u662f\u8fd9\u4e0d\u591f\uff0c\u6211\u4eec\u8fd8\u8981\u601d\u8003\u662f\u4e0d\u662f\u80fd\u5408\u5e76\u5df2\u7ecf\u76f8\u90bb\u7684\u90e8\u5206\uff0c\u6bd4\u5982\uff1a

\u6211\u4eec\u901a\u8fc7\u5361\u8bfa\u56fe\uff0c\u9996\u5148\u5408\u5e76\u4e86 \\(WXYZ\\) \u548c \\(WXY\\overline{Z}\\)\uff0c\\(WX\\overline{Y}Z\\) \u548c \\(WX\\overline{Y}\\,\\overline{Z}\\)\uff0c\u5206\u522b\u5f97\u5230\u4e86 \\(WXY\\) \u548c \\(WX\\overline{Y}\\)\uff0c\u663e\u7136\u8fd9\u4e24\u4e2a\u4e1c\u897f\u4e5f\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u800c\u5728\u5361\u8bfa\u56fe\u4e0a\uff0c\u8fd9\u8868\u73b0\u4e3a\u4e24\u4e2a\u76f8\u90bb\u7684 1*2 \u7684\u77e9\u5f62\u3002

\u603b\u800c\u8a00\u4e4b\uff0c\u8fd9\u79cd\u8fed\u4ee3\u5408\u5e76\u7684\u884c\u4e3a\u6700\u7ec8\u53ef\u4ee5\u5212\u5f52\u4e3a\u8fd9\u6837\u4e00\u4e2a\u884c\u4e3a\uff1a

\u6211\u4eec\u5728\u5361\u8bfa\u56fe\u4e2d\u5bfb\u627e\u82e5\u5e72 \u6781\u5927 \u7684 2 \u5e42\u77e9\u5f62\uff0c\u5373\u5143\u7d20\u4e2a\u6570\u4e3a 2 \u7684\u5e42\u6b21\uff08\u81ea\u7136\u8fb9\u957f\u4e5f\u90fd\u4e3a 2 \u7684\u5e42\u6b21\uff09\u7684\u77e9\u5f62\uff0c\u800c\u6bcf\u4e00\u4e2a\u77e9\u5f62\u6240\u8986\u76d6\u7684\u5143\u7d20\u90fd\u5e94\u8be5\u662f \u6700\u5c0f\u9879/\u6700\u5927\u9879\uff08\u4e00\u822c\u90fd\u662f\u505a\u6700\u5c0f\u9879\uff09\u3002\u9700\u8981\u6ce8\u610f\uff0c\u201c\u5faa\u73af\u201d\u7684\u6027\u8d28\u4ecd\u7136\u6ee1\u8db3\uff0c\u5373\u7b2c\u4e00\u5217\u548c\u6700\u540e\u4e00\u5217\uff0c\u7b2c\u4e00\u884c\u548c\u6700\u540e\u4e00\u884c\u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u76f8\u90bb\u7684\u3002

\u4f8b\u5982\uff1a

\u4f8b\u5982\uff1a

\u518d\u4f8b\u5982\uff1a

\u90fd\u662f\u5408\u7406\u7684\u5361\u8bfa\u56fe\u5212\u5206\u3002

\u5728\u5f97\u5230\u8fd9\u4e9b\u5212\u5206\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5c06\u8fd9\u4e9b\u9879\u62ce\u51fa\u6765\uff0c\u5199\u51fa\u5b83\u4eec\u7684\u8868\u8fbe\u5f0f\u3002

\u800c\u81f3\u4e8e\u5982\u4f55\u62ce\u51fa\u6765\u2014\u2014\u4e0d\u96be\u53d1\u73b0\uff0c\u5982\u679c\u4e00\u4e2a\u65b9\u6846\u4e2d\uff0c\u67d0\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u503c\u65e2\u53ef\u4ee5\u662f 0\uff0c\u53c8\u53ef\u4ee5\u662f 1 \u65f6\uff08\u8fd9\u91cc\u6307\u7684\u662f\u8f93\u5165\u7684\u503c\uff0c\u5e76\u975e\u8f93\u51fa\u7ed3\u679c\uff09\uff0c\u5728\u8fd9\u4e2a\u4f18\u5316\u9879\u7684\u7ed3\u679c\u4e2d\u5c31\u53ef\u4ee5\u4e0d\u7528\u5199\u51fa\u8fd9\u4e2a\u5b57\u9762\u91cf\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u8fd9\u4e2a\u5b57\u9762\u91cf \\(X\\) \u7684\u503c\u90fd\u662f 0\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(\\overline{X}\\)\uff0c\u5982\u679c\u90fd\u662f 1\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(X\\)\u3002

\u9898\u9762\u7b54\u6848

\u5229\u7528\u5361\u8bfa\u56fe\u4f18\u5316 \\(F(X,Y,Z) = \\sum m(0,1,2,4,6,7)\\) \u7684\u7ed3\u679c\u3002

\u753b\u51fa\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u5bf9\u5e94\u7684\u5361\u8bfa\u56fe\uff1a

\u7136\u540e\u5212\u51fa\u5176\u4e2d\u7684\u6781\u5927\u6700\u5c0f\u9879\u4f18\u5316\u9879\uff1a

\u5199\u51fa\u6765\u662f\uff1a

\u7efc\u4e0a\u6240\u8ff0\uff0c\u4f18\u5316\u7ed3\u679c\u662f \\(F = \\overline{X}\\,\\overline{Y} + \\overline{Z} + XY\\)

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e0d\u5b9a\u9879","title":"\u4e0d\u5b9a\u9879","text":"

\u63a8\u8350\u9605\u8bfb

https://www.geeksforgeeks.org/dont-care-x-conditions-in-k-maps/

\u4e0d\u5b9a\u9879(Don't Cares) \u6307\u7684\u662f\u9700\u8981\u5316\u7b80\u7684\u903b\u8f91\u51fd\u6570\u4e2d\uff0c\u6ca1\u6709\u7ed9\u51fa\u5b9a\u4e49\u7684\u51e0\u9879\uff0c\u5b83\u4eec\u53ef\u80fd\u662f\uff1a

\u5bf9\u4e8e\u8fd9\u79cd\u9879\uff0c\u5728\u5361\u8bfa\u56fe\u4e2d\u7528 X \u6765\u8868\u793a\uff0c\u5728\u6700\u5c0f\u9879\u4e4b\u548c\u4e2d\u7528 \\(\\sum d(...)\\) \u8868\u793a\u3002\u6211\u4eec\u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\u5b83\u4eec\u7684\u8f93\u51fa\uff0c\u6b64\u65f6\u5c31\u53ef\u4ee5\u5229\u7528\u8fd9\u4e9b\u9879\u6765\u65b9\u4fbf\u6211\u4eec\u7684\u4f18\u5316\u2014\u2014\u5f53\u6211\u4eec\u753b\u51fa\u6765\u7684\u6781\u5927\u77e9\u9635\u8d8a\u5927\uff0c\u6210\u672c\u5c31\u8d8a\u4f4e\u3002

\u4f8b\u5982\uff0c\u6211\u4eec\u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\uff0c\u5f53\u8f93\u5165\u7684 BCD \u7801\u8868\u793a\u7684\u6570\u5b57\u5927\u4e8e\u7b49\u4e8e 5 \u65f6\u8fd4\u56de 1\uff0c\u5219\u5b83\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u7684\u5f62\u5f0f\u6765\u4f18\u5316\uff1a

\u6839\u636e\u7ed3\u679c\uff0c\u5199\u51fa\u4f18\u5316\u540e\u7684\u8868\u8fbe\u5f0f\u4e3a\uff1a\\(F(W,X,Y,Z) = W + XY + XZ\\)\u3002

\u7531\u5361\u8bfa\u56fe\u5f97\u5230\u4e58\u79ef\u7ed3\u679c

\u5c3d\u7ba1\u6211\u4eec\u4e0d\u505c\u5f3a\u8c03 \u4e0e \u548c \u6216 \u662f\u5bf9\u79f0\u7684\uff0c\u4f46\u662f\u4ecd\u7136\u6709\u5f88\u591a\u64cd\u4f5c\u662f\u9274\u4e8e\u6211\u4eec\u5bf9 1 \u7684\u504f\u7231\u624d\u4f1a\u987a\u624b\u7684\uff08\u4f60\u4f1a\u53d1\u73b0\uff0c\u628a\u4e58\u9664\u6362\u6210\u6211\u4eec\u5b8c\u5168\u4e0d\u719f\u6089\u7684\u7b26\u53f7\uff0c\u4f60\u751a\u81f3\u53ef\u80fd\u65e0\u4ece\u4e0b\u624b\uff09\u3002

\u6240\u4ee5\uff0c\u5728\u5361\u8bfa\u56fe\u7684\u95ee\u9898\u4e2d\uff0c\u5982\u679c\u8981\u5229\u7528\u5361\u8bfa\u56fe\u5f97\u5230 \\(F\\) \u4f18\u5316\u540e\u7684\u4e58\u79ef\u5f62\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u6c42 \\(\\overline{F}\\) \u4f18\u5316\u540e\u7684\u548c\u5f62\u5f0f\uff0c\u7136\u540e\u518d\u5bf9\u5176\u53d6\u53cd\u8fc7\uff0c\u5229\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u53cd\u8f6c K-map \u4e2d\u6240\u6709\u7684 0 \u548c 1\uff0c\u7136\u540e\u7740\u773c\u4e8e SOM \u8fdb\u884c\u4f18\u5316\uff0c\u6700\u540e\u518d\u5bf9\u7ed3\u679c\u53d6\u53cd\uff0c\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8574\u542b\u9879\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","title":"\u8574\u542b\u9879\u3001\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","text":"

\u8574\u542b\u9879(implicant) \u5206\u4e3a \u4e3b\u8574\u542b\u9879(prime implicant) \u548c \u57fa\u672c\u4e3b\u8574\u542b\u9879(essential prime implicant)\u3002

\u5982\u56fe\uff0c\u5de6\u4fa7\u7684\u4e24\u4e2a\u4e3b\u8574\u542b\u9879\u56e0\u4e3a\u5305\u62ec\u4e86 \u24f5 \u548c \u24f6 \u8fd9\u4e24\u4e2a\u552f\u4e00\u7684 1\uff0c\u6240\u4ee5\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\uff1b

\u800c\u53f3\u4fa7\u7684\u8574\u542b\u9879\u5219\u662f\u4e00\u4e2a\u5197\u4f59\u7684\u8574\u542b\u9879\uff1b

\u6ce8\u610f

\u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\uff0c\u4e3b\u8574\u542b\u9879\u4e00\u5b9a\u5b58\u5728\uff0c\u4f46\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\u4e0d\u4e00\u5b9a\u5b58\u5728\u3002

\ud83e\udd14

\u6b63\u56e0\u4e3a\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u5b58\u5728\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4efb\u610f\u51fd\u6570\uff0c\u4f18\u5316\u7684\u591a\u89e3\u7ed3\u679c\u603b\u6709\u4e00\u90e8\u5206\u662f\u4e0d\u53d8\u7684\uff08\u53ea\u4e0d\u8fc7\u6ca1\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u65f6\u5019\u8fd9\u90e8\u5206\u4e3a\u96f6\uff09\u3002

\u9ea6\u514b\u62c9\u594e\u56e0\u7b97\u6cd5

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ecf\u5178\u7ec4\u5408\u7535\u8def","title":"\u7ecf\u5178\u7ec4\u5408\u7535\u8def","text":"

\u5f15\u5165

\u5728\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u73b0\u6210\u7684\u7ec4\u5408\u7535\u8def\u80fd\u591f\u4f7f\u7528\uff0c\u6765\u65b9\u4fbf\u6211\u4eec\u8bbe\u8ba1\u3002

\u4e0d\u8fc7\u6211\u6ca1\u6709\u5168\u5199\u51fa\u6765\uff1b

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e09\u6001\u95e8","title":"\u4e09\u6001\u95e8","text":"

\u4e09\u6001\u7f13\u51b2\u5668(3-State Buffer)

\u9664\u4e86\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u5b83\u8fd8\u6709\u4e00\u4e2a \u4f7f\u80fd\u7aef(enable) \u6765\u63a7\u5236\u8f93\u51fa\u3002

\u6240\u8c13\u7684\u4e09\u6001\u6307\u7684\u662f\uff1a

\u4f5c\u7528

\u6211\u4eec\u53ef\u4ee5\u7528\u4e09\u6001\u95e8\u6765\u89e3\u51b3\u591a\u8def\u8f93\u51fa\u4e92\u8054\u7684\u95ee\u9898\u3002\u6b63\u5982\u5728 ICS \u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\uff0c\u53ef\u4ee5\u8ba9\u591a\u4e2a\u8f93\u5165\u5728\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u88ab\u8f93\u51fa\u5230\u603b\u7ebf\u4e2d\u2014\u2014\u5b9e\u73b0\u7684\u624b\u6bb5\u5c31\u662f\u901a\u8fc7\u7535\u8def\u6765\u4f7f\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u4f7f\u80fd\u7aef\u4e3a 1\u3002

\u5728\u6570\u5b57\u903b\u8f91\u8bbe\u8ba1\u4e2d\uff0c\u4e09\u6001\u95e8\u5b9e\u73b0\u603b\u7ebf\u7684\u76f8\u5173\u77e5\u8bc6\u5c06\u5728 \u7b2c\u516d\u7ae0 \u63d0\u5230\u3002

\u788e\u788e\u5ff5

\u6240\u4ee5\u4ec0\u4e48\u662f\u300c\u9ad8\u963b\u6001\u300d\uff1f\u5b83\u8981\u5982\u4f55\u7406\u89e3\uff1f\u4ee5\u4e0b\u662f\u6211\u6839\u636e\u5b83\u7684\u5e94\u7528\u53cd\u63a8\u5f97\u5230\u7684\u7ed3\u8bba\uff1a

\u9ad8\u963b\u6001\u540c\u5b83\u5b57\u9762\u610f\u601d\u76f8\u540c\uff0c\u6211\u4eec\u53ef\u4ee5\u5f53\u5b83\u6b64\u65f6\u662f\u65ad\u8def\uff0c\u800c\u9ad8\u963b\u6001\u91cd\u70b9\u8981\u4e0e\u4f4e\u7535\u5e73\u505a\u533a\u5206\uff1a\u5982\u679c\u73b0\u5728\u5b58\u5728\u4e00\u4e2a\u201c\u5bfc\u7ebf\u201d\uff0c\u5b83\u6709\u4e09\u4e2a\u7aef\uff0c\u5176\u4e2d\u6211\u4eec\u4eba\u4e3a\u5730\u8ba4\u4e3a\u5176\u4e2d\u4e24\u4e2a\u662f\u8f93\u5165\uff0c\u5206\u522b\u547d\u540d\u4e3a a \u548c b\uff0c\u53e6\u5916\u4e00\u4e2a\u8ba4\u4e3a\u662f\u8f93\u51fa\uff0c\u547d\u540d\u4e3a c\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u662f\u4e0d\u5141\u8bb8 a \u548c b \u4e00\u4e2a\u4e3a\u9ad8\u7535\u5e73\uff0c\u4e00\u4e2a\u4e3a\u4f4e\u7535\u5e73\u7684\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd9\u91cc\u4eba\u4e3a\u5b9a\u4e49\u7684\u8f93\u5165\u8f93\u51fa\u5e76\u4e0d\u5f71\u54cd\u7535\u6d41\u7684\u6d41\u52a8\u65b9\u5411\uff0c\u6240\u4ee5\u5f53 a \u4e3a 1\uff0cb \u4e3a 0 \u65f6\uff0c\u7535\u6d41\u5f88\u53ef\u80fd\u4f1a\u53d8\u6210\u4ece a \u6d41\u5411 b\uff0c\u7535\u6e90\u53ef\u80fd\u76f4\u63a5\u63a5\u5730\uff0c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u770b\u5230\u7684\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u6216\u95e8\u6765\u5b9e\u73b0\u8fd9\u4e2a\u903b\u8f91\u884c\u4e3a\uff08\u6362\u8a00\u4e4b\uff0c\u8fd9\u79cd\u201c\u4e09\u7aef\u201d\u7535\u8def\u662f\u76f8\u5f53\u5371\u9669\u7684\uff0c\u4e0d\u8fc7\u5f53\u6211\u4eec\u4eba\u4e3a\u5b9a\u4e49\u591a\u4e2a\u8f93\u51fa\u65f6\uff0c\u4e00\u822c\u4f5c\u4e3a\u63a5\u6536\u7aef\u7684\u7535\u8def\u90fd\u6709\u4e8c\u6781\u7ba1\u9632\u6b62\u9006\u6d41\uff0c\u6240\u4ee5\u5355\u8f93\u5165\u591a\u8f93\u51fa\u662f\u5f88\u5e38\u89c1\u7684\uff09\u3002

\u4ece\u66f4\u62bd\u8c61\u5730\u89d2\u5ea6\u6765\u7406\u89e3\uff0c\u4e00\u6839\u5bfc\u7ebf\u6700\u591a\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\uff0c\u7136\u800c\u6709\u4e24\u4e2a\u8f93\u5165\u4ecb\u5165\uff0c\u6b64\u65f6\u6211\u4eec\u53ea\u6709 0/1 \u4e24\u6001\uff0c\u4e0d\u7ba1\u600e\u4e48\u6837\uff0c\u6211\u4eec\u90fd\u540c\u65f6\u62ff\u5230\u4e86\u6765\u81ea\u4e24\u4e2a\u8f93\u5165\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8e\u53ea\u80fd\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\u7684\u5bfc\u7ebf\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u4fe1\u606f\u51b2\u7a81\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981 MUX \u6765\u9009\u62e9\u6211\u4eec\u9700\u8981\u7684\u5230\u5e95\u662f\u54ea\u4e2a\u4fe1\u606f\uff0c\u7136\u540e\u518d\u7ed9\u5bfc\u7ebf\u3002

\u800c\u4e09\u6001\u95e8\uff0c\u5728\u9ad8\u4f4e\u7535\u5e73\u5916\u5f15\u5165\u4e86\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u975e\u5e38\u5de7\u5999\u5730\u89e3\u51b3\u4e86\u8fd9\u4e2a\u300c\u591a\u8f93\u5165\u300d\u5371\u9669\u7684\u95ee\u9898\uff0c\u5f53\u6211\u4eec\u4e0d\u5e0c\u671b\u8fd9\u4e2a\u6570\u636e\u88ab\u8f93\u5165\u65f6\uff0c\u6211\u4eec\u76f4\u63a5\u628a\u5b83\u65ad\u5f00\uff0c\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u628a\u5f00\u5173\u65ad\u5f00\uff0c\u53ea\u8981\u6211\u4eec\u8ba9\u5bfc\u7ebf\u7684\u82e5\u5e72\u8f93\u5165\u4e2d\u53ea\u6709\u4e00\u4e2a\u4e09\u6001\u95e8\u4e0d\u5728\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u80fd\u591f\u4f18\u96c5\u5730\u5b9e\u73b0\u591a\u8def\u8f93\u51fa\u4e92\u8054\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u590d\u6742\u95e8","title":"\u590d\u6742\u95e8","text":"

\u901a\u8fc7\u4e00\u4e9b\u57fa\u672c\u95e8\u7ec4\u5408\u51fa\u6765\u7684\u95e8\uff0c\u5b83\u4eec\u7684\u8868\u793a\u65b9\u6cd5\u5927\u81f4\u5982\u4e0b\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/","title":"Chap 3 Combinational Logic Design","text":"

\u7ea6 4261 \u4e2a\u5b57 7 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 14 \u5206\u949f

\u5f15\u5165

\u6309\u7167\u529f\u80fd\uff0c\u903b\u8f91\u7535\u8def\u5206\u4e3a\u4e24\u7c7b\uff1a

\u800c\u672c\u7ae0\u5c06\u7740\u773c\u4e8e\u7ec4\u5408\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\u5c06\u5728 \u4e0b\u4e00\u7ae0 \u4ecb\u7ecd\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","title":"\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","text":"

\u8868\u793a\u903b\u8f91\u7684\u65b9\u6cd5

  1. \u771f\u503c\u8868(Truth Table)\uff1b
  2. \u5e03\u5c14\u51fd\u6570(Boolean Function)\uff1b
  3. \u5361\u8bfa\u56fe(Karnaugh Maps)\uff1b
  4. \u65f6\u5e8f\u56fe(Timing Diagram)\uff1b
  5. \u903b\u8f91\u7535\u8def\u56fe(Logic Circuit)\uff1b

\u5176\u4e2d\uff0c\u4e0b\u5212\u7ebf\u7684\u65b9\u6cd5\u5728\u529f\u80fd\u786e\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u5176\u8868\u793a\u662f\u552f\u4e00\u7684\u3002

\u800c\u6211\u4eec\u7684\u8bbe\u8ba1\uff0c\u5c31\u662f\u5728\u6ee1\u8db3\u529f\u80fd\u7684\u524d\u63d0\u4e0b\uff0c\u5c3d\u53ef\u80fd\u4f18\u5316\u548c\u627e\u5230\u6700\u597d\u7684\u8bbe\u8ba1\u3002

\u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u5982\u4e0b\uff1a

  1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
  2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
  3. \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u4ee5\u51cf\u5c11\u6210\u672c(\u6bd4\u5982\u4f7f\u7528\u5361\u8bfa\u56fe)\uff1b
  4. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
  5. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
graph LR;\n\nA[\"\u5b9e\u9645\u95ee\u9898\"] ===> B[\"\u771f\u503c\u8868\"]\n\nB ==>|\"\u5316\u7b80\"| C[\"\u6700\u7b80\u529f\u80fd\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D[\"\u7f51\u8868\"]\n\nB ==>|\"\u53d8\u6362\"| E[\"\u5408\u9002\u7684\u8868\u8fbe\u5f0f\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D
"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5206\u5c42\u8bbe\u8ba1","title":"\u5206\u5c42\u8bbe\u8ba1","text":"

\u5206\u5c42\u8bbe\u8ba1\u5373\u5c06\u590d\u6742\u95ee\u9898\u6a21\u5757\u5316\u5206\u89e3\u4e3a\u82e5\u5e72\u5c42\u6b21\uff0c\u7136\u540e\u9010\u4e2a\u62bd\u8c61\u89e3\u51b3\u3002

\u5176\u8bbe\u8ba1\u65b9\u6cd5\u5206\u4e3a \u81ea\u9876\u5411\u4e0b(Top-Down) \u548c \u81ea\u5e95\u5411\u4e0a(Bottom-Up)\u3002

\u524d\u8005\u4ece\u9700\u6c42\u5f00\u59cb\uff0c\u81ea\u9876\u5411\u4e0b\u5206\u89e3\u529f\u80fd\u8bbe\u8ba1\uff1b\u540e\u8005\u6839\u636e\u73b0\u6709\u7684\u5143\u4ef6\u53bb\u7ec4\u5408\u6210\u76ee\u6807\u529f\u80fd\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u96c6\u6210\u7535\u8def","title":"\u96c6\u6210\u7535\u8def","text":"

\u96c6\u6210\u7535\u8def(integrated circuits) \u53c8\u53eb \u82af\u7247(chip)\uff0c\u5206\u4e3a\u5982\u4e0b\u82e5\u5e72\u7b49\u7ea7\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6280\u672f\u53c2\u6570","title":"\u6280\u672f\u53c2\u6570","text":"

\u95e8\u7684\u5b9e\u73b0\u4e3b\u8981\u901a\u8fc7\u8fd9\u4e9b\u53c2\u6570\u7279\u6027\u6765\u63cf\u8ff0\uff1a

Name Description Fan-in \u4e00\u4e2a\u95e8\u53ef\u7528\u7684\u8f93\u5165 Fan-out \u4e00\u4e2a\u6805\u6781\u8f93\u51fa\u9a71\u52a8\u7684\u6807\u51c6\u8d1f\u8f7d\u6570\u91cf Logic Levels \u88ab\u8ba4\u4e3a\u662f\u9ad8\u4f4e\u7535\u5e73\u7684\u8f93\u5165\u8f93\u51fa\u7535\u538b\u8303\u56f4 Noise Margin \u5bf9\u5916\u754c\u566a\u58f0\u7684\u5bb9\u5fcd\u80fd\u529b(\u5177\u4f53\u6765\u8bf4\u662f\u4e0d\u4f1a\u5bfc\u81f4\u884c\u4e3a\u5f02\u53d8\u7684\u6700\u5927\u566a\u58f0\u538b\u503c) Cost for a gate \u7ee7\u627f\u7535\u8def\u7684\u95e8\u6210\u672c Propagation Delay \u4fe1\u53f7\u6539\u53d8\u540e\u4ece\u8f93\u5165\u5230\u8f93\u51fa\u6240\u9700\u7684\u53d8\u5316\u65f6\u95f4 Power Dissipation \u7535\u6e90\u8f93\u51fa\u80fd\u8017\u548c\u95e8\u7684\u80fd\u8017"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6247\u5165\u6247\u51fa","title":"\u6247\u5165\u6247\u51fa","text":"

\u6247\u5165\u63cf\u8ff0\u4e86\u4e00\u4e2a\u95e8\u80fd\u591f\u63a5\u53d7\u7684\u6700\u591a\u8f93\u5165\u91cf\uff0c\u5982\u4e00\u4e2a\u56db\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6247\u5165\u5c31\u662f 4\uff1b\u800c\u6247\u51fa\u63cf\u8ff0\u7684\u5219\u662f\u4e00\u4e2a\u95e8\u7684\u8f93\u51fa(\u6805\u6781\u8f93\u51fa)\u5728\u4e0d\u964d\u4f4e\u5de5\u4f5c\u6027\u80fd\u7684\u60c5\u51b5\u4e0b\u80fd\u591f\u8d1f\u8f7d\u591a\u5c11\u95e8\uff0c\u4f8b\u5982\u4e00\u4e2a\u975e\u95e8\u7684\u8f93\u51fa\u80fd\u591f\u540c\u65f6\u8d1f\u8f7d 4 \u4e2a\u975e\u95e8\u5e76\u4e14\u90fd\u80fd\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u5176\u6247\u51fa\u4e3a 4\uff0c\u5176\u4e5f\u80fd\u901a\u8fc7\u6807\u51c6\u8d1f\u8f7d\u6765\u5b9a\u4e49\u3002

\u6807\u51c6\u8d1f\u8f7d

\u6240\u8c13\u7684\u6807\u51c6\u8d1f\u8f7d\uff0c\u662f\u8861\u91cf\u201c\u8d1f\u8f7d\u201d\u7684\u4e00\u4e2a\u201c\u5355\u4f4d\u781d\u7801\u201d\u3002\u5176\u5927\u5c0f\u7b49\u4e8e\u4e00\u4e2a\u975e\u95e8(\u9006\u53d8\u5668)\u8d21\u732e\u7684\u8d1f\u8f7d\u538b\u529b\u3002

\u90a3\u4e48\u8981\u5982\u4f55\u8bc4\u4f30\u8d1f\u8f7d\u5462\uff1f\u9996\u5148\u6211\u4eec\u5f15\u5165 \u8fc7\u6e21\u65f6\u95f4(transition time)\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8f6c\u6362\u65f6\u95f4","title":"\u8f6c\u6362\u65f6\u95f4","text":"

\u8f6c\u6362\u65f6\u95f4\u5206\u4e3a \\(\\mathrm{t_{LH}}\\)(rise time) \u548c \\(\\mathrm{t_{HL}}\\)(fall time) \u4e24\u4e2a\u90e8\u5206\u3002

\u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

\u968f\u7740\u8d1f\u8f7d\u589e\u52a0\uff0c\u8f6c\u6362\u65f6\u95f4\u4e5f\u4f1a\u589e\u52a0\uff08\u7ed9\u7535\u5bb9\u5145\u7535\u7684\u65f6\u95f4\u589e\u52a0\uff09\uff0c\u800c\u6247\u51fa\u5b9a\u4e49\u4e2d\u63d0\u5230\u7684\u201c\u6700\u5927\u8d1f\u8f7d\u201d\uff0c\u5c31\u662f\u6307\u5b83\u7684\u8f6c\u6362\u65f6\u95f4\u4e0d\u8d85\u8fc7\u5b83\u9884\u5b9a\u7684\u6700\u5927\u8f6c\u6362\u65f6\u95f4\u3002

\u4ece\u5de6\u5230\u53f3\u8868\u793a\u8d1f\u8f7d\u4e0d\u65ad\u589e\u52a0\u65f6\uff0crise time \u7684\u53d8\u5316\u8d8b\u52bf\u3002

\u5b9e\u9645\u4e0a\uff0c\u7c7b\u4f3c\u7684\uff0c\u8d85\u51fa\u6247\u5165\u540e\uff0c\u95e8\u5bf9\u8f93\u5165\u7684\u53cd\u5e94\u5c31\u592a\u6162\u4e86\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4f20\u64ad\u5ef6\u8fdf","title":"\u4f20\u64ad\u5ef6\u8fdf","text":"

\u4f20\u64ad\u5ef6\u8fdf(propagation delay) \u8861\u91cf\u4e86\u95e8\u7684\u8f93\u5165\u53d8\u5316\u5bfc\u81f4\u8f93\u51fa\u53d8\u5316\u6240\u9700\u8981\u7684\u65f6\u95f4\u3002\u7531\u4e8e\u4ece\u4f4e\u7535\u5e73\u8f6c\u5316\u5230\u9ad8\u7535\u5e73\u548c\u9ad8\u7535\u5e73\u8f6c\u5316\u5230\u4f4e\u7535\u5e73\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u4f20\u64ad\u5ef6\u8fdf\u540c\u6837\u6709\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u4f7f\u7528 \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}} \u6765\u8868\u793a\\)\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u4f20\u64ad\u5ef6\u8fdf\u7684\u8ba1\u7b97\u65b9\u6cd5\u662f\u8f93\u5165\u548c\u8f93\u51fa\u7684\u53d8\u5316\u4e2d\u70b9\uff08\u5373\u53d8\u5316\u5230 \\(\\frac{1}{2}V_{CC}\\) \u65f6\uff09\u7684\u65f6\u95f4\u5dee\uff0c\u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5f15\u5165 \\(\\mathrm{ t_{pd} }\\) \u6765\u7edf\u4e00\u8868\u793a \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}}\\)\u3002\u6570\u503c\u4e0a\uff0c\\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\) \u6216 \\(\\mathrm{ t_{pd} } = max(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

\u9898\u9762\u7b54\u6848

\u6839\u636e\u65f6\u5e8f\u56fe\uff0c\u5199\u51fa\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\uff0c\u6b64\u5904 \\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

Transition Time vs. Propagation Delay

\u8f6c\u6362\u65f6\u95f4\u4e13\u6ce8\u4e8e\u8f93\u51fa\u7684\u53d8\u5316\uff0c\u800c\u4f20\u64ad\u5ef6\u8fdf\u5219\u5305\u542b\u4e86\u8f93\u5165\u7684\u53d8\u5316\u548c\u8f93\u51fa\u7684\u53d8\u5316\u6574\u4e2a\u8fc7\u7a0b\u3002

\u4ece\u65f6\u5e8f\u56fe\u4e0a\u7684\u8868\u793a\u6765\u770b\uff0c\u8f6c\u6362\u65f6\u95f4\u53ea\u9700\u8981\u8f93\u51fa\u7684\u65f6\u5e8f\u56fe\u5373\u53ef\u8868\u793a\uff1b\u4f46\u4f20\u64ad\u5ef6\u8fdf\u5219\u662f\u901a\u8fc7\u6bd4\u8f83\u8f93\u5165\u548c\u8f93\u51fa\u7684\u504f\u5dee\u6765\u8868\u793a\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u6a21\u578b","title":"\u5ef6\u8fdf\u6a21\u578b","text":"

\u4e3a\u4e86\u7814\u7a76\u4e3a\u4ec0\u4e48\u4f1a\u5b58\u5728\u95e8\u5ef6\u8fdf\uff0c\u523b\u753b\u95e8\u7684 \u56fa\u6709\u95e8\u5ef6\u8fdf(inherent gate delay)\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5176\u5efa\u6a21\uff0c\u5e38\u89c1\u7684 \u5ef6\u8fdf\u6a21\u578b(delay model) \u6709\u4ee5\u4e0b\u4e24\u79cd\uff1a

\u5c06\u4e0d\u5b58\u5728\u5ef6\u8fdf\u7684\u6a21\u578b\u3001\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u548c\u60ef\u6027\u5ef6\u8fdf\u6a21\u578b\u505a\u6bd4\u8f83\u5730\u6765\u770b\uff0c\u5c31\u662f\u5982\u4e0b\u60c5\u51b5\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","title":"\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","text":"

\u5f15\u5165

\u7531\u4e8e\u5b9e\u9645\u7535\u8def\u4e2d\u5b9e\u73b0\u5ef6\u8fdf\uff0c\u6570\u5b66\u4e0a\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e0e\u5b9e\u9645\u7535\u8def\u60c5\u51b5\u4f1a\u5b58\u5728\u4e0d\u540c\u2014\u2014\u5373\u5b58\u5728\u82e5\u5e72\u6570\u5b66\u4e0a\u65e0\u6cd5\u76f4\u63a5\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u6240\u4ee5\u7814\u7a76\u5ef6\u8fdf\u662f\u975e\u5e38\u5fc5\u8981\u7684\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u8ba1\u7b97","title":"\u5ef6\u8fdf\u8ba1\u7b97","text":"

\u8ba1\u7b97\u4e00\u4e2a\u7535\u8def\u7684\u5ef6\u8fdf\u65f6\uff0c\u6709\u4e24\u65b9\u9762\u9700\u8981\u8003\u8651\uff0c\u4e00\u65b9\u9762\u662f\u7535\u8def\u81ea\u8eab\u6240\u5bfc\u81f4\u7684\u4e00\u4e2a\u56fa\u5b9a\u5ef6\u8fdf\uff0c\u53e6\u5916\u4e00\u65b9\u9762\u5219\u662f\u7531\u4e8e\u4e0d\u540c\u7684\u8d1f\u8f7d\u5bfc\u81f4\u7684\u989d\u5916\u5ef6\u8fdf\u3002

\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c0.07 \u4e3a\u56fa\u5b9a\u5ef6\u8fdf\uff0c0.021 \u4e3a\u4e00\u4e2a\u6807\u51c6\u8d1f\u8f7d\u5e26\u6765\u7684\u5ef6\u8fdf\u7cfb\u6570\uff0cSL(4.5 here) \u5219\u662f\u6807\u51c6\u5316\u7684\u8d1f\u8f7d\u91cf\u3002

\u800c\u5177\u4f53\u7684\u8868\u8fbe\u5f0f\uff0c\u4f1a\u5728 Cell Library \u91cc\u5199\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","title":"\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","text":"

\u7531\u4e8e\u5b58\u5728\u5ef6\u8fdf\uff0c\u8bb8\u591a\u5728\u6570\u5b66\u610f\u4e49\u4e0a\u6ca1\u6709\u95ee\u9898\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u5728\u7535\u8def\u4e2d\u5c31\u5b58\u5728\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002

\u4f8b\u5982\uff0c\u4ece\u6570\u5b66\u89d2\u5ea6\u770b\uff0c\\(\\mathrm{Y=\\overline{A}A}\\) \u7684\u503c\u6052\u4e3a 0\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u7531\u4e8e\u5ef6\u8fdf\uff0c\u5176\u4eff\u771f\u6ce2\u5f62\u4e2d\u4f1a\u51fa\u73b0\u8fd9\u6837\u4e00\u4e2a \u6bdb\u523a(glitch)\uff0c\u800c\u8fd9\u5728\u5de5\u7a0b\u610f\u4e49\u4e0a\u6709\u5f88\u5927\u7684\u95ee\u9898\u3002

\u66f4\u590d\u6742\u7684 \ud83c\udf30

\u8ba9\u6211\u4eec\u5206\u6790\u4e0b\u9762\u8fd9\u4e2a\u4e8c\u8def\u9009\u62e9\u5668\uff0c\u5176\u529f\u80fd\u662f\u901a\u8fc7 S \u63a7\u5236\u8f93\u51fa\u8868\u8fbe\u7684\u662f A \u8fd8\u662f B\uff0c\u5728\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u4e0b\uff0c\u5176\u6ce2\u5f62\u5982\u4e0b\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0cY \u4e2d\u51fa\u73b0\u4e86\u610f\u6599\u4e4b\u5916\u7684\u6bdb\u523a\u3002

\u800c\u8fd9\u4e2d\u6bdb\u523a\u53ef\u4ee5\u7528\u6dfb\u52a0\u5197\u4f59\u9879\u6765\u89e3\u51b3\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","title":"\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","text":"

\u6b63\u903b\u8f91(positive logic) \u5c31\u662f 1 \u662f\u6709\u6548\u4fe1\u53f7\uff0c\u8d1f\u903b\u8f91(negative logic) \u5c31\u662f 0 \u662f\u6709\u6548\u4fe1\u53f7\u3002\u800c\u5728\u6b63\u903b\u8f91\u4e2d AND \u95e8\u7684\u4f5c\u7528\u5c31\u7b49\u6548\u4e8e\u8d1f\u903b\u8f91\u4e2d OR \u95e8\u7684\u4f5c\u7528\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u524d\u9762\u51e0\u7ae0\u7684\u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\u5bf9\u79f0\u3002

\u800c\u6b63\u903b\u8f91\u7684\u7535\u8def\u7684\u7b26\u53f7\u4e00\u822c\u5c31\u662f\u6b63\u5e38\u7684\u903b\u8f91\u95e8\u7b26\u53f7\uff0c\u800c\u8d1f\u903b\u8f91\u7684\u903b\u8f91\u95e8\u7b26\u53f7\u5219\u53ef\u80fd\u6709\u5c0f\u4e09\u89d2\u6807\uff0c\u5373 \u6781\u6027\u6307\u793a\u5668(polarity indicator)\uff1a

\u5982\u56fe\uff0c\u5de6\u4fa7\u662f\u6b63\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\uff0c\u53f3\u4fa7\u662f\u8d1f\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5de5\u827a\u6620\u5c04","title":"\u5de5\u827a\u6620\u5c04","text":"

\u5de5\u827a\u6620\u5c04(technology mapping) \u662f\u6307\u5c06\u903b\u8f91\u56fe\u6216\u7f51\u8868\u8f6c\u5316\u4e3a\u53ef\u4ee5\u7528\u5de5\u827a\u5b9e\u73b0\u7684\u5fc3\u7684\u56fe\u6216\u7f51\u8868\u7684\u8fc7\u7a0b\u3002

\u6709\u65f6\u6211\u4eec\u4f1a\u4f7f\u7528\u4e0e\u975e\u95e8\u548c\u975e\u95e8\u66ff\u6362\u4e0e\u95e8\u548c\u6216\u95e8(\u56e0\u4e3a\u7535\u8def\u5c42\u9762\uff0c\u4e0e\u95e8\u5b9e\u9645\u4e0a\u5c31\u662f\u901a\u8fc7\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684)\uff0c\u7136\u540e\u4f1a\u53d1\u73b0\u6709\u4e00\u4e9b\u8fde\u7eed\u5bf9\u975e\u95e8\u53ef\u4ee5\u76f8\u4e92\u62b5\u6d88\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

\u84dd\u7eff\u8272\u5757\u4e2d\u5373\u4e3a\u88ab\u66ff\u6362\u540e\u7684\u5185\u5bb9\uff0c\u7136\u540e\u6211\u4eec\u53d1\u73b0\u51fa\u73b0\u4e86\u82e5\u5e72\u53ef\u4ee5\u62b5\u6d88\u7684\u975e\u95e8\u3002

\u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6216\u975e\u95e8\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u9a8c\u8bc1\u6b63\u786e\u6027","title":"\u9a8c\u8bc1\u6b63\u786e\u6027","text":"

\u9a8c\u8bc1\u6b63\u786e\u6027(Verification)\u6307\u7684\u662f\u8bc1\u660e\u6700\u7ec8\u8bbe\u8ba1\u7684\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u9884\u671f\u4ea7\u54c1\u89c4\u683c\uff08Specification\uff09\u3002 \u7b80\u5355\u7684\u4ea7\u54c1\u89c4\u683c\u53ef\u4ee5\u7528\u771f\u503c\u8868\u3001\u5e03\u5c14\u4ee3\u6570\u5f0f\u3001HDL \u4ee3\u7801\u7b49\u63cf\u8ff0\u3002

\u6700\u57fa\u672c\u7684\u9a8c\u8bc1\u6b63\u786e\u6027\u65b9\u6cd5\u6709\uff1a

Why Simulate?

\u6211\u4eec\u66fe\u5728\u6570\u903b\u5b9e\u9a8c\u4e2d\u9a8c\u8bc1\u8fc7\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\uff0c\u90a3\u65f6\u6211\u4eec\u91c7\u7528\u4eba\u5de5\u903b\u8f91\u5206\u6790\uff0c\u901a\u8fc7\u6d4b\u8bd5\u786e\u5b9a\u4e86\u5f85\u6d4b\u95e8\u7684\u771f\u503c\u8868\uff0c\u5e76\u5c06\u5176\u4e0e\u6807\u51c6\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u771f\u503c\u8868\u6bd4\u8f83\uff0c\u4ece\u800c\u5224\u65ad\u6211\u4eec\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u662f\u5426\u6b63\u786e\u5b9e\u73b0\uff1b

\u4f46\u5982\u679c\u6211\u4eec\u9700\u8981\u9a8c\u8bc1\u4e00\u4e2a\u4e00\u767e\u4e07\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\u5462\uff1f\uff08\u4ec5\u7528\u4e8e\u4e3e\u4f8b\uff09

\u6211\u4eec\u53d1\u73b0\uff0c\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u4eba\u5de5\u6c42\u89e3\u8fd9\u4e2a\u7535\u8def\u7684\u771f\u503c\u8868\u6216\u5e03\u5c14\u4ee3\u6570\u5f0f\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u8bbe\u8ba1\u4e00\u7ec4\u5177\u6709\u4ee3\u8868\u6027\u7684\u8f93\u5165\uff08\u4ecd\u7136\u662f\u4e2a\u4e0d\u5c0f\u7684\u6570\u76ee\uff09\uff0c\u8ba9\u8ba1\u7b97\u673a\u5728\u4eff\u771f\u73af\u5883\u4e2d\u7528\u8fd9\u7ec4\u8f93\u5165\u53bb\u6d4b\u8bd5\u7535\u8def\uff0c\u5e76\u5c06\u6d4b\u8bd5\u7ed3\u679c\u4e0e\u9884\u671f\u7ed3\u679c\u8fdb\u884c\u5bf9\u6bd4\u3002\u6211\u4eec\u65e0\u6cd5\u786e\u4fdd\u9a8c\u8bc1\u662f\u5426\u5145\u5206\uff0c\u4f46\u81f3\u5c11\u8fd9\u662f\u5b9e\u8df5\u610f\u4e49\u4e0a\u8db3\u591f\u5145\u5206\u7684\u9a8c\u8bc1\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u903b\u8f91","title":"\u7ec4\u5408\u903b\u8f91","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u903b\u8f91\u51fd\u6570","title":"\u57fa\u672c\u903b\u8f91\u51fd\u6570","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u529f\u80fd\u5757","title":"\u57fa\u672c\u529f\u80fd\u5757","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8bd1\u7801\u5668","title":"\u8bd1\u7801\u5668","text":"

\u7a77\u4e3e\u53ef\u80fd\u6027\uff0c\u7a20\u5bc6 -> \u7a20\u5bc6/\u7a00\u758f

\u4e3a\u4e86\u8282\u7701\u95e8\u8f93\u5165\u6210\u672c\uff0c\u6211\u4eec\u5e38\u5e38\u4f7f\u7528 \u5206\u7ea7 \u7684\u601d\u60f3\u6765\u6784\u9020\u591a\u8f93\u5165\u591a\u8bd1\u7801\u5668\u3002

eg

\u7531\u4e8e\u5e95\u5c42\u7684\u7535\u8def\u80fd\u591f\u76f4\u63a5\u5b9e\u73b0\u7684\u8fd0\u7b97\u5341\u5206\u5c40\u9650\uff0c\u6240\u4ee5\u9700\u8981\u7528\u8bd1\u7801\u5668\u6765\u5b9e\u73b0\u4e00\u4e9b\u57fa\u7840\u8fd0\u7b97\uff0c\u4f8b\u5982\u52a0\u6cd5\u3002

\u4e00\u4f4d\u52a0\u6cd5\u5668\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bd1\u7801\u5668\u548c\u6216\u95e8\u5b9e\u73b0\uff0c\u6838\u5fc3\u5c31\u662f\u679a\u4e3e\u8f93\u5165\u7684\u5404\u79cd\u60c5\u51b5\uff0c\u7136\u540e\u7528\u6216\u95e8\u62fe\u53d6 sum \u548c carry \u7684\u6700\u5c0f\u9879\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7f16\u7801\u5668","title":"\u7f16\u7801\u5668","text":"

\u7a20\u5bc6/\u7a00\u758f -> \u7a20\u5bc6

\u5982\u4e0a\u5b9a\u4e49\u7684\u7f16\u7801\u5668\u6709\u4e00\u4e2a\u9650\u5236\uff0c\u5373\u4efb\u4f55\u65f6\u5019\u8f93\u5165\u53ea\u80fd\u6709\u4e00\u4e2a\u662f\u6d3b\u52a8\u7684\uff0c\u5373\u8f93\u5165\u662f one-hot \u7684\u3002

\u4f18\u5148\u7f16\u7801\u5668

\u4f18\u5148\u7f16\u7801\u5668\u80fd\u591f\u5b9e\u73b0\u4f18\u5148\u7ea7\u51fd\u6570\uff0c\u5b83\u4e0d\u8981\u6c42\u8f93\u5165\u662f one-hot \u7684\uff0c\u800c\u662f\u603b\u662f\u5173\u6ce8\u6709\u6548\u8f93\u5165\u4e2d\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4e2a\u3002\u5373\u6bd4\u5982\u5f53\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4f4d\u662f 1 \u65f6\uff0c\u5176\u5b83\u6240\u6709\u4f18\u5148\u7ea7\u4e0d\u5982\u5b83\u7684\u4f4d\u7f6e\u7684\u503c\u90fd\u662f\u6211\u4eec\u4e0d\u5173\u5fc3\u7684\u5185\u5bb9\u4e86\u3002

\u4e2d\u65ad(interrupt)\u5224\u4f18\u5668

\u4f18\u5148\u7f16\u7801\u5668\u7684\u4e00\u79cd\u5e94\u7528\u5c31\u662f\u4e2d\u65ad\u5224\u4f18\u5668\u3002

\u5176\u4e2d \\(V\\) \u8868\u793a\u8f93\u51fa\u662f\u5426\u6709\u6548\uff0c\u5728\u4e2d\u65ad\u5224\u4f18\u7cfb\u7edf\u4e2d\u5373\u8868\u793a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u591a\u8def\u590d\u7528\u5668","title":"\u591a\u8def\u590d\u7528\u5668","text":"

\u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u51fa\u7684\u662f\u82e5\u5e72\u8f93\u5165\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

\u901a\u8fc7\u4e09\u6001\u95e8\u6765\u5b9e\u73b0 MUX \u80fd\u591f\u964d\u4f4e\u95e8\u8f93\u5165\u4ee3\u4ef7\u3002

eg

\u5b8c\u5168\u4f7f\u7528\u4e09\u6001\u95e8\u6765\u5b9e\u73b0\u56db\u8f93\u5165 MUX\uff0c\u95e8\u8f93\u5165\u5927\u5927\u51cf\u5c11\u3002

MUX \u8fd8\u53ef\u4ee5 \u5b9e\u73b0\u4efb\u610f\u7684\u903b\u8f91\u51fd\u6570\uff1a

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u5c06\u539f\u6765\u7684\u63a7\u5236\u7aef\u5f53\u4f5c\u8f93\u5165\u7aef\uff0c\u5e76\u5728\u539f\u6765\u7684\u8f93\u5165\u7aef\u5199\u5165\u903b\u8f91\u51fd\u6570\u7684\u771f\u503c\u8868\uff0c\u4ee5\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\u3002

\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u628a\u4e00\u90e8\u5206\u7684\u8f93\u5165\u5f53\u4f5c\u5e38\u91cf\u7aef\u6765\u7b80\u5316\u5143\u4ef6\uff08\u964d\u7ef4\uff09\uff1a

\u89c2\u5bdf\u5176\u6700\u5c0f\u9879\uff0c\u4f7f\u5176\u8f93\u51fa\u6240\u6709\u6700\u5c0f\u9879\u3002\u4f46\u662f\u5728\u964d\u7ef4\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u9700\u8981\u5168\u90fd\u662f C\uff0c\u5982\u679c\u5361\u8bfa\u56fe\u4e2d\u5b58\u5728\u53cc 1 \u6216\u8005\u53cc 0\uff0c\u4e5f\u53ef\u4ee5\u4ecd\u7136\u4f7f\u7528\u5e38\u91cf\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4fe1\u53f7\u5206\u914d\u5668","title":"\u4fe1\u53f7\u5206\u914d\u5668","text":"

\u7b80\u5199\u4e3a DEMUX\uff0c\u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u5165\u7ed9\u5230\u82e5\u5e72\u8f93\u51fa\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

\u540e\u7eed \ud83d\udc49 \u53ef\u91cd\u7f16\u7a0b\u6280\u672f

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7b97\u672f\u903b\u8f91\u7535\u8def","title":"\u7b97\u672f\u903b\u8f91\u7535\u8def","text":"

\u6211\u4eec\u4e3b\u8981\u8ba8\u8bba\u7684\u8ba1\u7b97\u4e3b\u8981\u5305\u62ec\u903b\u8f91\u8fd0\u7b97\u548c\u7b97\u672f\u8fd0\u7b97\uff0c\u524d\u8005\u7531\u4e8e\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u57fa\u672c\u95e8\u5f88\u65b9\u4fbf\u5b9e\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u8fc7\u591a\u8003\u8651\uff1b\u5728\u6b64\u4e3b\u8981\u4ecb\u7ecd\u7b97\u6570\u8fd0\u7b97\u3002\u5728\u8ba1\u7b97\u673a\u786c\u4ef6\u4e2d\uff0c\u627f\u62c5\u8ba1\u7b97\u5de5\u4f5c\u7684\u4e3b\u8981\u90e8\u4ef6\u4e3a ALU(Arithmetic Logical Unit)\u3002

\u5f15\u5165

\u5728\u4e4b\u524d #\u8bd1\u7801\u5668 \u548c #\u591a\u8def\u590d\u7528\u5668 \u7684\u90e8\u5206\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e00\u4e9b\u5b9e\u73b0 1 bit \u52a0\u6cd5\u5668\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u6765\u8be6\u7ec6\u770b\u770b\u52a0\u6cd5\u5668\u8fd9\u4e2a\u4e1c\u897f\u3002

\u9996\u5148\u6211\u4eec\u9700\u8981\u4e86\u89e3\u52a0\u6cd5\u5668\u6700\u5e95\u5c42\u7684\u5355\u5143\uff0c\u5373\u5b9e\u73b0 1 bit \u8fd0\u7b97\u7684 \u534a\u52a0\u5668(half adder) \u548c \u5168\u52a0\u5668(full adder)\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u5c06\u4ed6\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u5b9e\u73b0 n bits \u7684\u52a0\u6cd5\u5668\uff0c\u5176\u4e2d\u4e3b\u8981\u4ecb\u7ecd \u884c\u6ce2\u52a0\u6cd5\u5668(binary ripple carry adder)\u3002\u6b64\u5916\uff0c\u57fa\u4e8e\u4e00\u4e9b\u7f16\u7801\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5c06\u5b83\u6539\u88c5\u6210\u52a0\u51cf\u6cd5\u5668\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u534a\u52a0\u5668--\u5168\u52a0\u5668","title":"\u534a\u52a0\u5668 & \u5168\u52a0\u5668","text":"

\u5bf9\u4e8e\u4e8c\u8fdb\u5236\u52a0\u6cd5\uff0c\u5176\u8f93\u51fa\u65e0\u7591\u6709\u5f53\u524d\u4f4d\u7684\u548c S \u548c\u8fdb\u4f4d C\uff0c\u800c\u8f93\u5165\u9664\u4e86\u4e24\u4e2a\u64cd\u4f5c\u6570 X \u548c Y \u4ee5\u5916\uff0c\u8fd8\u53ef\u80fd\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z(\u6216\u8005C{n-1})\u3002\u800c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6570\u7684\u7b2c\u4e00\u4f4d\uff0c\u663e\u7136\u4e0d\u4f1a\u6709\u8fdb\u4f4d\uff0c\u6216\u8005\u8bf4 Z=0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e2a Z \u53bb\u6389\uff0c\u5373\u8f93\u5165\u53ea\u6709 X \u548c Y\uff0c\u8fd9\u5c31\u662f \u534a\u52a0\u5668(half adder)\uff1b\u663e\u7136\uff0c\u5bf9\u5e94\u7684\uff0c\u5982\u679c\u8f93\u5165\u4e2d\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z\uff0c\u5219\u79f0\u4e3a \u5168\u52a0\u5668(full adder)\u3002

\u534a\u52a0\u5668\u5168\u52a0\u5668 \u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u7535\u8def\u56fe \\[ S=\\overline{X}Y+X\\overline{Y}=X\\oplus Y \\\\ C = XY \\]

\u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u5361\u8bfa\u56fe\u903b\u8f91\u8868\u8fbe\u5f0f with XOR \\[ S=\\overline{X}\\,\\overline{Y}Z + \\overline{X}Y\\overline{Z} + X\\overline{Y}\\,\\overline{Z} + XYZ \\\\ C = XY + XZ + YZ \\]

\\[ S = (X\\oplus Y)\\oplus Z \\\\ C = XY + Z(X\\oplus Y) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u884c\u6ce2\u52a0\u6cd5\u5668","title":"\u884c\u6ce2\u52a0\u6cd5\u5668","text":"

\u884c\u6ce2\u52a0\u6cd5\u5668\u662f\u6734\u7d20\u7684 n bits \u52a0\u6cd5\u5668\u5b9e\u73b0\u3002\u5176\u6838\u5fc3\u601d\u60f3\u4e5f\u5c31\u662f\u6a21\u62df\u6211\u4eec\u4f7f\u7528\u201c\u7ad6\u5f0f\u201d\u6765\u8ba1\u7b97\u52a0\u6cd5\uff0c\u4ece\u4f4e\u4f4d\u5f00\u59cb\u9010\u4f4d\u8ba1\u7b97\uff0c\u5e76\u5c06\u8fdb\u4f4d\u7ed9\u5230\u4e0b\u4e00\u4f4d\u4f5c\u4e3a\u8f93\u5165\u3002

\u5b9e\u9645\u4e0a\u65e0\u8bba\u662f\u53ea\u7528\u534a\u52a0\u5668\u6216\u662f\u53ea\u7528\u5168\u52a0\u5668\uff0c\u90fd\u53ef\u4ee5\u5b9e\u73b0\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u4f46\u662f\u6b8a\u9014\u540c\u5f52\uff0c\u65e0\u975e\u662f\u901a\u8fc7\u5916\u90e8\u5668\u4ef6\u6765\u8fdb\u884c\u4e92\u76f8\u8f6c\u5316\u800c\u5df2\u3002\u5982\u679c\u53ea\u4f7f\u7528\u5168\u52a0\u5668\u6765\u5b9e\u73b0\uff0c\u5219\u4ee5 4 bits \u884c\u6ce2\u52a0\u6cd5\u5668\u4e3a\u4f8b\uff0c\u5176\u5927\u81f4\u903b\u8f91\u5982\u4e0b\uff1a

\u5176\u4e2d\uff0c\u5728\u52a0\u6cd5\u5668\u4e2d\uff0c\\(C_0\\) \u5fc5\u7136\u662f 0\u3002

\u52a0\u51cf\u6cd5\u5668\uff0c\u6216\u8005\u8bf4\u52a0\u6cd5\u5668\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u5728 ALU \u4e2d\u662f\u6700\u5f71\u54cd\u6548\u7387\u7684\u90e8\u5206\uff0c\u800c\u4e14\u5982\u679c\u4f7f\u7528\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u968f\u7740\u4f4d\u6570\u589e\u52a0\u6548\u7387\u4f1a\u8d8a\u6765\u8d8a\u6162\u3002

\u6240\u4ee5\u4f1a\u6709\u7c7b\u4f3c\u4e8e\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u66f4\u591a\u7684\u5185\u5bb9\u53ef\u4ee5\u770b xxjj \u7684\u8ba1\u7ec4\u7b14\u8bb0\u3002\uff08\u6570\u903b\u4e2d\u6700\u591a\u4e86\u89e3\u5230\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u5373\u53ef\u3002\uff09

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4e8c\u8fdb\u5236\u51cf\u6cd5","title":"\u4e8c\u8fdb\u5236\u51cf\u6cd5","text":"

\u9996\u5148\uff0c\u5728\u5f00\u59cb\u4e8c\u8fdb\u5236\u51cf\u6cd5\u7684\u4ecb\u7ecd\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u4e86\u89e3 \u8865\u7801(2's complement)\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u4e1c\u897f\u5b9e\u5728\u662f\u63d0\u8fc7\u592a\u591a\u6b21\u4e86\u6240\u4ee5\u6211\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u518d\u5199\u4e00\u6b21\uff0c\u53ef\u4ee5\u67e5\u770b\u6211\u7684 C \u5c0f\u7b14\u8bb0\u7684\u8865\u7801\u5185\u5bb9\u3002

\u7ed3\u5408\u8865\u7801\uff0c\u6211\u4eec\u518d\u6765\u89c2\u5bdf\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u51cf\u6570\u7684\u6bcf\u4e00\u4f4d\u53d6\u53cd\uff0c\u5e76\u5bf9\u6574\u4e2a\u6570\u52a0\u4e00\uff0c\u518d\u76f4\u63a5\u5c06\u5b83\u4eec\u76f8\u52a0\u5373\u53ef\uff0c\u5373\u5c06\u51cf\u6cd5\u8f6c\u5316\u4e3a\u8865\u7801\u4e0b\u7684\u52a0\u6cd5\u3002

\u5176\u4e2d\u52a0\u4e00\u8fd9\u4e00\u6b65\u6070\u597d\u53ef\u4ee5\u901a\u8fc7\u5728\u52a0\u6cd5\u5668\u4e2d\u5fc5\u5b9a\u4e3a 0 \u7684 \\(C_0\\) \u6765\u5b9e\u73b0\u3002\u6211\u4eec\u5728\u8f93\u5165\u4e2d\u6dfb\u52a0\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u53cd\u7801(1's complement)\uff0c\u518d\u7528 \\(C_0\\) \u5b9e\u73b0\u52a0\u4e00\uff0c\u4ece\u800c\u5f97\u5230\u8865\u7801(2's complement)\uff0c\u5c31\u6837\u5c31\u53ef\u4ee5\u5b9e\u73b0\u52a0\u51cf\u6cd5\u5668\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","title":"\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/","title":"Chap 4 Sequential Circuits","text":"

\u7ea6 5781 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 19 \u5206\u949f

\u4e0a\u4e00\u7ae0\u8bb2\u7684\u662f\u7ec4\u5408\u7535\u8def\uff0c\u867d\u7136\u7ec4\u5408\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u8bf8\u591a\u529f\u80fd\uff0c\u4f46\u662f\u5b83\u4f9d\u7136\u5b58\u5728\u4e00\u4e9b\u7684\u95ee\u9898\uff1a

  1. \u5bf9\u4e8e\u590d\u6742\u7684\u903b\u8f91\uff0c\u62bd\u8c61\u5c42\u7ea7\u591a\uff0c\u5bfc\u81f4\u786c\u4ef6\u5c42\u9762\u5f00\u9500\u5927\u3001\u8017\u65f6\u957f\uff0c\u4e00\u65b9\u9762\u63d0\u9ad8\u6210\u672c\uff0c\u4e00\u65b9\u9762\u964d\u4f4e\u6548\u7387\uff1b
  2. \u7ec4\u5408\u7535\u8def\u6ca1\u6cd5\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u6240\u6709\u7684\u529f\u80fd\u6a21\u5757\u5bf9\u4e8e\u7279\u5b9a\u7684\u8f93\u5165\u7ed9\u51fa\u76f8\u540c\u7684\u8f93\u51fa\uff1b

\u800c\u65f6\u5e8f\u7535\u8def\u5219\u62e5\u6709\u5b58\u50a8\u4fe1\u606f\u7684\u80fd\u529b\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u6765\u8bf4\uff0c\u8f93\u51fa\u9664\u4e86\u4e0e\u8f93\u5165\u6709\u5173\uff08\u751a\u81f3\u53ef\u4ee5\u6ca1\u6709\u8f93\u5165\uff09\uff0c\u4e5f\u53ef\u4ee5\u4e0e\u81ea\u8eab \u72b6\u6001(state) \u6709\u5173\u3002

\u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u5206\u4e3a\u4e24\u7c7b\uff08\u4e3b\u8981\u5206\u7c7b\u4f9d\u636e\u662f\u8f93\u5165\u4fe1\u53f7\u7684\u65f6\u95f4\u548c\u5185\u90e8\u72b6\u6001\u6539\u53d8\u7684\u65f6\u95f4\uff09\uff1a\u540c\u6b65\u65f6\u5e8f\u7535\u8def(synchronous sequential circuit) \u548c \u5f02\u6b65\u65f6\u5e8f\u7535\u8def(asynchronous sequential circuit)\u3002

The behavior of a synchronous sequential circuit can be defined from the knowledge of its signals at discrete instants of time. The behavior of an asynchronous sequential circuit depends upon the inputs at any instant of time and the order in continuous time in which the inputs change.

\u4e00\u822c\u6765\u8bf4\uff0c\u5f02\u6b65\u7535\u8def\u7684\u8bbe\u8ba1\u76f8\u5bf9\u56f0\u96be\uff08\u884c\u4e3a\u4e0e\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\u548c\u8f93\u5165\u4fe1\u53f7\u53d8\u5316\u7684\u65f6\u95f4\u5e8f\u5217\u5bc6\u5207\u76f8\u5173\uff09\uff0c\u4f46\u4ecd\u7136\u5341\u5206\u5fc5\u8981\uff0c\u6bd4\u5982\u89e6\u53d1\u5668\u5c31\u662f\u4ee5\u4e00\u90e8\u9501\u5b58\u5668\u4e3a\u6a21\u5757\u8bbe\u8ba1\u7684\uff1b\u800c\u540c\u6b65\u7535\u8def\u7684\u4f7f\u7528\u66f4\u52a0\u5e7f\u6cdb\uff0c\u901a\u5e38\u8fd9\u4e9b\u201c\u79bb\u6563\u7684\u65f6\u523b\u201d\u90fd\u662f\u7531 \u65f6\u949f\u53d1\u751f\u5668(clock generator) \u8fd9\u79cd\u65f6\u5e8f\u5668\u4ef6\u4ea7\u751f\u5468\u671f\u6027\u7684 \u65f6\u949f\u8109\u51b2(clock pulse) \u5e8f\u5217\u6765\u5b9e\u73b0\u7684\uff08\u8fd9\u79cd\u7535\u8def\u4e00\u822c\u88ab\u79f0\u4e3a \u949f\u63a7\u65f6\u5e8f\u7535\u8def(clocked sequential circuit)\uff0c\u7531\u4e8e\u8bbe\u8ba1\u76f8\u5bf9\u5bb9\u6613\uff0c\u9c81\u68d2\u6027\u5f3a\uff0c\u6240\u4ee5\u88ab\u5e7f\u6cdb\u5e94\u7528\uff09\u3002

\u7f13\u51b2

\u7f13\u51b2\u5668(buffer) \u4e00\u822c\u901a\u8fc7\u4e24\u4e2a\u975e\u95e8\u4e32\u8054\uff0c\u5e76\u5c06\u8f93\u5165\u8fde\u901a\u8f93\u51fa\u5b9e\u73b0\uff0c\u8fd9\u6837\u80fd\u591f\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u7136\u800c\u65e0\u6cd5\u4fee\u6539\u3002\u800c\u9501\u5b58\u5668\u5c31\u662f\u5728\u7f13\u51b2\u5668\u7684\u57fa\u7840\u4e0a\uff0c\u5c06\u975e\u95e8\u66ff\u6362\u4e3a\u6216\u975e\u95e8\u6216\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684\u3002

\u5176\u4e2d\uff0c\u4ece\u7ed9\u5b9a\u8f93\u5165\u5230\u66f4\u65b0\u8f93\u51fa\u6709\u4e00\u4e2a \\(t_G\\) \u7684\u5ef6\u65f6\u3002

\u5f15\u5165

\u663e\u7136\uff0c\u6839\u636e\u4e0a\u9762\u7684\u6982\u8ff0\uff0c\u65f6\u5e8f\u7535\u8def\u4e2d\u6700\u91cd\u8981\u7684\u5c31\u662f\u4fe1\u606f\u5b58\u50a8\u5143\u4ef6\u3002\u5f53\u8f93\u5165\u4fe1\u53f7\u4e0d\u53d1\u751f\u53d8\u5316\u65f6\uff08\u91cd\u70b9\u662f\u53d8\u5316\uff0c\u5373\u8f93\u5165\u548c\u5b58\u50a8\u4fe1\u606f\u672a\u5fc5\u5b58\u5728\u5bf9\u5e94\u5173\u7cfb\uff09\u5b58\u50a8\u5143\u4ef6\u5c31\u80fd\u591f\u4fdd\u6301\u5176\u5185\u90e8\u5b58\u50a8\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u3002

\u5b58\u50a8\u5143\u4ef6\u4e3b\u8981\u7531 \u9501\u5b58\u5668(latch) \u548c \u89e6\u53d1\u5668(flip-flop) \u4e24\u79cd\uff0c\u5176\u4e2d\u524d\u8005\u662f\u540e\u8005\u7684\u57fa\u7840\uff0c\u6216\u8005\u8bf4\u591a\u6570\u60c5\u51b5\u4e0b\u6211\u4eec\u4f7f\u7528\u540e\u8005\uff0c\u4f46\u540e\u8005\u7531\u524d\u8005\u6784\u6210\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u9501\u5b58\u5668","title":"\u9501\u5b58\u5668","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr--sr-\u9501\u5b58\u5668","title":"SR & S'R' \u9501\u5b58\u5668","text":"

SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u57fa\u672c\u539f\u7406\u662f\u4e00\u81f4\u7684\uff0c\u53ea\u4e0d\u8fc7\u524d\u8005\u7528\u7684\u662f\u6216\u975e\u95e8\uff0c\u540e\u8005\u7528\u7684\u662f\u4e0e\u975e\u95e8\u3002

SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u8f93\u5165\u90fd\u662f S(Set) \u548c R(Reset) \u4e24\u4e2a\u90e8\u5206\uff0c\u8f93\u51fa\u90fd\u662f Q \u548c Q' \u4e24\u4e2a\u90e8\u5206\u3002

\u540d\u79f0\u4e0a \u7684\u5171\u540c\u70b9\u662f\uff0c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\uff1b\u5bf9\u4e8e R \u548c Q' \u4e5f\u662f\u8fd9\u6837\uff0c\u53ea\u4e0d\u8fc7\u8981\u6ce8\u610f\uff0cS'R'\u9501\u5b58\u5668\u8f93\u5165\u7684\u5e76\u4e0d\u662f\u8fd9\u91cc\u6240\u8bf4\u7684 S\uff0c\u800c\u662f\u5c06 S' \u4f5c\u4e3a\u8f93\u5165\u3002

SR \u9501\u5b58\u5668S'R' \u9501\u5b58\u5668

\u4e00\u4e2a\u8bb0\u5fc6\u65b9\u6cd5\u662f\uff0cSR \u7684\u95e8\u5143\u4ef6\u5bf9 1 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u6216\u975e\u95e8 \u7684\u5b9e\u73b0\uff1b\u800c S'R' \u7684\u95e8\u5143\u4ef6\u5bf9 0 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u4e0e\u975e\u95e8 \u7684\u5b9e\u73b0\u3002\u800c\u901a\u8fc7 \u300c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\u300d\u53ef\u4ee5\u5f97\u5230 S\u3001R \u4e0e Q\u3001Q' \u7684\u4f4d\u7f6e\u3002

\u4f46\u662f\u5b9e\u9645\u7684\u5b58\u50a8\u5143\u4ef6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684 SR/S'R' Latches\uff0c\u6240\u4ee5\u5b83\u4eec\u5f53\u7136\u662f\u5b58\u5728\u95ee\u9898\u7684\u3002\u7531\u4e8e\u7535\u8def\u5b58\u5728\u5ef6\u65f6\uff0c\u6240\u4ee5 S \u548c R \u7684\u8f93\u5165\u5f88\u96be\u540c\u65f6\u5230\u8fbe\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u524d\u9762\u52a0\u4e00\u4e2a\u63a7\u5236\u7aef\uff0c\u5f53\u786e\u4fdd\u4e24\u4e2a\u8f93\u5165\u90fd\u5230\u4f4d\u7684\u65f6\u5019\u518d\u4f7f\u80fd\u3002

\u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\uff0c\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668(SR Latch with Control Input)\uff08S'R'\u7565\uff09\uff1a

\u6ce8\u610f\uff01SR \u9501\u5b58\u5668\u901a\u8fc7 \u6216\u975e\u95e8 \u5b9e\u73b0\uff0c\u4f46\u5e26\u8f93\u5165\u63a7\u5236\u7684 SR \u9501\u5b58\u5668\u5219\u901a\u8fc7 \u4e0e\u975e\u95e8 \u5b9e\u73b0\uff01

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#d-\u9501\u5b58\u5668","title":"D \u9501\u5b58\u5668","text":"

D \u9501\u5b58\u5668\u5b9e\u9645\u4e0a\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\u7684\u6539\u8fdb\u3002\u5176\u4e2d\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u867d\u7136 S \u548c R \u8d77\u4f5c\u7528\u7684\u6709\u4e09\u79cd\u72b6\u6001

\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u5373\u4f7f\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\uff0c\u4e5f\u5b58\u5728\u4e00\u4e2a\u300cundefined\u300d\u72b6\u6001\uff0c\u800c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u51fa\u73b0\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u60f3\uff0c\u80fd\u4e0d\u80fd\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u7684\u53d1\u751f\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u7531\u4e8e\u53ef\u4ee5\u901a\u8fc7 C \u6765\u63a7\u5236\u662f\u5426\u4fdd\u6301\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u5f3a\u5236\u8981\u6c42 \\(S = \\overline R\\)\uff0c\u4e8e\u662f\u5c31\u907f\u514d\u4e86 undefined \u60c5\u51b5\u7684\u51fa\u73b0\uff0c\u8fd9\u5c31\u662f D \u9501\u5b58\u5668\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 D \u9501\u5b58\u5668\u5c06\u4e0d\u505c\u7684\u53d8\u5316\u5176\u4e2d\u7684\u6570\u636e\uff0c\u51fa\u73b0 \u7a7a\u7ffb\uff0c\u5bfc\u81f4\u6211\u4eec\u65e0\u6cd5\u786e\u5b9a C \u7f6e 0 \u65f6 Q \u7684\u8f93\u51fa\u7a76\u7adf\u662f\u4ec0\u4e48\uff0c\u800c\u8fd9\u662f\u975e\u5e38\u5371\u9669\u7684\u3002

\u8fd9\u4e3b\u8981\u662f\u56e0\u4e3a D \u9501\u5b58\u5668\u7684\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u662f\u76f4\u63a5\u66b4\u9732\u51fa\u6765\u3001\u540c\u65f6\u5141\u8bb8\u53d8\u5316\u7684\uff08\u4e0d\u662f\u540c\u65f6\u53d8\u5316\uff0c\u662f\u6307\u5728 Input \u53ef\u4ee5\u53d8\u7684\u65f6\u5019 Output \u4e5f\u80fd\u53d8\uff09\uff0c\u5373 \u900f\u660e(transparent) \u7684\u3002\u8fd9\u5c31\u5bfc\u81f4\u4e86\u5728\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u91cc\uff0c\u540c\u65f6\u5b58\u5728 \u53ef\u4ee5\u4e92\u76f8\u5f71\u54cd \u7684\u4e24\u4e2a\u4e1c\u897f\u3002\u8fd9\u4e5f\u662f\u89e6\u53d1\u5668\u6240\u89e3\u51b3\u7684\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668","title":"\u89e6\u53d1\u5668","text":"

\u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u63d0\u5230\u7684\uff0c\u7531\u300c\u900f\u660e\u300d\u5f15\u53d1\u7684\u95ee\u9898\uff0c\u800c\u91c7\u7528\u89e6\u53d1\u5668\u7684\u8bbe\u8ba1\u3002\u901a\u8fc7\u7ec4\u5408\u4e24\u4e2a\u9501\u5b58\u5668\uff0c\u4e3b\u8981\u6709\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5\uff1a

  1. \u5728\u6709\u8109\u51b2\uff08\u9ad8\u7535\u5e73\uff09\u65f6\uff0c\u4fee\u6539\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fdd\u6301\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff1b\u5728\u6ca1\u6709\u8109\u51b2\uff08\u4f4e\u7535\u5e73\uff09\u65f6\u5019\u4fdd\u6301\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fee\u6539\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u66f4\u65b0\u89e6\u53d1\u5668\u7684\u72b6\u6001\uff0c\u5373 \u4e3b\u4ece\u5f0f(master-slave)\u89e6\u53d1\u5668\uff1b
  2. \u4ec5\u5728\u65f6\u949f\u7684\u8fb9\u7f18\u89e6\u53d1\uff0c\u5373\u5728\u7279\u5b9a\u65f6\u523b\u4ec5\u63a5\u53d7\u4e00\u4e2a\u8f93\u5165\uff0c\u5373 \u8fb9\u6cbf\u89e6\u53d1\u5f0f(edge-triggered)\u89e6\u53d1\u5668\uff1b

\u8fb9\u6cbf\u89e6\u53d1\u5f0f D \u89e6\u53d1\u5668\u662f\u76ee\u524d\u4f7f\u7528\u6700\u5e7f\u6cdb\u7684\u89e6\u53d1\u5668\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr-\u4e3b\u4ece\u89e6\u53d1\u5668","title":"SR \u4e3b\u4ece\u89e6\u53d1\u5668","text":"

\u867d\u7136\u5b83\u53eb FF\uff0c\u4f46\u5b83\u5e76\u4e0d\u7b26\u5408 FF \u7684\u7279\u5f81\uff0c\u7136\u800c\u5206\u7c7b\u4e0a\u53c8\u5c5e\u4e8e pulse-triggered FF\u3002

SR \u89e6\u53d1\u5668\u77e5\u6240\u4ee5\u662f\u6240\u8c13\u7684 pulse-triggered \u7684\uff0c\u662f\u56e0\u4e3a\u5728 S \u548c R \u8f93\u5165\u90fd\u4e3a 0 \u65f6\uff0c\u5982\u679c\u51fa\u73b0\u566a\u97f3\uff0c\u5c31\u4f1a\u5bfc\u81f4 Slave \u5199\u5165\u5f02\u5e38\u6570\u636e\u3002

\u4f46\u662f\u6211\u4e2a\u4eba\u8ba4\u4e3a\u8fd9\u662f SR \u81ea\u8eab\u6709\u4e24\u4e2a\u4fdd\u6301\u6001\u5bfc\u81f4\u7684\u5f0a\u7aef\uff0c\u800c\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u6709\u8f93\u5165\u4e3a S \u548c R \u90fd\u4e3a 0 \u7684\u60c5\u51b5\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\u6b63\u8fb9\u6cbf\u89e6\u53d1 D \u89e6\u53d1\u5668\u7684\u5927\u81f4\u539f\u7406\u56fe\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)

"},{"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/#\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

\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":"

\u6682\u7565

\u5ef6\u65f6\u5206\u6790

\u5ef6\u65f6\u5206\u6790\u662f\u4e00\u4e2a\u91cd\u96be\u70b9\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\uff0c\u5c06\u5728\u4e4b\u540e\u5355\u72ec\u5f00\u4e00\u4e2a\u5c0f\u7ed3\u91cd\u70b9\u4ecb\u7ecd\u3002

\u8bf7\u53c2\u8003 \u5ef6\u65f6\u5206\u6790\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","title":"\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","text":"

\u7c7b\u6bd4\u7ec4\u5408\u903b\u8f91\u7535\u8def\u901a\u8fc7\u771f\u503c\u8868\u8bbe\u8ba1\u7535\u8def\uff0c\uff08\u540c\u6b65\uff09\u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u4f9d\u636e\u72b6\u6001\u8868\uff08\u6216\u7b49\u4ef7\u8868\u8fbe\uff0c\u5982\u72b6\u6001\u56fe\uff09\u6765\u8bbe\u8ba1\u7535\u8def\u3002\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u89e6\u53d1\u5668\u4ee5\u53ca\u5176\u5b83\u7ec4\u5408\u7535\u8def\u7684\u9009\u62e9\u4e0e\u8bbe\u8ba1\uff1a

\u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684\u8bbe\u8ba1\u662f\u7c7b\u4f3c\u7684\uff0c\u5982\u4e0b\uff1a

  1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
    1. \u63cf\u8ff0\u7cfb\u7edf\u884c\u4e3a\u8fc7\u7a0b\u4e2d\uff0c\u8981\u6ce8\u610f\u72b6\u6001\u7684\u590d\u7528\uff08\u4e0d\u8fc7\u5e76\u975e\u72b6\u6001\u8d8a\u5c11\u6210\u672c\u5c31\u8d8a\u5c0f\uff0c\u8fd9\u91cc\u6709\u89e6\u53d1\u5668\u6570\u91cf\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684 trade-off\uff09\uff1b
    2. \u786e\u5b9a\u7535\u8def\u7684\u521d\u59cb\u72b6\u6001\uff08\u590d\u4f4d\u72b6\u6001(reset state)\uff0c\u901a\u8fc7\u7ed9\u5b9a\u590d\u4f4d(reset)\u4fe1\u53f7\u5b9e\u73b0\uff09\uff1b
      • \u590d\u4f4d\u4e00\u822c\u53ef\u4ee5\u662f\u5f02\u6b65\u7684\uff1b
  2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
  3. \u7ed9\u8bbe\u8ba1\u597d\u7684\u72b6\u6001\u7f16\u7801\u8d4b\u503c\uff0c\u5f97\u5230\u5177\u4f53\u7684\u72b6\u6001\u8868\uff1b
    1. \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 \u6309\u8ba1\u6570\u987a\u5e8f\u3001 \u6309\u683c\u96f7\u7801\u3001\u7528\u72ec\u70ed\u7801 \u6765\u7ed9\u72b6\u6001\u8d4b\u503c\uff0c\u66f4\u7cfb\u7edf\u7684\u65b9\u6cd5\u6bd4\u8f83\u590d\u6742\uff0c\u4e0d\u505a\u8ba8\u8bba\uff1b
    2. \u5176\u4e2d\u8fd8\u6709\u4e00\u79cd\u60c5\u51b5\u662f\u6240\u9700\u8981\u7684\u72b6\u6001\u4e0d\u80fd\u5b8c\u6574\u586b\u5145 \\(2^n\\) \u79cd\u60c5\u51b5\uff0c\u9700\u8981\u8bbe\u8ba1\u65e0\u6548\u72b6\u6001\uff0c\u8fd9\u79cd\u65f6\u5019\u53ef\u4ee5\u4e0d\u8003\u8651\u5b83\u4eec\uff1b
  4. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u4f7f\u7528\u7684\u89e6\u53d1\u5668\u53ca\u5176\u8f93\u5165\u65b9\u7a0b\uff1b
  5. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u8f93\u51fa\u65b9\u7a0b\uff1b
  6. \u4f18\u5316\u8f93\u5165\u65b9\u7a0b\u548c\u8f93\u51fa\u65b9\u7a0b\uff1b
  7. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
  8. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
    • \u4e3b\u8981\u5c31\u662f\u770b\u80fd\u4e0d\u80fd\u590d\u73b0\u72b6\u6001\u56fe\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u673a","title":"\u72b6\u6001\u673a","text":"

\u5c3d\u7ba1\u5728\u5c0f\u89c4\u6a21\u7684\u8bbe\u8ba1\u4e2d\uff0c\u72b6\u6001\u56fe\u8868\u73b0\u826f\u597d\uff0c\u4f46\u662f\u968f\u7740\u8bbe\u8ba1\u7684\u7cfb\u7edf\u89c4\u6a21\u53d8\u5927\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u52a0\u6cdb\u7528\u7684\u65b9\u5f0f\u6765\u8868\u8fbe\u7c7b\u4f3c\u7684\u65f6\u5e8f\u903b\u8f91\u3002

\u4e8e\u662f\uff0c\u6211\u4eec\u5728\u72b6\u6001\u56fe\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4fee\u6539\uff0c\u8bbe\u8ba1\u4e86 \u72b6\u6001\u673a(State-Machine Diagram) \u6765\u505a\u8fd9\u4ef6\u4e8b\u3002

\u72b6\u6001\u673a\u6df7\u7528\u4e86\u7c73\u52d2\u578b\u548c\u6469\u5c14\u578b\u7684\u8f93\u51fa\u683c\u5f0f\uff0c\u4f18\u52a3\u5728 \u72b6\u6001\u56fe \u4e2d\u6709\u6240\u63d0\u53ca\u3002\u5e76\u4e14\uff0c\u6709\u9650\u56fe\u5c06\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u4e5f\u5199\u5165\uff0c\u603b\u4f53\u4e0a\u5bf9\u7535\u8def\u8bbe\u8ba1\u66f4\u53cb\u597d\u3002\u4e0b\u56fe\u662f\u72b6\u6001\u673a\u7684\u4e00\u4e2a\u201c\u8303\u5f0f\u201d\u3002

Generic State Diagram Template

\u9996\u5148\u89e3\u91ca\u4e00\u4e0b\u8fd9\u4e2a\u201c\u8303\u5f0f\u201d\uff1a

\u5177\u4f53\u89e3\u91ca\u72b6\u6001\u673a\u6709\u54ea\u4e9b\u5185\u5bb9\uff0c\u4ee5\u53ca\u5404\u4e2a\u90e8\u5206\u4e4b\u95f4\u7684\u903b\u8f91\u3002\u5173\u4e8e\u5404\u4e2a\u90e8\u5206\u51fa\u73b0\u7684\u4f4d\u7f6e\uff0c\u8bf7\u53c2\u8003 Template\u3002

\u53e6\u5916\uff0c\u4e3a\u4e86\u7b80\u5316\u8bed\u53e5\uff0c\u4e0b\u9762\u7684\u8bf4\u6cd5\u7701\u7565\u4e86\u65f6\u949f\uff0c\u8bf7\u8bb0\u5f97\u8003\u8651\u3002

\u72b6\u6001\u673a\u6a21\u578b\u4e3b\u8981\u6709\u4e09\u8981\u7d20\uff1a\u8f93\u5165\u6761\u4ef6(Input Conditions)\u3001\u72b6\u6001\u8f6c\u79fb(Transitions) \u548c \u8f93\u51fa\u884c\u4e3a(Output Actions)\u3002\u603b\u4f53\u6765\u8bf4\uff0c\u8f93\u5165\u6761\u4ef6\u544a\u8bc9\u6211\u4eec\u6574\u4e2a\u72b6\u6001\u673a\u8981\u5982\u4f55\u53d8\u5316\uff1b\u72b6\u6001\u8f6c\u79fb\u63cf\u8ff0\u4e86\u72b6\u6001\u673a\u7684\u5185\u90e8\u8f6c\u79fb\u884c\u4e3a\uff0c\u5373\u56fe\u8bba\u4e0a\u7684\u6709\u5411\u8054\u901a\u5173\u7cfb\uff1b\u8f93\u51fa\u884c\u4e3a\u63cf\u8ff0\u52a8\u6001\u53d8\u5316\u8fc7\u7a0b\u4e2d\u72b6\u6001\u673a\u7684\u5bf9\u5916\u8868\u8fbe\u3002\u5176\u4e2d\uff0c\u72b6\u6001\u8f6c\u79fb\u548c\u8f93\u51fa\u884c\u4e3a\u662f\u6211\u4eec\u9700\u8981\u5173\u6ce8\u7684\u72b6\u6001\u673a\u7684\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u8f93\u5165\u6761\u4ef6\u662f\u6211\u4eec\u7528\u6765\u505a\u5b9e\u65f6\u5224\u65ad\u7684\u5916\u90e8\u4f9d\u636e\u3002

\u300c\u8f93\u5165\u6761\u4ef6\u300d\u662f\u7531\u8f93\u5165\u53d8\u91cf\u5f62\u6210\u7684\u4e00\u4e2a\u5e03\u5c14\u65b9\u7a0b\uff0c\u5728\u6574\u4e2a\u72b6\u6001\u673a\u4e2d\uff0c\u8f93\u5165\u662f\u53d8\u5316\u7684\u201c\u56e0\u53d8\u91cf\u201d\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u65e0\u8bba\u662f\u72b6\u6001\u8f6c\u79fb\u8fd8\u662f\u8f93\u51fa\uff0c\u90fd\u53d6\u51b3\u4e8e\u8f93\u5165\u6761\u4ef6\u3002\u800c\u5bfc\u81f4\u7279\u5b9a\u884c\u4e3a\u7684\u8f93\u5165\u6761\u4ef6\u5219\u88ab\u5206\u7c7b\u4e3a \u8f6c\u79fb\u6761\u4ef6(Transition Condition, TC) \u548c \u8f93\u51fa\u6761\u4ef6(Output Condition, OC)\u3002

\u300c\u72b6\u6001\u8f6c\u79fb\u300d\u5728\u56fe\u4e2d\u8868\u73b0\u4e3a\u6709\u5411\u8fb9\uff0c\u5f53 TC \u6210\u7acb\u65f6\uff0c\u72b6\u6001\u8f6c\u79fb\u53d1\u751f\uff1b\u6216\u8005\u5bf9\u4e8e\u65e0\u6761\u4ef6\u8f6c\u79fb\uff0c\u53ea\u8981\u5f97\u5230\u65f6\u949f\u8109\u51b2\u5c31\u4f1a\u8f6c\u79fb\u5230\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002

\u300c\u8f93\u51fa\u884c\u4e3a\u300d\u5728\u72b6\u6001\u673a\u4e2d\u6709\u56db\u79cd\u89e6\u53d1\u65b9\u6cd5\uff08\u5373\u56db\u79cd OC\uff09\uff1aMoore\u3001\u4e0d\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Independent, TCI) Mealy\u3001\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Dependent, TCD) Mealy \u548c \u4f9d\u8d56\u8f6c\u79fb\u548c\u8f93\u51fa\u6761\u4ef6(Transition and Output-condition Dependent, TOCD) Mealy\u3002\u6839\u636e\u5b57\u9762\u610f\u601d\u6765\u770b\uff1a

In a given state, an output action occurs if: (a) it is unconditional (Moore), (b) TCI and its output condition OC = 1, (c) TCD and its transition condition TD = 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 \\]

Tips: \u4e0a\u9762\u662f\u5bf9 Transition Condition \u7684\u7ea6\u675f\uff0c\u5c06 TC \u6362\u6210 OC \u4e5f\u9700\u8981\u6210\u7acb\u3002

\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

\u6ce8\u610f\uff0c\u56fe\u4e2d\u6709\u4e00\u4e2a\u9519\u8bef\uff08\u5927\u6982\uff09\uff0c\u53f3\u4fa7 \\(S_1\\) \u7684 OC \u5e94\u4e3a \\((\\overline{A}\\cdot\\overline{B})\\)\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u5ef6\u65f6\u5206\u6790","title":"\u5ef6\u65f6\u5206\u6790","text":"

\u9996\u5148\uff0c\u81ea\u4e0a\u800c\u4e0b\u7684\u7ed9\u51fa\u89c2\u5ff5\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\u6709\u4e24\u4e2a\u4e3b\u8981\u90e8\u5206\u548c\u4e00\u4e2a\u6b21\u8981\u90e8\u5206\uff1a

  1. \u7ec4\u5408\u7535\u8def\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
  2. \u89e6\u53d1\u5668\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
  3. \u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\uff1b

\u5e76\u4e14\u5f80\u5f80\u662f\u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\uff0c\u8ba1\u7b97\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u7684\u65f6\u95f4\u3002\u6700\u6838\u5fc3\u7684\u95ee\u9898\u5c31\u662f\u8ba1\u7b97\u7535\u8def\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\u7684\u6700\u77ed\u65f6\u949f\u5468\u671f\u3002\u63a5\u4e0b\u6765\uff0c\u81ea\u4e0b\u800c\u4e0a\u7684\u8fdb\u884c\u7ec6\u8282\u8865\u5145\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","title":"\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","text":"

\u8fd9\u4e00\u90e8\u5206\u7684\u8be6\u7ec6\u5185\u5bb9\u5df2\u7ecf\u5728 \u4e0a\u4e00\u7ae0 \u4ecb\u7ecd\u8fc7\u4e86\uff0c\u5728\u8fd9\u91cc\uff0c\u4e3a\u4e86\u7b80\u5316\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6211\u4eec\u5168\u90e8\u91c7\u7528 \\(t_{pd}\\)\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u5ef6\u65f6","title":"\u89e6\u53d1\u5668\u5ef6\u65f6","text":"

\u89e6\u53d1\u5668\u5ef6\u65f6\u76f8\u6bd4\u7ec4\u5408\u7535\u8def\u5ef6\u65f6\u590d\u6742\u5f88\u591a\uff0c\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u4fdd\u8bc1\u91c7\u6837\u3002\u4e5f\u5c31\u662f\u8bf4\u5b83\u7684\u201c\u5ef6\u65f6\u201d\u5e76\u4e0d\u4ec5\u4ec5\u662f\u56e0\u4e3a\u7535\u4fe1\u53f7\u4f20\u64ad\u7684\u5ef6\u8fdf\uff0c\u8fd8\u6709\u4e3a\u4e86\u4fdd\u8bc1\u4fe1\u53f7\u7a33\u5b9a\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u3002

\u5927\u81f4\u6765\u8bf4\u6709\u4e09\u4e2a\u90e8\u5206\uff1a

\u4e00\u7bc7\u4ecb\u7ecd Setup Time \u548c Hold Time \u7684 \u6587\u7ae0\u3002

\u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\u4e0d\u540c\uff0c\u4e3b\u8981\u7684 Setup Time \u4e5f\u4e0d\u540c\uff1a

\u5176\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684\u4e00\u4e9b\u70b9\u662f\uff1a

  1. \u8fd9\u51e0\u4e2a\u65f6\u95f4\u70b9\u8d77\u70b9/\u7ec8\u70b9\u90fd\u662f\u89e6\u53d1\u8fb9\u7f18\uff1b
  2. Propagation Time \u4e00\u5b9a\u957f\u4e8e Hold Time\uff0c\u56e0\u6b64\u5728\u8ba1\u7b97\u7535\u8def\u5ef6\u8fdf\u65f6\u53ea\u8003\u8651 Propagation Time\uff1b
  3. Pulse-trigger \u548c Edge-trigger \u5728\u8868\u73b0\u4e0a\u7684\u533a\u522b\u5728\u4e8e Setup Time\uff0c\u524d\u8005\u9700\u8981\u8986\u76d6\u6574\u4e2a pulse(pos or neg)\uff1b
"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u677e\u5f1b\u65f6\u95f4","title":"\u677e\u5f1b\u65f6\u95f4","text":"

\u5b9e\u9645\u4e0a\u8fd9\u5c31\u662f\u7ed9\u6574\u4e2a\u7535\u8def\u7684\u4e00\u4e2a\u201c\u5bb9\u5dee\u201d\u65f6\u95f4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u8bef\u5dee\uff0c\u4f46\u662f\u7531\u4e8e\u901a\u8fc7\u524d\u4e24\u8005\u8ba1\u7b97\u51fa\u6765\u7684\u662f\u6700\u77ed\u65f6\u95f4\uff0c\u6240\u4ee5\u677e\u5f1b\u65f6\u95f4\u5fc5\u5b9a\u975e\u8d1f\u3002\uff08\u4e0d\u80fd\u5012\u6263\uff01\uff09

"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","title":"\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","text":"

\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u8ba1\u7b97\u5b9e\u9645\u4e0a\u662f\u4e3a\u4e86\u8ba1\u7b97\u65f6\u5e8f\u7535\u8def\u8fd0\u4f5c\u7684\u6700\u5927\u9891\u7387\u4ee5\u8bbe\u8ba1\u65f6\u949f\u9891\u7387\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7b97\u51fa\u7535\u8def\u80fd\u591f\u7a33\u5b9a\u5de5\u4f5c\u7684\u6700\u5c0f\u65f6\u949f\u671f\u3002

\u5176\u8ba1\u7b97\u9075\u5faa\u4e00\u5b9a\u65b9\u6cd5\uff1a

\u56fe\u4e2d \\(t_{pd,FF}\\) \u6307\u89e6\u53d1\u5668\u7684 propagation time\uff0c\\(t_{COMB}\\) \u6307\u7ec4\u5408\u7535\u8def\u7684\u603b\u4f20\u64ad\u65f6\u95f4\uff08\u4e00\u822c\u60c5\u51b5\u4e0b \\(t_{COMB} = \\max{\\sum_i t_{pd,gate_i}}\\)\uff09\uff0c\\(t_{s}\\) \u6307\u89e6\u53d1\u5668\u7684 setup time\uff0c\\(t_{slack}\\) \u8868\u793a\u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\u3002

\uff08\u5047\uff09\u7ecf\u9a8c\u4e4b\u8c08

\u4e00\u822c\u4ece\u4e00\u4e2a FF \u7684\u8f93\u51fa\u51fa\u53d1\u5230 FF \u7684\u8f93\u5165\u7ed3\u675f\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/","title":"Chap 5 Digital Hardware Implementation","text":"

\u7ea6 1303 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u6ce8\u610f

\u672c\u7ae0\u8282\u5728\u8865\u5929\u4e2d\u5b8c\u6210\uff0c\u5185\u5bb9\u53ef\u80fd\u6bd4\u8f83\u7b80\u7565\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u53ef\u91cd\u7f16\u7a0b\u6280\u672f","title":"\u53ef\u91cd\u7f16\u7a0b\u6280\u672f","text":"

\u53ef\u91cd\u7f16\u7a0b\u6280\u672f(programmable implementation technologies)

\u76f4\u63a5\u66f4\u6539\u7535\u8def\u6765\u4fee\u6539\u7535\u8def\u529f\u80fd\u88ab\u79f0\u4e3a\u786c\u7f16\u7a0b\uff0c\u800c\u53ef\u91cd\u53d8\u6210\u6280\u672f\u8ba9\u6211\u4eec\u80fd\u591f\u4e0d\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u7684\u60c5\u51b5\u4e0b\uff0c\u5b9e\u73b0\u903b\u8f91\u529f\u80fd\u7684\u91cd\u65b0\u7f16\u8f91\u3002

FPGA

\u73b0\u573a\u53ef\u7f16\u7a0b\u903b\u8f91\u95e8\u9635\u5217(Field Programmable Gate Array, FPGA) - \u67e5\u627e\u8868(lookup table, LUT)

\u7f16\u7a0b\u6280\u672f(programming technologies) \u5728\u786c\u4ef6\u5c42\u9762\u6709\u4e09\u79cd\u5b9e\u73b0\u624b\u6bb5\uff1a

\u8bfe\u7a0b\u4e2d\u4ecb\u7ecd\u7684\u53ef\u91cd\u7f16\u7a0b\u7684\u5668\u4ef6\u4e3b\u8981\u6709\u5982\u4e0b\u56db\u79cd\uff1a

\u524d\u4e09\u8005\u90fd\u53ea\u80fd\u91cd\u5199\u4e00\u6b21\uff0c\u5982\u4e0b\u662f\u5b83\u4eec\u7684\u91cd\u5199\u5185\u5bb9\uff1a

\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

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u903b\u8f91\u7b26\u53f7\u4ecb\u7ecd","title":"\u903b\u8f91\u7b26\u53f7\u4ecb\u7ecd","text":"

Buffer

\u7b80\u5316\u8868\u793a\u4e00\u4e2a\u53d8\u91cf\u7684\u81ea\u8eab\u548c\u5176\u975e\uff1b

Wire connecting

\u5728\u53ef\u7f16\u7a0b\u903b\u8f91\u7535\u8def\u4e2d\uff0c\u7ebf\u7684\u8fde\u63a5\u4e0d\u518d\u53ea\u6709\u5355\u7eaf\u7684\u8fde\u901a\u548c\u4e0d\u8fde\u901a\u7684\u5173\u7cfb\uff1a

\u5bf9\u4e8e\u4e24\u6761\u76f8\u4ea4\u5bfc\u7ebf\uff1a

\u7279\u522b\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5143\u5668\u4ef6\u7684\u6240\u6709\u8f93\u5165\u90fd\u662f programmable\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u628a\u8fd9\u4e2a \u274c \u753b\u5230\u903b\u8f91\u95e8\u4e0a\uff08\u5982\u4e0b\u56fe e \u548c f\uff09\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#rom","title":"ROM","text":"

ROM \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

\u800c ROM \u7684\u5927\u5c0f\u5982\u4e0b\u8ba1\u7b97\uff08\u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff09\uff1a

\\[ \\begin{aligned} ROM\\;\\;size\\;\\;&=\\;\\;address\\;\\;width\\;\\;\\times\\;\\;word\\;\\;width&\\\\ &=\\;\\;2^2\\;\\;\\times\\;\\;4\\;\\;=\\;\\;16\\;\\;bit& \\end{aligned} \\] eg

\u66f4\u6e05\u6670\u7684\u8868\u793a\u5176\u5185\u90e8\u903b\u8f91\u7684\uff0c\u53ef\u4ee5\u5c06 ROM \u5199\u6210\u8fd9\u6837\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pal","title":"PAL","text":"

\u53ef\u91cd\u7f16\u7a0b\u8f93\u5165\u7ec4\u5408\u6765\u5f97\u5230\u56fa\u5b9a\u8f93\u51fa\u3002

\u5176\u5177\u6709\u4e00\u4e2a\u7f3a\u9677\u662f\uff0c\u56e0\u4e3a\u8868\u8fbe\u51fd\u6570\u7684\u65b9\u6cd5\u4e0d\u662f\u901a\u8fc7 SOM \u6216\u8005 POM \u7684\u5f62\u5f0f\uff0c\u6240\u4ee5\u4e0d\u4e00\u5b9a\u80fd\u591f\u5b8c\u5907\u8868\u8fbe\u51fd\u6570\u3002

\u5728\u6b64\u57fa\u7840\u4e0a\u7684\u4e00\u4e2a\u6539\u8fdb\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\u3002

eg

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pla","title":"PLA","text":"

\u4e0e PAL \u7684\u533a\u522b\u5728\u4e8e\uff0c\u5728\u8f93\u51fa\u7684\u65f6\u5019\u4e5f\u80fd\u5bf9\u8f93\u51fa\u7ec4\u5408\u8fdb\u884c\u91cd\u7f16\u7a0b\u3002

\u5176\u540c PAL \u4e00\u6837\u5177\u6709\u4e00\u4e2a\u7f3a\u9677\u662f\uff0c\u56e0\u4e3a\u8868\u8fbe\u51fd\u6570\u7684\u65b9\u6cd5\u4e0d\u662f\u901a\u8fc7 SOM \u6216\u8005 POM \u7684\u5f62\u5f0f\uff0c\u6240\u4ee5\u4e0d\u4e00\u5b9a\u80fd\u591f\u5b8c\u5907\u8868\u8fbe\u51fd\u6570\u3002

\u5728\u57fa\u7840\u4e0a\u4e00\u4e2a\u6539\u8fdb\u662f\u5728\u8f93\u51fa\u7684\u65f6\u5019\u518d\u505a\u4e00\u6b21\u5f02\u6216\uff08\u4e0d\u7528\u975e\u95e8\u4f53\u73b0\u4e86\u53ef\u91cd\u7f16\u7a0b\u7684\u601d\u60f3\uff09\uff0c\u4ee5\u4ea7\u751f\u65b0\u7684\u9879\uff0c\u6765\u5f25\u8865\u9879\u4e0d\u8db3\u7684\u95ee\u9898\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u51fa\u73b0\u4e86\u65b0\u7684\u9879\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#lookup-tables","title":"Lookup Tables","text":"

\u901a\u8fc7\u8ba9\u6570\u636e\u6e90\u63a5\u5185\u5b58\uff0c\u5e76\u901a\u8fc7\u4fee\u6539\u771f\u503c\u8868\u5185\u7684\u503c\uff0c\u5373\u4fee\u6539\u5185\u5b58\u91cc\u7684\u503c\uff0c\u6765\u5b9e\u73b0\u6570\u636e\u6e90\u7684\u53d8\u5316\uff0c\u6765\u6539\u53d8 MUX \u7684\u884c\u4e3a\u3002

\u4f46\u662f\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u51fd\u6570\u8f93\u5165\u7684\u6570\u91cf\u4f1a\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u901a\u8fc7\u7075\u6d3b\u7ec4\u5408\u7684\u65b9\u6cd5\uff08\u6bd4\u5982\u901a\u8fc7\u56db\u9009\u4e8c\u9009\u4e00\u7684\u65b9\u5f0f\uff0c\u7528\u4e09\u4e2a\u4e8c\u9009\u4e00\u7684 MUX \u6765\u5b9e\u73b0\u56db\u9009\u4e00\uff09\u6765\u5b9e\u73b0\u591a\u8f93\u5165\u3002

\u5e38\u89c1\u7684 LUT \u5927\u5c0f\u4ee5 16bits \u6216 64bits \u7684 4 \u8f93\u5165\u6216 6 \u8f93\u5165\u4e3a\u4e3b\u3002

\u7531\u4e8e LUT \u5b58\u7684\u672c\u8d28\u4e0a\u662f\u771f\u503c\u8868\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u8f93\u5165\u7b26\u5408\u8981\u6c42\u7684\u903b\u8f91\u51fd\u6570\u3002

\u6240\u4ee5\uff0c\u95ee\u9898\u5c31\u53d8\u5316\u4e3a\u5982\u4f55\u7528\u8f83\u5c0f\u7684 LUT \u6765\u7ec4\u5408\u5b9e\u73b0\u590d\u6742\u7684\u903b\u8f91\u51fd\u6570\u3002

LUT \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

FPGA \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

\u5176\u4e3b\u8981\u5206\u4e3a\u4e09\u4e2a\u7ec4\u6210\u90e8\u5206\uff1a

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#clb","title":"CLB","text":"

CLB \u662f FPGA \u4e2d\u7684\u57fa\u7840\u903b\u8f91\u5355\u5143\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#sm","title":"SM","text":"

\u901a\u8fc7\u76f8\u5f53\u590d\u6742\u7684\u7b97\u6cd5\uff0c SM \u4f1a\u6839\u636e\u76ee\u6807\u903b\u8f91\uff0c\u9009\u62e9\u94fe\u63a5\u4e0d\u540c\u7684 CLB \u4ee5\u5b9e\u73b0\u590d\u6742\u903b\u8f91\u3002

\u5b83\u5177\u6709\u8fd9\u4e9b\u57fa\u672c\u5c5e\u6027\uff1a

  1. Flexibility: \u8bc4\u4f30\u4e00\u6761\u7ebf\u53ef\u4ee5\u8fde\u63a5\u5230\u591a\u5c11\u7ebf\uff1b
  2. Topology: \u54ea\u4e9b\u7ebf\u53ef\u4ee5\u88ab\u8fde\u63a5\u5230\uff1b
  3. Routability: \u6709\u591a\u5c11\u56de\u8def\u53ef\u4ee5\u88ab\u8def\u7531\uff1b

"},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#iob","title":"IOB","text":"

IOB \u7528\u6765\u5bf9\u5916\u90e8\u8bbe\u5907\u8fdb\u884c\u8fde\u63a5\uff0c\u7528\u6765\u63a7\u5236\u8f93\u5165\u548c\u8f93\u51fa\u3002

eg for FPGA

\u901a\u8fc7 FPGA \u5b9e\u73b0 \\(f=x_1x_2+\\overline{x_2x_3}\\)\uff1a

\u5206\u89e3\u95ee\u9898\uff1a\\(f_1 = x_1x_2,\\;\\;f_2=\\overline{x_2x_3},\\;\\;f=f_1+f_2\\)\u3002

\u5728\u8f6f\u4ef6\u5c42\u9762\u7f16\u7a0b\u5b8c\u540e\uff0c\u4f1a\u751f\u6210\u4f4d\u6d41\u6587\u4ef6(bitfile)\uff0c\u4e0b\u8f7d\u5230\u677f\u65f6\u4f1a\u66f4\u65b0 FPGA \u4e2d\u7684\u5185\u5bb9\u3002

\u7ec4\u5408\u51fd\u6570\u7684\u5b9e\u73b0\u65b9\u6cd5

\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u4e0d\u7ba1\u662f\u53ef\u91cd\u7f16\u7a0b\u8fd8\u662f\u4e0d\u53ef\u91cd\u7f16\u7a0b\uff0c\u90fd\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u8fdb\u884c\u4e00\u6b21\u5c0f\u7ed3\uff1a

  1. Decoders & OR gates
    • \u5c06\u8bd1\u7801\u51fa\u6765\u7684\u9700\u8981\u7684\u76ee\u6807\u7ec4\u5408\u90fd OR \u5728\u4e00\u8d77\uff1b
  2. MUXs
    • \u901a\u8fc7\u591a\u8def\u9009\u62e9\u5668\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\uff1b
  3. ROMs
  4. PALs
  5. PLAs
  6. LUTs
"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/","title":"Chap 6 Registers & Register Transfers","text":"

\u7ea6 6700 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 22 \u5206\u949f

"},{"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":"

\u4f46\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u5982\u56fe\u7684\u5bc4\u5b58\u5668\u5728\u6bcf\u4e2a\u65f6\u949f\u90fd\u5141\u8bb8\u8f7d\u5165\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u90fd\u4f1a\u6539\u53d8\u4e3a\u8f93\u5165\u3002\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5373\u4f7f\u6211\u4eec\u4e0d\u7ba1\u5b83\u5b83\u4e5f\u80fd\u4fdd\u6301\u4e4b\u524d\u7684\u503c\uff0c\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u6848\u3002

\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 = 0\\)\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

\u5bf9\u4e8e n bits \u7684\u5bc4\u5b58\u5668\u5355\u5143\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0\u5176 1 bit \u7684\u5bc4\u5b58\u5668\u5355\u5143\uff0c\u5e76\u590d\u5236 n \u4efd\u5b9e\u73b0\u3002

\u8bbe\u8ba1\u5bc4\u5b58\u5668\u5355\u5143\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5bc4\u5b58\u5668\u5355\u5143\u8fdb\u884c\u5b9a\u4e49\u3002\u800c\u6307\u5b9a(Specify)\u4e00\u4e2a\u5bc4\u5b58\u5668\u5355\u5143\u7684\u529f\u80fd\u7684\u4e3b\u8981\u6709\u8fd9\u4e9b\u65b9\u9762\uff1a

\u5728\u5b9e\u9645\u5b9e\u73b0\u65f6\uff0c\u5206\u4e3a MUX \u5b9e\u73b0\u548c\u65f6\u5e8f\u903b\u8f91\u5b9e\u73b0\u4e24\u79cd\u65b9\u6cd5\u3002

\u524d\u8005\u5c31\u662f#\u57fa\u4e8e Mux \u5b9e\u73b0\u4f20\u8f93\u4e2d\u5c06\u8981\u63d0\u5230\u7684\u90a3\u6837\uff0c\u5173\u4e8e\u4e0a\u9762\u54ea\u4e9b\u5185\u5bb9\u5728\u8be5\u5c0f\u8282\u4e2d\u7684\u4f53\u73b0\u5982\u4e0b\u56fe\uff1b

\u4e5f\u5c31\u662f\u901a\u8fc7\u5206\u522b\u5b9e\u73b0\u903b\u8f91\uff0c\u7136\u540e\u901a\u8fc7\u63a7\u5236\u4fe1\u53f7\u9009\u62e9\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\uff08\u51b3\u5b9a\u6307\u4ee4\u7684\u5e8f\u5217\uff09\u6570\u636e\u901a\u8def(Datapath)\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002

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\u4f4d\u79fb(shift)\uff08\u5173\u4e8e\u8fd9\u91cc\u7684shift\u7684\u542b\u4e49\u6211\u5b58\u7591\uff09 \u548c \u8ba1\u6570(count) \u7b49\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u5bc4\u5b58\u5668\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u79fb\u52a8\u4e86\u7684\u52a0\u5de5\uff0c\u88ab\u79f0\u4e3a\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c(Register Transfer Operations)\uff0c\u5b83\u4eec\u4e3b\u8981\u5305\u542b\u8fd9\u4e09\u4e2a\u90e8\u5206\uff1a

  1. \u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u96c6\u5408\uff1b
  2. \u5bf9\u4e8e\u6570\u636e\u7684\u64cd\u4f5c\uff1b
  3. \u76d1\u7763\u64cd\u4f5c\u5e8f\u5217\u7684\u63a7\u5236\uff1b

\u5176\u4e2d\uff0c\u6700\u57fa\u7840\u7684\u90a3\u90e8\u5206\u64cd\u4f5c\u88ab\u79f0\u4e3a\u5fae\u64cd\u4f5c(microoperation)\uff0c\u5b83\u4eec\u662f\u5b9e\u73b0\u590d\u6742\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982\u5c06 R1 \u7684\u6570\u636e\u8f7d\u5165 R2\uff0c\u5c06 R1 \u548c R2 \u76f8\u52a0\uff0c\u6216\u662f\u81ea\u589e R1 \u7b49\u3002\u5b83\u4eec\u901a\u5e38\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\u64cd\u4f5c--\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c & \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\u5904\u7406\u7684\u662f\u6570\u636e\u4e4b\u95f4\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\u4e0d\u786e\u5b9a\uff0c\u4e5f\u8bb8\u53ef\u80fd\u90fd\u4e3a\u96f6\uff1f\u6211\u611f\u89c9\u53d6\u51b3\u4e8e\u4fdd\u6301\u7684\u5b9e\u73b0\u3002\uff09\u6765\u8868\u793a\u9009\u62e9\u54ea\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d \\(K_0\\sim K_{n-1}\\)\uff09\uff0c\u518d\u901a\u8fc7 Encoder \u5c06\u5b83\u4eec\u7f16\u7801\u4f5c\u4e3a MUX \u7684\u8f93\u5165\u9009\u62e9\u4fe1\u53f7\uff08\u4e0b\u56fe\u4e2d \\(S_m \\sim S_0\\)\uff09\uff0c\u4ece\u591a\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d 0 \\sim k \\sim (n-1)$\uff09\u4e2d\u9009\u62e9\u5bf9\u5e94\u7684\u6e90\uff0c\u5e76\u8f93\u51fa\uff0c\u7ed9\u5230 R0\uff1b\u6b64\u5916\uff0c\u5c06\u9009\u62e9\u4fe1\u53f7\u90fd\u6216\u8d77\u6765\uff0c\u4f5c\u4e3a R0 \u7684 Load \u4fe1\u53f7\u8f93\u5165\u3002

\u5176\u4e2d MUX \u7684 \\(k \\sim (n-1)\\) \u5b9e\u73b0\u4e86\u8f6c\u79fb\u64cd\u4f5c\u3002

\u5c0f\u7ed3

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0cMUX \u5b9e\u73b0\u4e3b\u8981\u7684\u5b9e\u73b0\u4e86\u591a\u5bf9\u4e00\u7684\u6570\u636e\u4f20\u8f93\u95ee\u9898\u3002\u5982\u679c\u6211\u4eec\u5355\u5355\u4f7f\u7528 MUX \u6765\u5b8c\u6210\u5bc4\u5b58\u5668\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u4e92\uff08\u5047\u8bbe\u6240\u6709\u5bc4\u5b58\u5668\u90fd\u80fd\u76f8\u4e92\u4f20\u8f93\u6570\u636e\uff09\uff0c\u90a3\u5c06\u8fd9\u4e2a\u6a21\u578b\uff08\u56fe\u4f8b\u5728\u4e0b\u4e00\u5c0f\u8282\uff09\u62bd\u8c61\u540e\uff0c\u6211\u4eec\u5f97\u5230\u7684\u5c06\u662f\u4e00\u5f20\u201c\u5b8c\u5168\u56fe\u201d\uff0c\u7136\u800c\u5b83\u8089\u773c\u53ef\u89c1\u7684\u5f00\u9500\u5927\u3002

\u800c\u603b\u7ebf\u5219\u975e\u5e38\u5de7\u5999\u5730\u4f18\u5316\u4e86\u8fd9\u4e2a\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u4e0a\u4f4d\u66ff\u4ee3\u5173\u7cfb\uff09\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","title":"\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","text":"

\u5728\u4e0a\u4e00\u5c0f\u8282\u7684\u5c0f\u7ed3\u4e2d\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86 MUX \u5b9e\u73b0\u7684\u4f18\u52a3\uff0c\u4e5f\u63d0\u5230\u4e86\u603b\u7ebf(bus)\u4f20\u8f93\u7684\u4f18\u52bf\uff0c\u90a3\u4e48\u5b83\u5177\u4f53\u6765\u8bf4\u5176\u5b9e\u73b0\u65b9\u6cd5\u6709\u4e24\u79cd\u2014\u2014\u901a\u8fc7\u5171\u6709 MUX \u5b9e\u73b0\uff0c\u6216\u901a\u8fc7\u4e09\u6001\u95e8\u5b9e\u73b0\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5171\u6709-mux-\u5b9e\u73b0","title":"\u5171\u6709 MUX \u5b9e\u73b0","text":"

\u8ba9\u6211\u4eec\u4ee5\u4e09\u4e2a\u5bc4\u5b58\u5668\u7684\u6a21\u578b\u4e3a\u4f8b\uff0c\u5bf9\u6bd4\u901a\u8fc7\u4e13\u6709 MUX \u5b9e\u73b0\u548c\u901a\u8fc7\u5355\u4e00\u603b\u7ebf(single bus)\u5b9e\u73b0\u7684\u533a\u522b\uff1a

\u9996\u5148\u5bf9\u603b\u7ebf\u5b9e\u73b0\u8fdb\u884c\u8bf4\u660e\uff0c\u540c\u6837\u662f\u4f7f\u7528 MUX\uff0c\u4f46\u6b64\u65f6 MUX \u4e0d\u518d\u662f\u67d0\u4e2a\u5bc4\u5b58\u5668\u7684\u4e13\u6709\u903b\u8f91(dedicated logic)\uff0c\u800c\u662f\u4e09\u4e2a\u5bc4\u5b58\u5668\u5171\u540c\u4f7f\u7528\u7684\u5171\u6709\u903b\u8f91(shared logic)\u3002\u603b\u7ebf\u4e2d\u7684 MUX \u5728\u6240\u6709\u5bc4\u5b58\u5668\u7684\u8f93\u5165\u4e2d\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\uff0c\u5e76\u5c06\u5b83\u8f93\u51fa\uff0c\u7ed9\u5230\u6240\u6709\u5bc4\u5b58\u5668\uff1b\u800c\u603b\u7ebf\u901a\u8fc7\u63a7\u5236 Load \u4fe1\u53f7\u6765\u9009\u62e9\u8ba9\u54ea\u4e2a\uff08\u6216\u54ea\u4e9b\uff09\u5bc4\u5b58\u5668\u5f97\u5230\u8fd9\u4e2a\u4fe1\u53f7\u3002

\u63a5\u4e0b\u6765\u8fdb\u884c\u5bf9\u6bd4\uff0c\u4ee5\u603b\u7ebf\u5b9e\u73b0\u4e3a\u4e3b\u4f53\uff0c\u4e0e MUX \u5b9e\u73b0\u5bf9\u6bd4\uff1a

\u800c\u56e0\u4e3a\u8fd9\u4e9b\u7279\u70b9\uff0c\u6211\u4eec\u9700\u8981\u8bc4\u4f30\u6211\u4eec\u7684\u9700\u6c42\uff0c\u9009\u62e9\u5408\u9002\u7684\u7ed3\u6784\u6765\u5b9e\u73b0\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4e09\u6001\u95e8\u5b9e\u73b0","title":"\u4e09\u6001\u95e8\u5b9e\u73b0","text":"

\u4e09\u6001\u95e8\u7684\u76f8\u5173\u5185\u5bb9\u5df2\u7ecf\u5728\u524d\u9762\u4ecb\u7ecd\uff0c\u4f20\u8f93\u95e8\u5728\u8fd9\u91cc\uff0c\u5173\u4e8e\u672c\u5c0f\u8282\u7684\u77e5\u8bc6\uff0c\u53ef\u4ee5\u91cd\u70b9\u5173\u6ce8#\u4e09\u6001\u95e8/\u788e\u788e\u5ff5\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\u7684\u4e09\u6001\u95e8\u53ea\u662f\u628a\u7ebf\u5206\u5c94\u7684\u5730\u65b9\u79fb\u52a8\u5230\u4e86\u5bc4\u5b58\u5668\u9644\u8fd1\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4e0d\u5982\u8bf4\u662f\u8282\u7701\u4e86\u5bfc\u7ebf\u7684\u957f\u5ea6\u3002\u4f46\u662f\u968f\u7740\u8f93\u5165\u7684\u589e\u52a0\uff0cMUX \u7684\u7ed3\u6784\u4f1a\u8d8a\u6765\u8d8a\u590d\u6742\u4e14\u9700\u8981\u91cd\u65b0\u8bbe\u8ba1\uff0c\u4f46\u4e09\u6001\u95e8\u53ea\u9700\u8981\u91cf\u7684\u589e\u52a0\u5c31\u884c\u4e86\uff0c\u6240\u4ee5\u786e\u5b9e\u662f\u66f4\u52a0\u5438\u5f15\u4eba\u3002\uff08\u5f53\u7136\uff0c\u867d\u7136\u4e66\u4e2d\u6ca1\u8bf4\uff0c\u4f46\u662f\u6211\u89c9\u5f97 Enable \u5fc5\u987b at most one-hot\uff0c\u800c\u8fd9\u90e8\u5206\u7684\u903b\u8f91\u5bf9\u4e8e\u4e24\u4e2a\u5b9e\u73b0\u65b9\u6cd5\u6765\u8bf4\u662f\u4e00\u6837\u7684\uff09

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","title":"\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","text":"

A microoperation is an elementary operation performed on data stored in registers or in memory.

\u5fae\u64cd\u4f5c\u4e00\u822c\u5206\u4e3a\u8fd9\u56db\u79cd\uff1a

  1. \u8f6c\u79fb\uff0ctransfer microoperations\uff0c\u5c06\u6570\u636e\u4ece\u4e00\u4e2a\u5bc4\u5b58\u5668\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u5bc4\u5b58\u5668\uff1b
  2. \u7b97\u672f\uff0carithmetic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u7b97\u672f\u8fd0\u7b97\u64cd\u4f5c\uff1b
  3. \u903b\u8f91\uff0clogic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u903b\u8f91\u8fd0\u7b97\u64cd\u4f5c\uff1b
  4. \u4f4d\u79fb\uff0cshift microoperations\uff0c\u5bf9\u6570\u636e\u7684\u4f4d\u79fb\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\u4f4d\u79fb\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\u4f4d\u79fb\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/#\u4f4d\u79fb","title":"\u4f4d\u79fb","text":"

\u4f4d\u79fb\u7684\u5b9e\u73b0\u901a\u8fc7\u4f4d\u79fb\u5bc4\u5b58\u5668(Shift Register, SHR)\u5b9e\u73b0\u3002

\u5f15\u5165

\u4f4d\u79fb\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\u4f4d\u79fb\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":"

\u4f4d\u79fb\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\u4f4d\u79fb\u7684\u7ed3\u679c\u3002

\u4e32\u884c\u4f4d\u79fb\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\u4f4d\u79fb\uff0c\u6211\u4eec\u5f53\u7136\u9700\u8981\u586b\u5145 ? \u7684\u503c\uff0c\u4e0d\u8fc7\u8fd9\u90fd\u662f\u5c0f\u4e8b\u60c5\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5e76\u884c\u5316","title":"\u5e76\u884c\u5316","text":"

\u5e76\u884c\u5316\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff0c\u5373\u5e76\u884c\u8f93\u51fa(parallel output)\u548c\u5e76\u884c\u8f7d\u5165(parallel load)\uff0c\u5206\u522b\u5bf9\u5e94\u7740 \u5728\u540c\u4e00\u4e2a\u65f6\u95f4\u5468\u671f\u5185\u5f97\u5230\u6bcf\u4e00\u4e2a FF \u7684\u7ed3\u679c\u548c\u5bf9\u6bcf\u4e00\u4e2a FF \u8f7d\u5165\u6570\u636e\u3002

\u5e76\u884c\u8f93\u51fa\u7684\u5b9e\u73b0\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u7ed9\u6bcf\u4e00\u4e2a FF \u7684\u8f93\u51fa\u5f15\u51fa\u4e00\u6761\u7ebf\u5c31\u884c\u4e86\uff0c\u5b83\u4e0e\u4e32\u884c\u8f93\u51fa\u53ef\u4ee5\u76f4\u63a5\u540c\u65f6\u5b58\u5728\uff1b\u800c\u5e76\u884c\u8f93\u5165\u5219\u4e0e\u4e32\u884c\u8f93\u5165\u51b2\u7a81\uff0c\u4e00\u6b21\u53ea\u80fd\u5b9e\u73b0\u5176\u4e2d\u4e00\u4e2a\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e9b\u63a7\u5236\u7535\u8def\uff1a

\u770b\u8d77\u6765\u6709\u70b9\u590d\u6742\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u903b\u8f91\u8fd8\u662f\u5f88\u6e05\u6670\u7684\u3002

\u603b\u548c\u6765\u8bf4\uff0c\u5c31\u662f\uff1a

\\[ \\begin{aligned} Shift :& Q\\leftarrow \\mathrm{sl}\\; Q \\\\ \\overline{Shift}\\cdot Load :& Q\\leftarrow D \\\\ \\overline{Shift}\\cdot \\overline{Load} :& Q\\leftarrow Q \\end{aligned} \\]

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u53cc\u5411\u4f4d\u79fb\u5bc4\u5b58\u5668","title":"\u53cc\u5411\u4f4d\u79fb\u5bc4\u5b58\u5668","text":"

\u4e0a\u9762\u4ecb\u7ecd\u7684\u4f4d\u79fb\u5bc4\u5b58\u5668\u968f\u7740\u65f6\u949f\u5468\u671f\u7684\u4f9b\u7ed9\uff0c\u53ea\u80fd\u4e0d\u53ef\u9006\u3001\u5355\u5411\u5730\u8fdb\u884c\u4f4d\u79fb\uff0c\u8fd9\u79cd\u4f4d\u79fb\u5bc4\u5b58\u5668\u79f0\u4e3a\u65e0\u5411\u4f4d\u79fb\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\u4f4d\u79fb\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\u4f4d\u79fb\u4e00\u822c\u6307\u7684\u662f\u4e00\u4e2a\u53cc\u76ee\u64cd\u4f5c\uff0c\u5373\u53ef\u4ee5\u6307\u5b9a\u4f4d\u79fb\u591a\u5c11\u4f4d\uff0c\u8fd9\u4e2a\u53c2\u6570\u88ab\u79f0\u4e3a\u4f4d\u79fb\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\u4f4d\u79fb\u91cf\u7684\u4f4d\u79fb\u5b9e\u73b0\uff0c\u5728\u6211\u4eec\u63d0\u5230\u7684\u5b9e\u73b0\u4e2d\uff0c\u6307\u7684\u5c31\u662f\u6211\u4eec\u786c\u4ef6\u53ea\u5b9e\u73b0\u300c\u4e00\u4f4d\u4f4d\u79fb\u300d\uff0c\u5e76\u901a\u8fc7\u5faa\u73af\u5b9e\u73b0\u300c\u4efb\u610f\u4f4d\u4f4d\u79fb\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)\uff0c0,0\uff0c...

\u4e8e\u662f\uff0c\u4e00\u4e2a 4-Bit \u884c\u6ce2\u8ba1\u6570\u5668\u7684\u903b\u8f91\u56fe\u5c31\u5982\u4e0b\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u4f18\u70b9\u662f\u7535\u8def\u7b80\u5355\uff0c\u6210\u672c\u4f4e\uff1b\u4f46\u662f\u7f3a\u70b9\u4e5f\u5f88\u660e\u663e\uff0c\u65e2\u7136\u5b83\u4e0e\u540c\u6b65\u8ba1\u6570\u5668\u76f8\u533a\u5206\uff0c\u5c31\u8bf4\u660e\u5b83\u4e0d\u662f\u540c\u6b65\u7535\u8def\uff0c\u6bcf\u4e00\u4e2a FF \u90fd\u4f1a\u6709\u4f20\u64ad\u5ef6\u65f6\uff0c\u968f\u7740\u8ba1\u6570\u8303\u56f4\u589e\u5927\uff0c\u603b\u4f20\u64ad\u5ef6\u65f6\u4e5f\u4f1a\u589e\u52a0\uff0c\u800c\u4e3a\u4e86\u8ba9\u7535\u8def\u6b63\u5e38\u5de5\u4f5c\uff0c\u65f6\u949f\u9891\u7387\u4e5f\u8981\u56e0\u6b64\u4e0b\u964d\u3002

\u7531\u4e8e\u8fd9\u4e9b\uff0c\u4e66\u4e0a\u5bf9\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u8bc4\u4ef7\u662f\u591a\u6570\u60c5\u51b5\u4e0b\u884c\u6ce2\u52a0\u6cd5\u5668\u53ea\u4f1a\u5728\u4f4e\u529f\u8017\u7535\u8def\u4e2d\u88ab\u91c7\u7528\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u540c\u6b65\u8ba1\u6570\u5668","title":"\u540c\u6b65\u8ba1\u6570\u5668","text":"

\u540c\u6b65\u8ba1\u6570\u5668\u4ece\u5b9e\u73b0\u81ea\u589e\u7684\u539f\u7406\u4e0a\u6765\u8bf4\uff0c\u548c\u884c\u6ce2\u8ba1\u6570\u5668\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u540c\u6837\u662f\u5728\u4e0a\u4e00\u4e2a FF \u5b8c\u6210\u4e00\u6b21\u7ffb\u8f6c\u7684\u65f6\u5019\u8ba9\u4e0b\u4e00\u4e2a FF \u53d8\u5316\u3002\u53ea\u4e0d\u8fc7\u540c\u6b65\u8ba1\u6570\u5668\u4e0d\u662f\u63a7\u5236\u65f6\u949f\uff0c\u800c\u662f\u63a7\u5236\u300cFF \u5185\u7684\u503c\u662f\u5426\u53d6\u53cd\u300d\u6765\u5b9e\u73b0\uff0c\u800c\u5b83\u662f\u901a\u8fc7\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u7684\u3002

\u6211\u4eec\u77e5\u9053\uff0c\\(0 \\;\\mathrm{XOR}\\; X = X\\)\uff0c\u800c \\(1 \\;\\mathrm{XOR}\\; X = \\overline{X}\\)\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236 XOR \u7684\u67d0\u4e2a\u8f93\u5165\u662f 0 \u8fd8\u662f 1 \u6765\u5b9e\u73b0\u53d6\u53cd\u8fd8\u662f\u4fdd\u6301\u7684\u5207\u6362\u3002

\u4e0d\u8fc7\u9700\u8981\u533a\u5206\u7684\u662f\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5728\u4e0a\u4e00\u4e2a FF \u53d8\u5316\u5b8c\u624d\u5f71\u54cd\u4e0b\u4e00\u4e2a\u7684\uff0c\u6240\u4ee5\u662f 1 \u53d8 0 \u65f6\u9700\u8981\u8fdb\u4f4d\uff1b\u800c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u6240\u6709 FF \u662f\u4e00\u8d77\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u53ea\u6709\u5728\u524d\u9762\u90fd\u662f 1 \u65f6\u5019\uff0c\u8868\u793a\u4e0b\u4e00\u523b\u5b83\u4eec\u90fd\u8981\u8fdb\u4f4d\u4e86\uff0c\u5f53\u524d FF \u624d\u8fdb\u4f4d\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5efa\u7acb\u5728\u524d\u4e00\u4e2a FF \u7684\u7ed3\u679c\u8fdb\u884c\u53d8\u5316\uff1b\u800c\u5e76\u884c\u52a0\u6cd5\u5668\u662f\u5efa\u7acb\u5728\u4e0a\u4e00\u523b\u6240\u6709\u5173\u8054 FF \u7684\u72b6\u6001\uff0c\u5bf9\u4e0b\u4e00\u72b6\u6001\u7684\u9884\u5224\u3002

\u5728\u8fd9\u57fa\u7840\u4e0a\uff0c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u81ea\u589e\u5668(incrementer)\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5b9e\u73b0\u65b9\u6cd5\uff1a

(b) \u7684\u84dd\u8272\u90e8\u5206\u66ff\u6362 (a) \u7684\u84dd\u6846\u90e8\u5206\u4e3a\u7b2c\u4e8c\u79cd\u3002\u4e24\u79cd\u5206\u522b\u4e3a \u95e8\u4e32\u884c\u5b9e\u73b0 \u548c \u95e8\u5e76\u884c\u5b9e\u73b0\u3002

\u4e24\u79cd\u5b9e\u73b0\u5176\u5b9e\u539f\u7406\u90fd\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u95e8\u4e32\u884c\u727a\u7272\u67d0\u4e9b\u60c5\u51b5\u4e0b\u7684\u8fd0\u884c\u6548\u7387\uff0c\u8282\u7ea6\u4e86\u95e8\u6210\u672c\uff1b\u800c\u95e8\u5e76\u884c\u63d0\u9ad8x\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\u8f93\u5165\u51fd\u6570\u53d8\u4e3a\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\u4f4d\u79fb\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":"

\u672a\u5b8c\u6210

Control Unit

\u91cd\u70b9\u770b\u4e66\u4e0a\u7684\u4f8b\u5b50\u3002

"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/","title":"Chap 7 Memory Basics","text":"

\u7ea6 737 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

\u6846\u67b6

"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-1-memory","title":"7-1 Memory","text":"

Two types of memories are used in various parts of a computer: random-access memory (RAM) and read-only memory (ROM). RAM accepts new information for storage to be available later for use. The process of storing new information in memory is referred to as a memory write operation. The process of transferring the stored information out of memory is referred to as a memory read operation. RAM can perform both the write and the read operations, whereas ROM, as introduced in Section 6-8, performs only read operations. RAM sizes may range from hundreds to billions of bits.

Memory is a collection of binary storage cells together with associated circuits needed to transfer information into and out of the cells.

"},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-2-ram","title":"7-2 RAM","text":"

Memory cells can be accessed to transfer information to or from any desired location, with the access taking the same time regardless of the location, hence the name random-access memory. In contrast,serial memory, such as is exhibited by a hard drive, takes different lengths of time to access information, depending on where the desired location is relative to the current physical position of the disk.

word:

A word is an entity of bits that moves in and out of memory as a unit\u2014a group of 1s and 0s that represents a number, an instruction, one or more alphanumeric characters, or other binary-coded information.

A group of eight bits is called a byte.

Most computer memories use words that are multiples of eight bits in length. Thus, a 16-bit word contains two bytes, and a 32-bit word is made up of four bytes. The capacity of a memory unit is usually stated as the total number of bytes that it can store.

Communication between a memory and its environment is achieved through data input and output lines, address selection lines, and control lines that specify the direction of transfer of information.

Computer memory varies greatly in size. It is customary to refer to the number of words (or bytes) in memory with one of the letters K (kilo), M (mega), or G (giga). K is equal to 2^10, M to 2^20, and G to 2^30.

A word in memory is selected by its binary address. When a word is read or written, the memory operates on all 16 bits as a single unit.

The 1K * 16 memory of the figure has 10 bits in the address and 16 bits in each word. The number of address bits needed in memory is dependent on the total number of words that can be stored and is independent of the number of bits in each word. The number of bits in the address for a word is determined from the relationship 2^k >= m, where m is the total number of words and k is the minimum number of address bits satisfying the relationship.

The two operations that a random-access memory can perform are write and read. A write is a transfer into memory of a new word to be stored. A read is a transfer of a copy of a stored word out of memory.

The steps that must be taken for a write are as follows:

  1. Apply the binary address of the desired word to the address lines.
  2. Apply the data bits that must be stored in memory to the data input lines.
  3. Activate the Write input.

The memory unit will then take the bits from the data input lines and store them in the word specified by the address lines.The steps that must be taken for a read are as follows:

  1. Apply the binary address of the desired word to the address lines.
  2. Activate the Read input.

The memory will then take the bits from the word that has been selected by the address and apply them to the data output lines. The contents of the selected word are not changed by reading them.

...

To avoid destroying data in other memory words, it is important that this change occur after the signals on the address lines have become fixed at the desired values.

"},{"location":"cour_note/D2QD_DigitalDesign/glossary/","title":"\u8bcd\u6c47\u8868","text":"

\u7ea6 1051 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \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

\u8bfe\u7a0b\u4fe1\u606f

List

Lab

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/","title":"Lecture 1 | Introduction","text":"

\u7ea6 1737 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u4e3b\u8981\u4efb\u52a1","title":"CV \u7684\u4e3b\u8981\u4efb\u52a1","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u5e94\u7528","title":"CV \u7684\u5e94\u7528","text":"Application Examples "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u5b66\u672f\u5708\u6982\u51b5","title":"\u5b66\u672f\u5708\u6982\u51b5","text":"

CV \u9886\u57df\u7684\u51e0\u4e2a\u9876\u4f1a

\u56fe\u5f62\u5b66\u76f8\u5173\u7684\u9876\u4f1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u8bfe\u7a0b\u6982\u8ff0","title":"\u8bfe\u7a0b\u6982\u8ff0","text":"

Note

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u4ee3\u590d\u4e60","title":"\u7ebf\u4ee3\u590d\u4e60","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u6027\u53d8\u6362","title":"\u7ebf\u6027\u53d8\u6362","text":"

\u9996\u5148\uff0c\u4e00\u4e2a\u77e9\u9635\u5de6\u4e58\u4e00\u4e2a\u5411\u91cf\uff1a

\u5728\u8fd9\u79cd\u57fa\u7840\u4e0a\uff0c\u77e9\u9635\u4e58\u6cd5\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u7cfb\u5217\u5411\u91cf\uff08\u53f3\u4fa7\u77e9\u9635\uff09\u7ecf\u8fc7\u540c\u4e00\u4e2a\u53d8\u6362\u5f97\u5230\u65b0\u7684\u4e00\u7cfb\u5217\u5411\u91cf\u3002

Tips

\u5b9e\u9645\u4e0a\uff0c\u4ece\u5355\u4f4d\u77e9\u9635\u7684\u89d2\u5ea6\u4e5f\u53ef\u4ee5\u5f88\u597d\u7684\u7406\u89e3\u8fd9\u4ef6\u4e8b\uff1a

\\[ \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\]

\u6211\u4eec\u6765\u8bd5\u7740\u8fd0\u7528\u4e0a\u9762\u7684\u6280\u5de7\u6c42\u4e00\u4e2a\u65cb\u8f6c\u53d8\u6362\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u3002

\u9898\u9762\u7b54\u6848

\u5047\u8bbe\u8be5\u77e9\u9635\u8ba9\u76ee\u6807\u56fe\u5f62\u987a\u65f6\u9488\u65cb\u8f6c \\(\\theta\\) \uff0c\u5219\u5176\u8868\u8fbe\u5f0f\u4e3a\uff1f

\u6211\u4eec\u505a\u6b64\u5206\u6790\uff1a

\u56e0\u6b64\uff0c\u6839\u636e\u4e0a\u9762\u63d0\u5230\u7684\u6280\u5de7\uff0c\u65cb\u8f6c\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u4e3a\uff1a

\\[ R_{\\theta,clockwise} = \\begin{bmatrix} \\cos\\theta & \\sin\\theta \\\\ -\\sin\\theta & \\cos\\theta \\end{bmatrix} \\]

\u7279\u522b\u7684\uff0c\u5982\u679c\u662f\u9006\u65f6\u9488\uff0c\u7ed3\u679c\u5c31\u662f\uff1a

\\[ R_{\\theta,anti-clockwise} = \\begin{bmatrix} \\cos\\theta & -\\sin\\theta \\\\ \\sin\\theta & \\cos\\theta \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","title":"\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","text":"

\u4eff\u5c04\u53d8\u6362(Affine Transformations) \u4e3b\u8981\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u7ebf\u6027\u53d8\u6362\u548c\u5e73\u79fb\uff08\u6362\u8a00\u4e4b\uff0c\u4eff\u5c04\u53d8\u6362\u5e76\u4e0d\u662f\u7ebf\u6027\u53d8\u6362\uff09\uff0c\u5176\u6570\u5b66\u8868\u8ff0\u4e3a\uff1a

\\[ \\begin{bmatrix} x' \\\\ y' \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\end{bmatrix} \\]

\u4e3a\u4e86\u8ba9\u4eff\u5c04\u53d8\u6362\u4e5f\u80fd\u5199\u6210 \\(a=Mb\\) \u7684\u5f62\u5f0f\u4ee5\u7b80\u5316\u8fd0\u7b97\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 \\(n+1\\) \u7ef4\u5411\u91cf\u6765\u8868\u793a \\(n\\) \u7ef4\u70b9\uff0c\u5373\u4f7f\u7528\u9f50\u6b21\u5750\u6807(homogenous coordinates)\uff1a

\\[ \\begin{bmatrix} x'\\\\ y'\\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} a & b & t_x \\\\ c & d & t_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix} \\]

\u4e3a\u4ec0\u4e48\u662f \u201c1\u201d

\u8fd9\u91cc\u6211\u4eec\u4e0d\u7981\u629b\u51fa\u4e00\u4e2a\u7591\u95ee\uff0c\u4e3a\u4ec0\u4e48\u9f50\u6b21\u5750\u6807\u6dfb\u52a0\u7684\u7ef4\u5ea6\u4e2d\u8981\u586b\u5165 1 \u5462\uff1f\u5b83\u6709\u4ec0\u4e48\u542b\u4e49\u5417\uff1f\u5b83\u4e0d\u80fd\u662f 2 \u6216\u8005\u522b\u7684\u4ec0\u4e48\u4e1c\u897f\u5417\uff1f

\u7b54\u6848\u662f\uff0c\u5b83\u53ef\u4ee5\u662f\u522b\u7684\u4e1c\u897f\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u9700\u8981\u5bf9\u5b9a\u4e49\u8fdb\u884c\u4e00\u4e2a\u6269\u5c55\uff0c\u4ee5\u4f7f\u9f50\u6b21\u5750\u6807\u6709\u66f4\u5927\u7684\u7528\u5904\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","title":"\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","text":"

\u4f8b\u5982\uff0c\\((x,y)\\) \u5bf9\u5e94\u7684\u9f50\u6b21\u5750\u6807\u4e3a \\((x,y,1)\\)\uff0c\u5982\u679c\u4f60\u628a\u5b83\u60f3\u8c61\u6210\u4e09\u7ef4\u7a7a\u95f4\u4e2d\u7684\u70b9\uff0c\u4f1a\u53d1\u73b0\uff0c\u5982\u679c\u6539\u53d8 1 \u7684\u503c\uff0c\u5f97\u5230\u7684\u70b9\u7684\u8f68\u8ff9\u4f1a\u662f\u82e5\u5e72\u5f20\u5e73\u884c\u7684\u5e73\u9762\uff0c\u4e5f\u5c31\u662f\u8bf4\u4ed6\u4eec\u5728\u4e09\u7ef4\u7a7a\u95f4\u4e0b\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4eba\u4e3a\u7684\u5b9a\u4e49\u4e00\u4e2a\u6bcf\u4e00\u4e2a\u5e73\u9762\u5185\u7684\u70b9\u7684\u6620\u5c04\u5173\u7cfb\uff08\u6211\u4eec\u53ea\u8003\u8651\u7b2c\u4e00\u8c61\u9650\uff09\uff0c\u4ece\u539f\u70b9\u5f15\u4e00\u6761\u5c04\u7ebf\uff0c\u76f4\u7ebf\u4e0a\u4e0e\u6bcf\u4e00\u4e2a\u5e73\u9762\u7684\u4ea4\u70b9\u6211\u4eec\u90fd\u8ba4\u4e3a\u5bf9\u5e94\u7740\u4e8c\u7ef4\u5e73\u9762\u4e0a\u7684\u540c\u4e00\u70b9\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u7528 \\(n+1\\) \u7ef4\u7a7a\u95f4\u4e2d \u4ece\u539f\u70b9\u53d1\u51fa\u7684\u4e00\u6761 \u5c04\u7ebf \u6765\u63cf\u8ff0 \\(n\\) \u7ef4\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u70b9\u3002

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u5f0f\u5b50\u6765\u6982\u62ec\u6269\u5c55\u5b9a\u4e49\uff1a

\u800c\u5f15\u5165\u8fd9\u79cd\u60f3\u6cd5\u540e\uff0c\u6211\u4eec\u5c31\u77e5\u9053\u4e3a\u4ec0\u4e48\u901a\u8fc7\u9f50\u6b21\u5750\u6807\u5316\u5c31\u80fd\u628a\u5e73\u79fb\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u5c06 \\(n\\) \u7ef4\u70b9\u7684\u5e73\u79fb\u770b\u4f5c \\(n+1\\) \u7ef4\u5c04\u7ebf\u7684\u65cb\u8f6c\uff0c\u800c\u65cb\u8f6c\u663e\u7136\u662f\u4e00\u4e2a\u7ebf\u6027\u53d8\u6362\u3002

\u800c\u5173\u4e8e\u8be5\u6027\u8d28\u7684\u5176\u4ed6\u5e94\u7528\uff0c\u53ef\u4ee5\u770b Lecture 2 \u7684\u7b2c\u4e8c\u5c0f\u8282\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9006\u53d8\u6362","title":"\u9006\u53d8\u6362","text":"

\u7ebf\u6027\u53d8\u6362 \\(T\\) \u7684\u9006\u53d8\u6362(Inverse Transform)\u5c31\u662f\u5176\u53d8\u6362\u77e9\u9635\u7684\u9006 \\(T^{-1}\\)\uff0c\u663e\u7136\uff0c\u5e76\u4e0d\u662f\u6240\u6709\u53d8\u6362\u90fd\u662f\u53ef\u9006\u7684\u3002

\u5f62\u8c61\u5730\u7406\u89e3\uff0c\u4e00\u4e2a\u53d8\u6362\u77e9\u9635\u5982\u679c\u4e0d\u6ee1\u79e9\uff08\u4e0d\u53ef\u9006\uff09\uff0c\u90a3\u4e48\u5c31\u4f1a\u6709\u51e0\u4e2a\u57fa\u5728\u53d8\u6362\u4e2d\u5408\u5e76\uff0c\u6216\u8005\u8bf4\u591a\u4e2a\u70b9\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u70b9\uff0c\u5bfc\u81f4\u65e0\u6cd5\u8fd8\u539f\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","title":"\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","text":"

\u884c\u5217\u5f0f(Determinant) \u7684\u503c\u7b49\u4e8e\u8fd9\u4e2a\u65b9\u9635\u4e2d\u7684\u5411\u91cf\u5bf9\u5e94\u7684 \u5e73\u884c\u56fe\u5f62/\u51e0\u4f55\u4f53/... \u7684 \u9762\u79ef/\u4f53\u79ef/...

"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","title":"\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","text":"

\u7279\u5f81\u5411\u91cf(eigenvector)\u548c\u7279\u5f81\u503c(eigenvalue)\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

\u5bf9\u4e8e\u77e9\u9635 \\(A\\in R^{N\\times N}\\)\uff0c\u5982\u679c\u6709\u5411\u91cf \\(v\\in R^{N}\\) \u548c\u5b9e\u6570 \\(\\lambda \\not = 0\\)\uff0c\u6ee1\u8db3\uff1a

\\[ Av = \\lambda v \\]

\u5219\u79f0 \\(v\\) \u662f\u77e9\u9635 \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u5e94\u7684\u7279\u5f81\u503c\u4e3a \\(\\lambda\\)\u3002

\u4ece\u51e0\u4f55\u53d8\u6362\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fd9\u4e2a\u5b9a\u4e49\u5f0f\uff0c\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a\u5411\u91cf \\(v\\) \u7ecf\u8fc7\u53d8\u6362 \\(A\\) \u5f97\u5230\u7684\u7ed3\u679c\uff0c\u7b49\u4e8e\u76f4\u63a5\u5bf9 \\(v\\) \u8fdb\u884c\u7f29\u653e\uff08\u800c\u6ca1\u6709\u6539\u53d8\u65b9\u5411\uff09\u3002

\u5de5\u7a0b\u8ba1\u7b97\u65b9\u6cd5

\u4ee4\u4eba\u60ca\u559c\u7684\u662f\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u8fd0\u7528\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u5b66\u5e93\u4e2d\u7684\u7279\u5f81\u503c\u5206\u89e3(eigen decomposition)\u65b9\u6cd5\uff0c\u5176\u5927\u81f4\u4f1a\u505a\u8fd9\u6837\u4e00\u4ef6\u4e8b\uff1a

\u5c06\u77e9\u9635 \\(A\\) \u5206\u89e3\u4e3a \\(Q\\Lambda Q^{-1}\\)\uff0c\u5176\u4e2d \\(Q\\) \u4e2d\u7684\u6bcf\u4e00\u5217\u5373\u4e3a \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u89d2\u9635 \\(\\Lambda\\) \u4e2d\u7684\u7b2c \\(i\\) \u9879\u5c31\u662f\u7b2c \\(i\\) \u4e2a\u7279\u5f81\u5411\u91cf\u7684\u7279\u5f81\u503c\u3002

\u7279\u5f81\u503c\u4e0e\u7279\u5f81\u5411\u91cf\u7684\u5e94\u7528\uff1a\u4e3b\u6210\u5206\u5206\u6790(principal component analysis)

\u4e3b\u6210\u5206(principal component)\u7b49\u4e8e\u534f\u65b9\u5dee\u77e9\u9635\u7684 \u7279\u5f81\u503c\u6700\u5927\u7684 \u90a3\u4e2a\u7279\u5f81\u5411\u91cf\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/","title":"Lecture 2 | Image Formation","text":"

\u7ea6 3769 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 13 \u5206\u949f

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","title":"\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5c0f\u5b54\u6210\u50cf","title":"\u5c0f\u5b54\u6210\u50cf","text":"

\u5982\u679c\u6211\u4eec\u76f4\u63a5\u62ff\u4e00\u5757\u5e73\u9762\u6765\u8bb0\u5f55\u81ea\u7136\u754c\u7684\u5149\u4fe1\u606f\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u7531\u4e8e\u5149\u7ebf\u662f\u5411\u56db\u9762\u516b\u65b9\u4f20\u64ad\u7684\uff0c\u6240\u4ee5\u63a5\u6536\u5230\u7684\u4fe1\u606f\u4e5f\u4e71\u4e03\u516b\u7cdf\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u901a\u8fc7\u4e00\u4e2a\u5c0f\u5b54\uff0c\u4e5f\u5c31\u662f\u5982\u4eca\u7684\u5149\u5708(aperture)\u6765\u5bf9\u5149\u7ebf\u8fdb\u884c\u4e00\u4e2a\u8fc7\u6ee4\u3002\u8fd9\u5c31\u662f\u65e9\u671f\u9488\u5b54\u6444\u50cf\u673a(pinhole camera)\u7684\u539f\u7406\u3002

\u8fd9\u4e5f\u5c31\u662f\u6211\u4eec\u5f88\u65e9\u5c31\u5b66\u8fc7\u7684\uff0c\u5c0f\u5b54\u6210\u50cf\u539f\u7406\u3002\u800c\u5149\u5708\u8d8a\u5c0f\uff0c\u6210\u50cf\u4e5f\u4f1a\u8d8a\u6765\u8d8a\u6e05\u695a\uff0c\u4f46\u4e5f\u4e0d\u80fd\u592a\u5c0f\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u4eae\u5ea6\u4e0d\u8db3\u751a\u81f3\u884d\u5c04\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u955c","title":"\u900f\u955c","text":"

\u51f8\u900f\u955c\u5177\u6709\u6c47\u805a\u5149\u7ebf\u7684\u4f5c\u7528\uff0c\u5728\u6ee1\u8db3\u7279\u5b9a\u5149\u5b66\u51e0\u4f55\u5173\u7cfb\u7684\u524d\u63d0\u4e0b\u5177\u6709\u548c\u5c0f\u5b54\u6210\u50cf\u7c7b\u4f3c\u7684\u6548\u679c\uff0c\u4f46\u662f\u80fd\u591f\u6c47\u805a\u66f4\u591a\u7684\u5149\u7ebf\u3002

Source: https://fpcv.cs.columbia.edu/

\u5bf9\u4e8e\u8584\u51f8\u900f\u955c\uff0c\u6709\u9ad8\u65af\u6210\u50cf\u516c\u5f0f\uff1a

\\[ \\frac{1}{i} + \\frac{1}{o} = \\frac{1}{f} \\]

\u5176\u4e2d \\(i\\) \u4e3a\u50cf\u8ddd(img dis)\uff0c\\(o\\) \u4e3a\u7269\u8ddd(obj dis)\uff0c\\(f\\) \u4e3a\u7126\u8ddd(focal len)\u3002

\u800c\u5bf9\u4e8e\u5e73\u884c\u5149\uff0c\u6216\u8005\u8bf4 \\(o\\to +\\infty\\) \u65f6\uff0c\u5c31\u4f1a\u6709 \\(i=f\\)\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6d4b\u91cf\u5e73\u884c\u5149\u900f\u8fc7\u51f8\u900f\u955c\u6c47\u805a\u7684\u4f4d\u7f6e\u6765\u6d4b\u91cf\u7126\u8ddd\u3002

\u540c\u65f6\u518d\u5f15\u5165\u4e00\u4e2a\u653e\u5927\u7387(Magnification)\uff1a\\(m=\\frac{h_i}{h_o}=\\frac{i}{o}\\)\u3002

Source: https://fpcv.cs.columbia.edu/

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u89c6\u91ce-fovfield-of-view","title":"\u89c6\u91ce FoV(field of view)","text":"

\u7126\u8ddd\u548c\u5e95\u7247\u7684\u7ebf\u5ea6\u5171\u540c\u51b3\u5b9a\u4e86 FoV \u7684\u5927\u5c0f\u3002

Source: https://snapsnapsnap.photos/

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7126\u8ddd\u7684\u5927\u5c0f\u4f1a\u5f71\u54cd\u89c6\u91ce\u7684\u5927\u5c0f\u548c\u653e\u5927\u7387\u7684\u5927\u5c0f\u3002

50mm/46\u00b0 \u4e0e\u4eba\u7684\u89c6\u91ce\u76f8\u8fd1\uff0c\u56e0\u6b64\u5b83\u88ab\u79f0\u4e3a\u6807\u51c6\u955c\u5934(standard lens).

\u6b64\u5916\uff0c\u5373\u4f7f\u5728\u753b\u9762\u4e2d\u4fdd\u8bc1\u4e00\u4e2a\u7269\u4f53\u7684\u5927\u5c0f\u4e0d\u53d8\uff0c\u9009\u7528\u4e0d\u540c\u7684\u7126\u8ddd\u4e5f\u4f1a\u5bfc\u81f4\u753b\u9762\u7684\u53d8\u5316\u2014\u2014\u80cc\u666f\u7684\u5927\u5c0f\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u5f20\u56fe\u7684\u4e09\u4e2a\u753b\u9762\u6211\u4eec\u53ef\u4ee5\u5f88\u6e05\u6670\u7684\u611f\u53d7\u5230\u8fd9\u4e00\u70b9\u3002

\u6b64\u5916\uff0c\u4f20\u611f\u5668\u7684\u5927\u5c0f\uff0c\u6216\u8005\u8bf4\u5e95\u7247\u7684\u5927\u5c0f\uff0c\u4e5f\u4f1a\u5f71\u54cd FoV\u3002\u800c\u4e14\u4e00\u822c\u6765\u8bf4\uff0c\u8d8a\u5927\u7684\u5e95\u7247\u80fd\u591f\u63d0\u4f9b\u66f4\u9ad8\u7684\u5206\u8fa8\u7387\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#f-\u6570","title":"F \u6570","text":"

F \u6570(F-Number)\u7528\u6765\u63cf\u8ff0\u5149\u5708\u7684\u76f8\u5bf9\u5927\u5c0f\uff0c\u5176\u5b9a\u4e49\u5f0f\u4e3a \\(N=\\frac{f}{D}\\)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5bf9\u7126","title":"\u5bf9\u7126","text":"

Source: https://fpcv.cs.columbia.edu/

\u7531\u76f8\u4f3c\u4e09\u89d2\u5f62\uff0c\u6ca1\u6709\u5bf9\u4e0a\u7126\u800c\u5f62\u6210\u7684\u5149\u6591(Blur Circle)\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

\\[ \\begin{align} &\\because \\frac{b}{D}=frac{|i'-i|}{i'} \\\\ &\\therefore b = \\frac{D}{i'}|i'-i|\\;,\\;\\;\\;b \\propto D \\propto \\frac{1}{N} \\end{align} \\]

\u800c\u5bf9\u7126\uff0c\u5c31\u662f\u5c06\u5931\u7126\u7684\u5185\u5bb9\u91cd\u65b0\u6c47\u805a\u5230\u5e95\u7247\u4e0a\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u666f\u6df1-dof","title":"\u666f\u6df1 DoF","text":"

\u6839\u636e\u4e0a\u4e00\u5c0f\u8282\u5f97\u5230\u7684\u7ed3\u8bba\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u597d\u50cf\u53ea\u6709\u6e05\u6670\u6210\u50cf\u4e00\u4e2a\u7279\u5b9a\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u76f8\u673a\u4e0a\u4f1a\u6709\u4e00\u6bb5\u8ddd\u79bb\u4e0a\u7684\u5185\u5bb9\u90fd\u662f\u6e05\u6670\u7684\uff0c\u8fd9\u6bb5\u8ddd\u79bb\u5c31\u662f\u666f\u6df1 DoF(Depth of Field)\u3002\u800c\u4e4b\u6240\u4ee5\u6709\u666f\u6df1\uff0c\u662f\u56e0\u4e3a\u5e95\u7247\u7684\u611f\u5149\u5143\u4ef6\u662f\u6709\u6781\u9650\u7684\uff0c\u5f53\u5149\u6591\u5c0f\u96e8\u8fd9\u4e2a\u6781\u9650\u65f6\uff0c\u62cd\u6444\u51fa\u6765\u7684\u5c31\u4ecd\u7136\u662f\u6e05\u6670\u7684\u3002

\u800c\u666f\u6df1\u7684\u5927\u5c0f\u53ef\u4ee5\u8fd9\u4e48\u8ba1\u7b97\uff1a

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u666f\u6df1\u7684\u5927\u5c0f \u5927\u81f4\u4e0e \u5149\u5708\u5927\u5c0f\u3001\u7269\u50cf \u6b63\u76f8\u5173\uff0c\u4e0e \u7126\u8ddd \u8d1f\u76f8\u5173\u3002

\u5f15\u8a00

\u7531\u4e8e\u6211\u4eec\u8003\u8651\u7684\u662f\u6210\u50cf\u95ee\u9898\uff0c\u6240\u4ee5\u66f4\u591a\u7684\u662f\u5728\u63cf\u8ff0\u4e09\u7ef4\u771f\u5b9e\u4fe1\u606f\u4e0e\u4e8c\u7ef4\u5e73\u9762\u4fe1\u606f\u4e4b\u95f4\u7684\u4e92\u76f8\u8868\u8fbe\u3002

\u800c\u8fd9\u79cd\u201c\u63cf\u8ff0\u201d\u9700\u8981\u57fa\u4e8e\u4e00\u4e2a\u6295\u5f71\u6a21\u578b\u3002\u6216\u8005\u8bf4\u8bf4\u4e00\u79cd\u6620\u5c04\u5173\u7cfb\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u597d\u50cf\u201c\u70b9\u5149\u6e90\u6295\u5f71\u201d\u548c\u201c\u5e73\u884c\u5149\u6e90\u6295\u5f71\u201d\u3002

\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u65e0\u8bba\u662f\u54ea\u4e00\u79cd\u6a21\u578b\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u4e09\u7ef4\u4fe1\u606f\u901a\u8fc7\u4e0d\u53ef\u9006\u7684\u7ebf\u6027\u53d8\u6362\u538b\u7f29\u5230\u4e86\u4e8c\u7ef4\u4fe1\u606f\uff0c\u6240\u4ee5\u4e00\u5b9a\u662f\u5b58\u5728\u4fe1\u606f\u7f3a\u5931\u7684\u3002\u901a\u5e38\u6765\u8bf4\uff0c\u6307\u7684\u662f\u6df1\u5ea6\u7f3a\u5931\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u6295\u5f71","title":"\u900f\u89c6\u6295\u5f71","text":"

\u5982\u56fe\u662f 3D \u5750\u6807\u901a\u8fc7\u900f\u89c6\u6295\u5f71\u5230 2D \u5750\u6807\u5230\u793a\u610f\u56fe\u3002\u5176\u4e2d \\(x,y,Z\\) \u7528\u6765\u63cf\u8ff0\u7a7a\u95f4\u5750\u6807\u4fe1\u606f\uff0c\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u7528\u4ed6\u4eec\u8868\u793a\u76f8\u5bf9\u4e8e\u76f8\u673a\u4e2d\u5fc3(camera center)\u7684\u6b63\u4ea4\u5750\u6807\uff0c\u5176\u4e2d \\(Z\\) \u548c\u5149\u8f74(optical axis)\u65b9\u5411\u76f8\u540c\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u79f0\u4e4b\u4e3a\u6df1\u5ea6\u3002

\u540c\u65f6\uff0c\u5149\u8f74\u5e94\u5f53\u5782\u76f4\u4e8e\u6210\u50cf\u5e73\u9762\uff0c\u800c\u5149\u8f74\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u4e3a\u56fe\u50cf\u4e2d\u5fc3(img center)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\\(P\\) \u4e0e \\(p\\) \u7684\u5173\u7cfb\u5982\u4e0b\uff1a

\\[ p = \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

\u90a3\u6709\u6ca1\u6709\u529e\u6cd5\u5c06 \\(p\\) \u548c \\(P\\) \u901a\u8fc7\u7ebf\u6027\u53d8\u5316\u653e\u5728\u540c\u4e00\u4e2a\u7b49\u5f0f\u91cc\u5462\uff1f

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6709\u6ca1\u6709\u529e\u6cd5\u4f7f\u5f97\u5982\u4e0b\u7b49\u5f0f\u6210\u7acb\uff1f

\\[ A \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

\u5f88\u53ef\u60dc\uff0c\u7531\u4e8e\u5f0f\u5b50\u4e2d\u51fa\u73b0\u4e86 \\(\\frac{1}{Z}\\)\uff0c\u5373\u9664\u6cd5\uff0c\u5b83\u5e76\u4e0d\u662f\u4e2a\u7ebf\u6027\u53d8\u6362\u3002\u6240\u4ee5\u5373\u4f7f\u6211\u4eec\u6269\u5c55 \\(p\\) \u548c \\(P\\) \u7684\u7ef4\u5ea6\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u5c06\u5b83\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u3002

\u4f46\u662f\u4f60\u4e5f\u770b\u5230\u4e86\uff0c\u6211\u7528\u7684\u8bcd\u662f\u201c\u76f4\u63a5\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5e94\u7528\u9f50\u6b21\u5750\u6807","title":"\u5e94\u7528\u9f50\u6b21\u5750\u6807","text":"

\u8ba9\u6211\u4eec\u56de\u987e\u9f50\u6b21\u5750\u6807\u7684 \u6269\u5c55\u6027\u8d28\uff0c\u5c06\u5b83\u5e94\u7528\u4e8e\u6b64\u5f0f\uff1a

\\[ \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\]

\u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230 \\(A\\) \u4f7f\u5f97\uff1a

\\[ A \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

\u6210\u7acb\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u627e\u5230 \\(A=\\begin{bmatrix}f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0\\end{bmatrix}\\) \u4f7f\u5f97\uff1a

\\[ \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\cong \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

\u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u6210\u529f\u7684\u901a\u8fc7\u7ebf\u6027\u53d8\u6362\u5c06 \\(P\\) \u548c \\(p\\) \u7edf\u4e00\u4e86\u8d77\u6765\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u53ef\u89c6\u5316\u8868\u793a","title":"\u53ef\u89c6\u5316\u8868\u793a","text":"

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

\u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

\u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u4fe1\u606f\u7f3a\u5931","title":"\u4fe1\u606f\u7f3a\u5931","text":"

\u7531\u4e8e\u5728\u900f\u89c6\u6295\u5f71\u7cfb\u7edf\u4e2d\uff0c\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5927\u5c0f\u4e0e\u56fe\u50cf\u7ebf\u5ea6\u5927\u5c0f\u7684\u6bd4\u4f8b\u7531\u6df1\u5ea6\u51b3\u5b9a\uff0c\u4f46\u6df1\u5ea6\u53c8\u4e0d\u80fd\u76f4\u63a5\u4ece\u56fe\u4e2d\u83b7\u53d6\uff0c\u6240\u4ee5\u6709\u65f6\u5019\u6211\u4eec\u65e0\u6cd5\u6bd4\u8f83\u56fe\u50cf\u4e2d\u4e24\u4e2a\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5dee\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u957f\u5ea6\u4fe1\u606f\u548c\u89d2\u5ea6\u4fe1\u606f\u662f\u4e22\u5931\u7684\u3002

\uff08\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u4e00\u4e9b\u4e1c\u897f\u6765\u505a\u53c2\u8003\u7cfb\uff0c\u5224\u65ad A \u548c B \u7684\u6df1\u5ea6\u4fe1\u606f\uff0c\u518d\u5206\u6790\u4ed6\u4eec\u7684\u5b9e\u9645\u7ebf\u5ea6\u5927\u5c0f\u5173\u7cfb\u3002\uff09

\u7136\u800c\u4ecd\u7136\u6709\u4e9b\u6027\u8d28\u662f\u4fdd\u7559\u7684\uff0c\u4f8b\u5982\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5982\u679c\u4f60\u80fd\u60f3\u8c61\u7684\u8bdd\uff0c\u867d\u7136\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b83\u7684\u201c\u7ebf\u5bc6\u5ea6\u201d\u4e0d\u4e00\u6837\u4e86\u3002

\u6240\u4ee5\uff0c\u5982\u679c\u662f\u66f2\u7ebf\uff0c\u5b83\u867d\u7136\u4e0d\u4f1a\u53d8\u6210\u6298\u7ebf\uff0c\u4f46\u662f\u7279\u5f81\u53ef\u80fd\u5df2\u7ecf\u53d8\u4e86\uff0c\u6bd4\u5982\u5706\u662f\u4f1a\u626d\u66f2\u7684\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u706d\u70b9\u4e0e\u706d\u7ebf","title":"\u706d\u70b9\u4e0e\u706d\u7ebf","text":"

\u5728\u900f\u89c6\u4e2d\u4e00\u4e2a\u5f88\u6709\u610f\u601d\u7684\u73b0\u8c61\u662f\u706d\u70b9(vanishing point)\u548c\u706d\u7ebf(vanishing line)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u56fe\u50cf\u4e2d\u4e00\u6761\u4e0d\u65ad\u884d\u751f\u7684\u76f4\u7ebf\uff0c\u5728\u50cf\u4e2d\u6700\u7ec8\u4f1a\u7ec8\u7ed3\u4e8e\u4e00\u4e2a\u70b9\uff0c\u8fd9\u4e2a\u70b9\u5c31\u662f\u201c\u706d\u70b9\u201d\u3002\u51e0\u4f55\u4e0a\uff0c\u706d\u70b9\u4e0e\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\u5e94\u5f53\u5e73\u884c\u4e8e\u8be5\u76f4\u7ebf\u3002

\u800c\u73b0\u5b9e\u4e2d\u76f8\u4e92\u5e73\u884c\u7684\u4e24\u6761\u76f4\u7ebf\uff0c\u6700\u7ec8\u4f1a\u5728\u56fe\u50cf\u4e2d\u7ec8\u6b62\u4e8e\u540c\u4e00\u4e2a\u706d\u70b9\u3002

\u706d\u70b9\u672a\u5fc5\u5728\u56fe\u50cf\u4e2d\uff0c\u751a\u81f3\u53ef\u80fd\u65e0\u9650\u8fdc\u3002

\u521a\u624d\u63d0\u5230\uff0c\u5e73\u884c\u7ebf\u5171\u4eab\u706d\u70b9\u8fd9\u610f\u5473\u7740\u6709\u591a\u5c11\u7ec4\u5e73\u884c\u7ebf\u5c31\u6709\u591a\u5c11\u706d\u70b9\u3002

\u5982\u679c\u6211\u4eec\u5c06\u4e00\u4e2a\u5e73\u9762\u50cf\u68cb\u76d8\u90a3\u6837\uff0c\u5212\u51fa\u4e24\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u4e48\u5c31\u4f1a\u5f97\u5230\u4e24\u4e2a\u706d\u70b9\uff0c\u5982\u56fe\u4e2d\u7684 \\(v_1\\) \u548c \\(v_2\\)\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u5e73\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u4e2d\u53d6\u51fa\u65e0\u6570\u7ec4\u5e73\u884c\u7ebf\uff0c\u56e0\u800c\u65e0\u9650\u5927\u7684\u5e73\u9762\u4f1a\u4ea7\u751f\u65e0\u6570\u591a\u7684\u706d\u70b9\uff0c\u800c\u8fd9\u4e9b\u706d\u70b9\u8fde\u6210\u7ebf\u5c31\u6210\u4e86\u201c\u706d\u7ebf\u201d\u3002\u5e38\u89c1\u7684\u706d\u7ebf\u5c31\u6bd4\u5982\u7167\u7247\u4e0a\u7684\u6d77\u5929\u754c\u7ebf\u3002

\u56e0\u6b64\uff0c\u5982\u679c\u8bf4\u706d\u70b9\u8c61\u5f81\u4e86\u4e00\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u706d\u7ebf\u5c31\u662f\u8c61\u5f81\u4e86\u4e00\u5757\u5e73\u9762\u3002\u800c\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u770b\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u51fa\u73b0\u5728\u706d\u7ebf\u4ee5\u4e0a\u8fd8\u662f\u706d\u7ebf\u4e00\u4e0b\uff0c\u6765\u5224\u65ad\u5e73\u9762\u5728\u6211\u4eec\u7684\u76f8\u673a\u4e2d\u5fc3\u4ee5\u4e0b\u8fd8\u662f\u4ee5\u4e0a\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

Interesting Try

\u9898\u9762\u7b54\u6848

\u89c2\u5bdf\u5982\u4e0b\u56fe\u7247\uff0c\u5224\u65ad \ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0a\u8fd8\u662f\u4ee5\u4e0b\uff0c\u5e76\u9610\u660e\u7406\u7531\u3002

\u663e\u7136\uff0c\ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0b\uff08\u4f1e\u5728\u4ee5\u4e0a\uff09\uff0c\u4f9d\u636e\u662f \u4eba \u5728 \u5929\u9645\u7ebf \u4ee5\u4e0b\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u7578\u53d8","title":"\u900f\u89c6\u7578\u53d8","text":"

\u5728\u62cd\u6444\u8f83\u5927\u7684\u7269\u4f53\u65f6\uff0c\u6bd4\u5982\u5efa\u7b51\u7269\uff0c\u5982\u679c\u5efa\u7b51\u7269\u7684\u5899\u9762\u6ca1\u6709\u548c\u5e95\u7247\u5e73\u884c\uff0c\u5219\u4f1a\u51fa\u73b0\u900f\u89c6\u7578\u53d8\u3002

\u5728\u5efa\u7b51\u62cd\u6444\u65b9\u9762\uff0c\u6211\u4eec\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4e0b\u79fb\u4f20\u611f\u5668\uff0c\u4f7f\u5e95\u7247\u4e2d\u5fc3\u5728\u5149\u8f74\u4ea4\u70b9\u4ee5\u4e0b\uff0c\u8fd9\u79cd\u955c\u5934\u79f0\u4e3a\u79fb\u8f74\u955c\u5934\u3002

\u53e6\u5916\u4e00\u79cd\u900f\u89c6\u7578\u53d8\u4f53\u73b0\u5728\u66f2\u7ebf\u7684\u5f62\u53d8\u4e0a\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u5e38\u611f\u53d7\u5230\u7684\uff0c\u7ad9\u5728\u8fb9\u4e0a\u7684\u4eba\u8138\u603b\u662f\u66f4\u5927\u4e00\u70b9\u3002\u800c\u8fd9\u79cd\u7578\u53d8\u5728\u65ad\u955c\u5934\u4e0b\u66f4\u5e38\u89c1\uff0c\u6240\u4ee5\u4eba\u50cf\u66f4\u591a\u7528\u7684\u662f\u957f\u7126\u955c\u5934\uff08\u5176\u4e00\u539f\u56e0\uff0c\u5176\u4ed6\u7684\u8fd8\u6709 FoV \u5c0f\u6240\u4ee5\u80cc\u666f\u66f4\u5e72\u51c0\u7b49\uff09\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","title":"\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","text":"\\[ \\begin{align} r^2 & = {x'}_n^2 + {y'}_n^2 \\\\ {x'}_d & = {x'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ {y'}_d & = {y'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ \\end{align} \\]

\u800c\u8fd9\u79cd\u7167\u7247\u7684\u7ea0\u6b63\u529e\u6cd5\u5c31\u662f\u5bfb\u627e\u7167\u7247\u4e2d\u7684\u683c\u70b9\uff0c\u7136\u540e\u901a\u8fc7\u6570\u5b66\u65b9\u6cd5\u6765\u8fd8\u539f\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6b63\u4ea4\u6295\u5f71","title":"\u6b63\u4ea4\u6295\u5f71","text":"

\u6b63\u4ea4\u6295\u5f71\u7684\u542b\u4e49\u5c31\u662f\uff0c\u76f4\u63a5\u62b9\u6389\u6df1\u5ea6\u4fe1\u606f\uff0c\u4e09\u7ef4\u70b9 \\(P\\) \u5230\u4e8c\u7ef4\u70b9 \\(p\\) \u7684\u6620\u5c04\u89c4\u5219\u5982\u4e0b\uff1a

\\[ \\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} = \\begin{bmatrix} x \\\\ y \\end{bmatrix} \\]

\u4e5f\u5c31\u662f\u5e73\u884c\u5149\u6e90\u6295\u5f71\u3002

\u8fd9\u79cd\u6295\u5f71\u53ef\u80fd\u4e0d\u592a\u62df\u771f\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u4e0d\u8981\u6c42\u7cbe\u5ea6\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u603b\u662f\u4e50\u4e8e\u4f7f\u7528\u7684\u3002

\u8fd9\u6837\u8bf4\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u662f\u5b83\u5176\u5b9e\u5f88\u5e38\u89c1\uff0c\u6bd4\u5982\u5728\u4e00\u4e9b\u4ee5\u201c\u4e0a\u5e1d\u89c6\u89d2\u201d\u5c55\u5f00\u7684\u6e38\u620f\u4e2d\uff0c\u4f8b\u5982\u201c\u5f00\u7f57\u6e38\u620f\u201d\u3001\u201c\u6a21\u62df\u90fd\u5e02\u201d\u8fd9\u79cd\uff0c\u91c7\u7528\u7684\u57fa\u672c\u90fd\u662f\u8fd9\u79cd\u6295\u5f71\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5feb\u95e8shutter","title":"\u5feb\u95e8(Shutter)","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","title":"\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","text":"

\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u8003\u8651\u7684\u4e3b\u8981\u662f\u5149\u5f3a\u548c\u989c\u8272\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\u3002

\u786c\u4ef6\u4e0a\uff0c\u5b83\u4eec\u90fd\u901a\u8fc7\u56fe\u50cf\u4f20\u611f\u5668(img sensor)\u5b9e\u73b0\u3002

\u5f15\u5165

\u7740\u8272(shading)\u4e2d\u6240\u8bf4\u7684\u5149\u5f3a\uff0c\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff1a\u4e00\u65b9\u9762\u4e0e\u8ddd\u79bb\u5149\u6e90\u7684\u8ddd\u79bb\u6709\u5173\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u7b26\u5408\u5e73\u65b9\u53cd\u6bd4\u5b9a\u5f8b\uff0c\u8fd9\u79cd\u7279\u5f81\u6211\u4eec\u79f0\u4e4b\u4e3a Light Falloff\uff1b\u53e6\u4e00\u65b9\u9762\u5b9e\u9645\u4e0a\u662f\u9700\u8981\u6211\u4eec\u8ba1\u7b97\u5149\u7684\u53cd\u5c04\u884c\u4e3a\u3002

\u7406\u8bba\u4e0a\uff0c\u6211\u4eec\u4f1a\u9700\u8981\u53cc\u5411\u53cd\u5c04\u5206\u5e03\u51fd\u6570 BRDF(Bidirectional Reflectance Distribution Function)\u6765\u8ba1\u7b97\uff0cBRDF \u7684\u8f93\u5165\u5927\u81f4\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u51e0\u4e2a\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u9700\u8981\u5efa\u7acb\u8fd9\u6837\u4e00\u4e2a\u6a21\u578b\u662f\u5f88\u56f0\u96be\u7684\uff0c\u4e14\u8fd9\u4e2a\u6a21\u578b\u4e0d\u5e38\u7528\uff0c\u800c\u4e14\u8ba1\u7b97\u8d77\u6765\u6bd4\u8f83\u9ebb\u70e6\u3002

\u53cd\u5c04\u4e3b\u8981\u53ef\u4ee5\u5f52\u7eb3\u4e3a\u4e24\u79cd\u7b80\u5355\u6a21\u578b\u548c\u4e00\u79cd\u6df7\u5408\u6a21\u578b\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6f2b\u53cd\u5c04","title":"\u6f2b\u53cd\u5c04","text":"

\u6f2b\u53cd\u5c04(diffuse reflection) \u53c8\u53eb \u6717\u4f2f\u53cd\u5c04(Lambertian reflection)\uff0c\u662f\u8868\u73b0\u5728\u7c97\u7cd9\u8868\u9762\u4e0a\u7684\u53cd\u5c04\u7279\u5f81\uff0c\u56e0\u4e3a\u6211\u4eec\u9ed8\u8ba4\u5b83\u5411\u56db\u9762\u516b\u65b9\u53cd\u5c04\u7684\u5149\u5f3a\u90fd\u4e00\u6837\uff0c\u6240\u4ee5\u5b83\u7684\u8ba1\u7b97\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\uff08Shading independent of view direction\uff09\uff1a

\\[ L_d = k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) \\]

\u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

\u5982\u4f55\u7406\u89e3\u5149\u5f3a\u5ea6\u4e0e\u89d2\u5ea6\u7684\u5173\u7cfb

\u4e00\u5f00\u59cb\u6ca1\u4ed4\u7ec6\u60f3\u7684\u65f6\u5019\u8fd8\u89c9\u5f97\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u4ed4\u7ec6\u4e00\u60f3\u4e3a\u4ec0\u4e48\u80fd\u8fd9\u6837\u8868\u8ff0\uff1f\u4e8e\u662f\u548c\u540c\u5b66\u63a2\u8ba8\u4e86\u4e00\u4e0b\uff0c\u611f\u89c9\u4e00\u4e2a\u53ef\u4ee5\u63a5\u53d7\u7684\u89e3\u91ca\u662f\u8fd9\u6837\u7684\uff1a

\u9996\u5148\uff0c\u8fd9\u91cc\u4e0e\u5176\u8bf4\u4e0e\u89d2\u5ea6\u76f8\u5173\uff0c\u4e0d\u5982\u8bf4\u4e0e\u5355\u4f4d\u9762\u79ef\u53d7\u5230\u7684\u5149\u7167\u5f3a\u5ea6\u6709\u5173\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u540c\u4e00\u675f\u5149\uff0c\u503e\u659c\u7684\u9762\u4e0a\u4f1a\u6709\u66f4\u5927\u7684\u9762\u79ef\u88ab\u7167\u5c04\u5230\uff0c\u5747\u644a\u4e0b\u6765\u5355\u4f4d\u9762\u79ef\u4e0a\u7684\u5149\u5f3a\u5ea6\u5c31\u5c0f\uff0c\u6216\u8bb8\u53ef\u4ee5\u5c06\u5b83\u7406\u89e3\u6210\u7c7b\u4f3c\u4e8e\u201c\u5bc6\u5ea6\u201d\u7684\u6982\u5ff5\u3002

\u5e26\u7740\u8fd9\u6837\u7684\u60f3\u6cd5\uff0c\u518d\u6765\u770b\u8fd9\u5f20\u56fe\uff0c\u5c31\u6bd4\u8f83\u6e05\u6670\u4e86\u3002

Source: https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u9ad8\u5149\u53cd\u5c04","title":"\u9ad8\u5149\u53cd\u5c04","text":"

\u9ad8\u5149\u53cd\u5c04(specular reflection) \u7c7b\u4f3c\u6211\u4eec\u8ba4\u77e5\u4e2d\u7684\u955c\u9762\u53cd\u5c04\uff0c\u5b83\u7684\u7279\u5f81\u662f\u57fa\u672c\u7b26\u5408\u955c\u53cd\u5c04\u7684\u89c4\u5f8b\u3002

\u5728\u9ad8\u5149\u53cd\u5c04\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u534a\u7a0b\u5411\u91cf(half vec)\\(\\vec h = bisector(\\vec v,\\vec l) = \\frac{\\vec v + \\vec l}{||\\vec v + \\vec l||}\\)

\u5f53 \\(\\vec h\\) \u4e0e \\(\\vec n\\) \u975e\u5e38\u63a5\u8fd1\u65f6\uff0c\u5373 \\(\\alpha = <\\vec n, \\vec h>\\) \u5f88\u5c0f\u65f6\uff0c\u6211\u4eec\u79f0\u4e4b\u7b26\u5408\u9ad8\u5149\u53cd\u5c04\u3002

\u9ad8\u5149\u53cd\u5c04\u7684\u5f3a\u5ea6\u516c\u5f0f\u5927\u81f4\u5982\u4e0b\uff1a

\\[ L_s = k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\cos\\alpha)^p=k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\]

\u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

\u5206\u6790\u53ef\u5f97\uff0c\\(p\\) \u8d8a\u5927\uff0c\u9ad8\u5149\u8d8a\u96c6\u4e2d\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#blinn-phong-\u53cd\u5c04","title":"Blinn-Phong \u53cd\u5c04","text":"

Blinn-Phong \u53cd\u5c04\u6a21\u578b(Blinn-Phong Reflection Model)\u53ef\u4ee5\u8bf4\u96c6\u5408\u4e86\u524d\u4e24\u8005\uff0c\u6b64\u5916\u8fd8\u5f15\u5165\u4e86\u73af\u5883\u5149(ambient part)\u3002

\\[ L_a=k_aI_a \\]

Blinn-Phong \u53cd\u5c04\u6a21\u578b\u7684\u5927\u81f4\u6210\u5206\u5982\u4e0b\uff1a

\\[ \\begin{align} L & = L_a + L_d + L_s \\\\ & = k_aI_a + k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) + k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\end{align} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u989c\u8272","title":"\u989c\u8272","text":"

\u4e3a\u4e86\u63cf\u8ff0\u989c\u8272\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u8272\u5f69\u7a7a\u95f4(color spaces)\uff0c\u5e38\u89c1\u7684\u6709 RGB \u548c HSV \u7b49\uff0c\u5bf9\u76f8\u673a\u6765\u8bf4\u6211\u4eec\u66f4\u5e38\u7528\u7684\u662f RGB\u3002

in py

\u5728\u7b97\u6cd5\u4e2d\uff0c\u6211\u4eec\u7528\u77e9\u9635\u6765\u5b58\u50a8\u56fe\u50cf\u4fe1\u606f\uff0c\u5176\u4e2d\u5de6\u4e0a\u89d2\u7684\u5143\u7d20\u5750\u6807\u4e3a (0, 0, :)\uff0c\u5176\u4e2d\u7b2c\u4e09\u7ef4\u7528\u6765\u6307\u5b9a\u989c\u8272\u901a\u9053(channel)\uff0c\u6240\u4ee5\u7b2c i \u884c j \u5217\u7684\u50cf\u7d20\u70b9\u8868\u793a\u4e3a (i-1, j-1, :)\uff1b

\u5728\u786c\u4ef6\u4e0a\uff0c\u989c\u8272\u4f20\u611f\u4e3b\u8981\u901a\u8fc7\u62dc\u5c14\u6ee4\u955c(Bayer filter)\u5b9e\u73b0\u3002\u4e5f\u5c31\u662f\u901a\u8fc7\u5728\u4f20\u611f\u5668\u524d\u5b89\u88c5\u4e00\u4e2a\u5355\u8272\u6ee4\u955c\uff0c\u6765\u63a5\u6536\u5355\u4e00\u8272\u5149\u3002\u5e38\u89c1\u7684\u505a\u6cd5\u662f\u4ee5\u7530\u5b57\u683c\u7684\u56db\u4e2a\u4f20\u611f\u5668\u4e3a\u5355\u4f4d\uff0c\u5206\u914d R*1 G*2 B*1 \u7684\u6ee4\u955c\u3002

Source: https://en.wikipedia.org/wiki/Bayer_filter

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7eff\u8272\u7684\u6ee4\u955c\u66f4\u591a\uff0c\u56e0\u4e3a\u592a\u9633\u5149\u4e2d\u7eff\u8272\u6ce2\u6bb5\u66f4\u591a\uff0c\u4e8e\u662f\u4eba\u773c\u5bf9\u7eff\u8272\u66f4\u654f\u611f\u3002

\u663e\u7136\uff0c\u8fd9\u6837\u5f97\u5230\u7684\u56fe\u7247\u9700\u8981\u8fdb\u884c\u63d2\u503c\u624d\u80fd\u5f97\u5230\u6700\u7ec8\u56fe\u7247\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/","title":"Lecture 3 | Image Processing","text":"

\u7ea6 5940 \u4e2a\u5b57 3 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 20 \u5206\u949f

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"

\u5bf9\u56fe\u50cf\u7684\u57fa\u672c\u64cd\u4f5c\u5373\u5728\u56fe\u50cf\u7f16\u8f91\u8f6f\u4ef6\u4e2d\u5e38\u89c1\u7684\u90a3\u4e48\u51e0\u79cd\uff0c\u7a0d\u540e\u6211\u4eec\u5c06\u4f1a\u7b80\u5355\u4ecb\u7ecd\u8fd9\u51e0\u79cd\u64cd\u4f5c\u662f\u5982\u4f55\u5b9e\u73b0\u7684\u3002

\u4e0d\u8fc7\u5728\u6b64\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5148\u4ecb\u7ecd\u4e00\u4e2a\u5de5\u5177\u2014\u2014\u5377\u79ef(convolution)\uff0c\u4e4b\u540e\u4e00\u4e9b\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u6b64\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5377\u79ef","title":"\u5377\u79ef","text":"

\u6570\u5b66\u4e0a\u5bf9\u5377\u79ef(convolution)\u7ed9\u51fa\u7684\u5b9a\u4e49\u662f\uff1a

\\[ (f*g)(x)=\\int_{-\\infty}^{\\infty} f(y)g(x-y)\\mathrm{d}y \\]

\u7b2c\u4e00\u6b21\u63a5\u89e6\u8fd9\u4e2a\u5f0f\u5b50\u7684\u65f6\u5019\u6211\u4e2a\u4eba\u611f\u89c9\u662f\u4e00\u5934\u96fe\u6c34\u7684\u3002\u4f46\u662f\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u4ece\u4e00\u4e2a\u66f4\u76f4\u89c2\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u4e00\u4e0b\u8fd9\u4e2a\u5f0f\u5b50\uff1a

\u4e00\u8a00\u4ee5\u853d\u4e4b\uff1a\\((f*g)(x)\\) \u662f \\(g(x)\\) \u5728\u6ee4\u6ce2\u89c4\u5219 \\(f(y)\\) \u4e0b\u7684\u52a0\u6743\u5747\u503c\u51fd\u6570\u3002

\u9996\u5148\uff0c\u6211\u4eec\u5148\u6765\u4ece\u4e00\u7ef4\u79bb\u6563\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u5377\u79ef\uff0c\u5373\uff1a

\\[ (f*a)_i = \\sum_{j=-m}^{m} f_j * a_{i+j} \\]

\u5f53\u7136\uff0c\u4e0a\u9762\u53ef\u80fd\u51fa\u73b0 \\(f_{-1}\\) \u8fd9\u79cd\u9b3c\u755c\u7684\u4e1c\u897f\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u8fd9\u91cc\u7684 \\(f\\) \u6570\u5217\u786e\u5b9e\u662f\u5b9a\u4e49\u5728\u6574\u4e2a\u6574\u6570\u8f74\u4e0a\u7684\uff08\u5f53\u7136\u4e0b\u6807\u5565\u7684\u662f\u65e0\u6240\u8c13\u7684\uff0c\u7ec8\u70b9\u5173\u6ce8\u4e0b\u9762\u7684\u6a21\u62df\u8fc7\u7a0b\uff09

\u6bd4\u5982\uff0c\u6211\u4eec\u6709\u539f\u59cb\u6570\u5217 \\(a_n\\) \u548c\u6ee4\u6ce2\u5668\u6570\u5217 \\(f_m\\) \u5982\u4e0b\uff1a

\\(a_n\\) 2 4 2 6 2 \\(f_m\\) 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u624b\u52a8\u6a21\u62df\u4e00\u4e0b\u5377\u79ef\u8fc7\u7a0b\uff1a

\u5377\u79ef\u8fc7\u7a0b \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 1 2 1 0 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times4+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 1 2 1 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times4+2\\times2+1\\times6\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 0 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times6+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(16\\) -

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5982\u679c \\(f_m\\) \u6bcf\u4e00\u9879\u90fd\u9664\u4ee5 4\uff0c\u90a3\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u8fc7\u7a0b\u5c31\u662f\u5728\u6c42\u6bcf\u4e00\u9879\u4e0e\u76f8\u90bb\u4e24\u9879\u7684\u52a0\u6743\u5e73\u5747\uff08\u4e2d\u5fc3\u6743\u91cd\u66f4\u5927\uff09\u3002

\u73b0\u5728\uff0c\u4ece\u79bb\u6563\u4f1a\u5230\u8fde\u7eed\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u4ecb\u7ecd\u6700\u7ecf\u5178\u7684\u4e00\u4e2a\u5377\u79ef\u5e94\u7528\u2014\u2014\"box function\"\uff0c\u5176\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u65f6\u5b9a\u4e49\u5982\u4e0b\uff1a

\\[ f(x) = \\left\\{ \\begin{array}{} 1 &|x| \\leq 0.5\\\\ 0 &otherwise \\end{array} \\right. \\]

\u800c\u5c06\u5b83\u5e26\u5165\u5377\u79ef\u7684\u8868\u8fbe\u5f0f\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a

\\[ (f*g)(x)=\\int_{-0.5}^{0.5}g(x-y)\\mathrm{d}y \\]

\u90a3\u5b9e\u9645\u4e0a\uff0c\u8fd9\u5c31\u662f\u5728\u6c42\u51fd\u6570\u5728\u5bbd\u5ea6\u4e3a 1 \u7684\u8303\u56f4\u5185\u7684\u5747\u503c\u3002

\u73b0\u5728\uff0c\u6211\u4eec\u5c06\u5b83\u8fdb\u884c\u4e00\u70b9\u6269\u5c55\uff0c\u6765\u5230\u4e8c\u7ef4\uff0c\u5219\u53ef\u4ee5\u5c06\u79bb\u6563\u7684\u5377\u79ef\u8fc7\u7a0b\u7528\u8fd9\u6837\u4e00\u4e2a gif \u6765\u8868\u793a\uff1a

\u601d\u8003

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e8c\u7ef4\u5377\u79ef\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5377\u51fa\u6765\u7684\u4e1c\u897f\u8981\u6bd4\u539f\u59cb\u56fe\u50cf\u5c0f\u3002\u800c\u5176\u4e2d\u4e00\u79cd\u89e3\u51b3\u7684\u65b9\u6cd5\u662f padding\u3002\u5728\u6b64\u4e0d\u505a\u8fc7\u591a\u4ecb\u7ecd\u3002

\u5178\u578b\u6ee4\u6ce2\u5668

\u5176\u4ed6\u5178\u578b\u7684\u6ee4\u6ce2\u5668\u53ef\u80fd\u5c06\u5728\u4e4b\u540e\u4ecb\u7ecd\uff0c\u8fd9\u91cc\u7b80\u5355\u63d0\u51e0\u4e2a\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u589e\u52a0\u5bf9\u6bd4\u5ea6","title":"\u589e\u52a0\u5bf9\u6bd4\u5ea6","text":"

\u589e\u52a0\u5bf9\u6bd4\u5ea6(increase contrast)\u5373\u8ba9\u753b\u9762\u4e2d\u7684\u989c\u8272\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u901a\u4fd7\u6765\u8bf4\u5c31\u662f\u9ed1\u7684\u66f4\u9ed1\uff0c\u767d\u7684\u66f4\u767d\u3002

\u4f53\u611f\u4e0a\u8ba9\u4e00\u5f20\u96fe\u8499\u8499\u7684\u7167\u7247\u53d8\u5f97\u66f4\u52a0\u9ed1\u767d\u5206\u660e\u3002

\u4e0a\u9762\u4e5f\u8bf4\u4e86\uff0c\u662f\u5c06\u8272\u5f69\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u8bb2\u539f\u6765\u7684\u989c\u8272\u8fdb\u884c\u4e00\u4e2a\u6620\u5c04\uff0c\u4ee4 \\(color'(x,y) = f[color(x,y)]\\)\u3002

\u90a3\u4e48\u4e00\u822c\u6765\u8bf4\uff0c\u6211\u4eec\u91c7\u7528S \u66f2\u7ebf(S curve)\u6765\u8fdb\u884c\u8fd9\u4e2a\u6620\u5c04\uff0c\u4e5f\u5c31\u662f\u5c06\u539f\u672c\u5747\u5300\u5206\u5e03\u7684\u70b9\u6309\u7167 S \u66f2\u7ebf\u8fdb\u884c\u62c9\u4f38\u548c\u538b\u7f29\uff0c\u8fd9\u6837\uff0c\u767d\u7684\u4f1a\u66f4\u767d\uff0c\u9ed1\u7684\u5c31\u4f1a\u66f4\u9ed1\u3002

\u56fe\u4e2d\u6a2a\u5750\u6807\u8868\u793a\u539f\u6765\u7684\u989c\u8272\uff0c\u7eb5\u5750\u6807\u8868\u793a\u6620\u5c04\u540e\u7684\u989c\u8272\uff0c\u53ef\u4ee5\u53d1\u73b0\u9ed1\u8272\u90e8\u5206\u7684\u989c\u8272\u90fd\u5411\u9ed1\u8272\u504f\u79fb\uff0c\u767d\u8272\u90e8\u5206\u4ea6\u7136\u3002

\u800c\u5177\u4f53\u4f7f\u7528\u7684\u66f2\u7ebf\uff0c\u5219\u9700\u8981\u6839\u636e\u9700\u6c42\u8fdb\u884c\u8c03\u6574\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cd\u8272","title":"\u53cd\u8272","text":"

\u987e\u540d\u601d\u4e49\uff0c\u56fe\u50cf\u53d6\u53cd\u8272(image invert)\u5c31\u662f\u5c06\u989c\u8272\u53d6\u53cd\uff0c\u9ed1\u53d8\u767d\uff0c\u767d\u53d8\u9ed1\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u8fb9\u7f18\u63d0\u53d6","title":"\u8fb9\u7f18\u63d0\u53d6","text":"

\u8fb9\u7f18\u63d0\u53d6 Edge detection

\u5f15\u5165

\u6a21\u7cca(blur) \u548c \u9510\u5316(sharpen) \u662f\u4e24\u4e2a\u5bf9\u5e94\u7684\u6982\u5ff5\uff0c\u5b9e\u73b0\u7684\u624b\u6bb5\u4e5f\u975e\u5e38\u7c7b\u4f3c\u3002

\u4f7f\u7528\u5bf9\u6bd4

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6a21\u7cca","title":"\u6a21\u7cca","text":"

\u6240\u8c13\u7684\u6a21\u7cca(blur)\uff0c\u50cf\u662f\u5c06\u67d0\u4e2a\u4f4d\u7f6e\u7684\u50cf\u7d20\u548c\u5468\u56f4\u6df7\u5408\u8d77\u6765\uff0c\u66f4\u6570\u5b66\u7684\u8868\u8ff0\u6765\u8bf4\uff0c\u9700\u8981\u4e0e\u5468\u56f4\u8fdb\u884c\u52a0\u6743\u6c42\u5e73\u5747\uff0c\u6ca1\u9519\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u5377\u79ef\u6765\u5b9e\u73b0\u3002

Source: Stanford CS248, Winter 202

\u4f8b\u5982\uff0c\u5047\u8bbe\u6211\u4eec\u7528\u8fd9\u6837\u4e00\u4e2a\u4e8c\u7ef4\u6ee4\u6ce2\u5668\u5bf9\u4e00\u5f20\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\uff1a

\\[ \\begin{bmatrix} \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\end{bmatrix} \\]

\u90a3\u4e48\u65b0\u5f97\u5230\u7684\u56fe\u7247\u4e2d\u7684\u50cf\u7d20\u5c06\u4f1a\u7b49\u4e8e\u539f\u56fe\u7247\u8fd9\u4e2a\u50cf\u7d20\u5468\u56f4\u7684 8 \u4e2a\u50cf\u7d20\u548c\u5b83\u6c42\u5e73\u5747\u5f97\u5230\u7684\u989c\u8272\u3002

\u518d\u6bd4\u5982\uff0c\u6ee4\u6ce2\u5668\u4f7f\u7528\u9ad8\u65af\u51fd\u6570\u7684\u9ad8\u65af\u6a21\u7cca\uff1a

\\[ f(i,j)=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2+j^2}{2\\sigma^2}} \\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\; \\begin{bmatrix} 0.075 & 0.124 & 0.075 \\\\ 0.124 & 0.204 & 0.124 \\\\ 0.075 & 0.124 & 0.075 \\end{bmatrix} \\]

\u9ad8\u65af\u6a21\u7cca\u4f1a\u66f4\u52a0\u6ce8\u91cd\u4e2d\u5fc3\u7684\u6743\u91cd\uff0c\u6240\u4ee5\u6a21\u7cca\u8d77\u6765\u76f8\u5bf9\u6765\u8bf4\u66f4\u80fd\u4fdd\u6301\u56fe\u7247\u539f\u6765\u7684\u7279\u5f81\u4e00\u70b9\u3002

\u66f4\u4f18\u79c0\u7684\u4e00\u79cd\u6a21\u7cca

\u4e00\u79cd\u66f4\u6709\u7528\u7684\u6a21\u7cca\u662f\uff0c\u63d0\u53d6\u8fb9\u7f18\u540e\u7684\u6a21\u7cca\uff0c\u5373\u6a21\u7cca\u8fc7\u7a0b\u4e2d\u4e0d\u5f71\u54cd\u8fb9\u7f18\uff0c\u6bd4\u5982\u4eba\u8138\u8fb9\u7f18\u6a21\u7cca\uff0c\u53ea\u5f71\u54cd\u8138\u800c\u4e0d\u5f71\u54cd\u5176\u4ed6\u90e8\u5206\u3002

\u5177\u4f53\u5b9e\u73b0\u6211\u4eec\u5c06\u5728 \u518d\u770b\u6ee4\u6ce2\u5668 \u4e2d\u7684 \u53cc\u8fb9\u6ee4\u6ce2\u5668\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u9510\u5316","title":"\u9510\u5316","text":"

\u6211\u4eec\u6ce8\u610f\u5230\uff0c\u6a21\u7cca\u4e2d\u7684\u6ee4\u6ce2\u5668\u57fa\u672c\u4e0a\u6bcf\u4e00\u4e2a\u5143\u7d20\u90fd\u662f\u975e\u8d1f\u6570\uff0c\u610f\u601d\u662f\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u4fdd\u7559\u4e00\u90e8\u5206\u8fd9\u4e9b\u50cf\u7d20\u7684\u7279\u5f81\u3002

\u90a3\u5982\u679c\u6211\u4eec\u628a\u5176\u4e2d\u4e00\u90e8\u5206\u6539\u6210\u8d1f\u6570\u5462\uff1f\u90a3\u5c31\u8bf4\u660e\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u51cf\u53bb\u8fd9\u90e8\u5206\u7684\u7279\u5f81\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u5f88\u50cf\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7279\u5f81\u5c31\u4f1a\u88ab\u524a\u5f31\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u51e0\u4e4e\u76f8\u53cd\uff0c\u90a3\u4e48\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u7684\u7279\u5f81\u5c31\u4f1a\u88ab\u52a0\u5f3a\u3002

\u6211\u4eec\u8003\u8651\u8fd9\u6837\u4e00\u4e2a\u7279\u6b8a\u4f8b\u5b50\uff1a

\\[ \\begin{bmatrix} 0 & -1 & 0 \\\\ -1 & 5 & -1 \\\\ 0 & -1 & 0 \\end{bmatrix} \\]

\u5982\u679c\u8fb9\u7f18\u7684\u70b9\u548c\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u4e0d\u4e00\u6837\uff0c\u5219\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u7684\u7279\u5f81\u4f1a\u88ab\u5f3a\u8c03\uff0c\u5373\u4f1a\u653e\u5927\u76f8\u90bb\u70b9\u7684\u533a\u522b\uff0c\u8fd9\u5c31\u662f\u9510\u5316(sharpen)\u7684\u539f\u7406\u3002

Source: Stanford CS248, Winter 202

\u6a21\u7cca\u4e0e\u9510\u5316\u7684\u8054\u7cfb

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u518d\u770b\u6ee4\u6ce2\u5668","title":"\u518d\u770b\u6ee4\u6ce2\u5668","text":"

\u4e0a\u9762\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86\u7528\u4e8e\u6a21\u7cca\u7684\u6ee4\u6ce2\u5668\uff08\u6bd4\u5982\u9ad8\u65af\u6ee4\u6ce2\u5668\uff09\uff0c\u7528\u4e8e\u9510\u5316\u7684\u6ee4\u6ce2\u5668\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u770b\u770b\u5176\u4ed6\u7684\u6ee4\u6ce2\u5668\u7684\u76f8\u5173\u5185\u5bb9\uff1a

\u6c34\u5e73/\u5782\u76f4\u68af\u5ea6\u63d0\u53d6

\\[ \\begin{bmatrix} -1 & 0 & 1 \\\\ -2 & 0 & 2 \\\\ -1 & 0 & 1 \\end{bmatrix} \\] \\[ \\begin{bmatrix} -1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ 1 & 2 & 1 \\end{bmatrix} \\] \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 \u53cc\u8fb9\u6ee4\u6ce2\u5668

\u5f15\u5165

\u56fe\u50cf\u91c7\u6837(sampling)\u5206\u4e3a\u5411\u4e0a\u91c7\u6837(up-sampling)\u548c\u5411\u4e0b\u91c7\u6837(down-sampling)\u4e24\u79cd\u3002

\u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u5c31\u662f\u5728\u4fdd\u6301\u56fe\u50cf\u7279\u5f81\u7684\u60c5\u51b5\u4e0b\u5bf9\u56fe\u7247\u8fdb\u884c\u7f29\u653e\u3002\u663e\u7136\uff0c\u5728\u7f29\u653e\u56fe\u50cf\u65f6\uff0c\u4f1a\u51fa\u73b0\u50cf\u7d20\u6570\u91cf\u7684\u53d8\u5316\uff0c\u90a3\u8981\u5982\u4f55\u6dfb\u52a0\u50cf\u7d20\u3001\u5982\u4f55\u51cf\u5c11\u50cf\u7d20\uff0c\u5c31\u662f\u56fe\u50cf\u91c7\u6837\u8003\u8651\u7684\u4e8b\u60c5\u3002

\u6b64\u5916\uff0c\u5c06\u4e24\u8005\u7ed3\u5408\uff0c\u8fd8\u4f1a\u6709\u4f8b\u5982\u6539\u53d8\u56fe\u7247\u957f\u5bbd\u6bd4\uff0c\u8fdb\u884c\u62c9\u4f38\u8fd9\u79cd\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7f29\u5c0f\u56fe\u7247\u5411\u4e0b\u91c7\u6837","title":"\u7f29\u5c0f\u56fe\u7247\uff1a\u5411\u4e0b\u91c7\u6837","text":"

\u5411\u4e0b\u91c7\u6837\u4e5f\u5c31\u662f\u8ba9\u56fe\u7247\u53d8\u5c0f\uff0c\u8fd9\u91cc\u4e3b\u8981\u9700\u8981\u8003\u8651\u7684\u95ee\u9898\u662f\u5982\u4f55\u7f29\u5c0f\u56fe\u7247\uff0c\u5982\u4f55\u907f\u514d\u51fa\u73b0\u4fe1\u53f7\u8d70\u6837\u7684\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u4fe1\u53f7\u8d70\u6837","title":"\u4fe1\u53f7\u8d70\u6837","text":"

\u8bf4\u5230\u8ba9\u56fe\u50cf\u53d8\u5c0f\uff0c\u6700\u7b80\u5355\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u2014\u2014\u6bd4\u5982\uff0c\u8ba9\u56fe\u7247\u7684\u7ebf\u5ea6\u7f29\u5c0f\u4e00\u534a\uff0c\u53ef\u4ee5\u6bcf\u56db\u4e2a\u683c\u5b50\u5c31\u91c7\u4e00\u4e2a\u683c\u5b50\u7684\u6837\u672c\u3002

\u800c\u8fd9\u79cd\u7c97\u66b4\u7684\u505a\u6cd5\u5219\u6709\u53ef\u80fd\u5bfc\u81f4\uff1a

-\u6469\u5c14\u7eb9(Moir\u00e9 Patterns)\u3002 -\u9a6c\u8f66\u8f6e\u9519\u89c9(Wagon Wheel Illusion) - ...

\u800c\u8fd9\u4e9b\u7531\u91c7\u6837\u5bfc\u81f4\u7684\u95ee\u9898\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4fe1\u53f7\u8d70\u6837(aliasing)\u3002

\u4ece\u672c\u8d28\u4e0a\u6765\u8bf4\uff0c\u4fe1\u53f7\u8d70\u6837\u7684\u53d1\u751f\uff0c\u662f\u56e0\u4e3a\u91c7\u6837\u9891\u7387\u8ddf\u4e0d\u4e0a\u56fe\u50cf\u9891\u7387\u5bfc\u81f4\u7684\u3002

Signals are changing too fast but sampled too slow.

\u5982\u4f55\u7406\u89e3\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d

\u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u4f1a\u7ed9\u51fa\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d\u7684\u6765\u6e90\u3002

\u4f46\u662f\u4e00\u4e2a\u66f4\u76f4\u89c2\uff0c\u66f4\u6a21\u7cca\u7684\u770b\u6cd5\u662f\uff1a\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u3002\u6bd4\u5982\u56fe\u50cf\u4e2d\u6709\u4e00\u4e2a\u975e\u5e38\u5206\u660e\u7684\u8fb9\u754c\uff0c\u90a3\u4e48\u5b83\u7684\u9891\u7387\u4e00\u822c\u4e0d\u4f1a\u4f4e\u3002

\u800c\u8fd9\u91cc\u7684\u201c\u91c7\u6837\u9891\u7387\u201d\u8861\u91cf\u4e86\u4fe1\u53f7\u53d8\u5316\u7684\u9891\u7387\u3002

\u6bd4\u5982\uff0c\u5982\u679c\u5bf9\u4e00\u4e2a\u6b63\u5f26\u6ce2\u8fdb\u884c\u91c7\u6837\uff0c\u5373\u4ece\u4e00\u4e2a\u8fde\u7eed\u7684\u6b63\u5f26\u6a21\u62df\u4fe1\u53f7\u4e2d\u9009\u53d6\u82e5\u5e72\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u540c\u91c7\u6837\u9891\u7387\u548c\u4e0d\u540c\u7684\u56fe\u50cf\u9891\u7387\u7684\u9009\u53d6\u65b9\u6848\u4f1a\u4ea7\u751f\u4e0d\u540c\u7684\u7ed3\u679c\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e0a\u9762\u7684\u51e0\u4e2a\u51fd\u6570\uff0c\u91c7\u6837\u9891\u7387\u548c\u539f\u51fd\u6570\u7684\u9891\u7387\u5339\u914d\u8f83\u597d\uff0c\u6240\u4ee5\u91c7\u6837\u5f97\u5230\u7684\u70b9\u57fa\u672c\u80fd\u53cd\u6620\u51fa\u539f\u6765\u56fe\u5f62\u7684\u7279\u5f81\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bd4\u8f83\u4e0b\u9762\u7684\u51e0\u4e2a\u66f2\u7ebf\uff0c\u91c7\u6837\u5c31\u4e0d\u662f\u5f88\u7406\u60f3\u4e86\u3002

\u6bd4\u8f83\u76f4\u89c2\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u8fc7\u6162\u70b9\u91c7\u6837\u9891\u7387\u4f1a\u5bfc\u81f4\u4fe1\u606f\u4e22\u5931\uff0c\u751a\u81f3\u662f\u8868\u73b0\u51fa\u5176\u5b83\u9891\u7387\u7684\u4fe1\u53f7\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u4e0d\u6b63\u5e38\u7684\u884c\u4e3a\u5c31\u5bfc\u81f4\u4e86\u4fe1\u53f7\u8d70\u6837\u3002

\u8fd9\u4e2a\u201c\u9891\u7387\u201d\u548c\u56fe\u50cf\u6709\u4ec0\u4e48\u5173\u7cfb\uff1f

\u9996\u5148\u6211\u4eec\u77e5\u9053\uff0c\u8981\u5411\u6709\u201c\u9891\u7387\u201d\u8fd9\u4e2a\u5c5e\u6027\uff0c\u8868\u8fbe\u5f0f\u6216\u8005\u8bf4\u51fd\u6570\u9700\u8981\u662f\u5468\u671f\u6027\u7684\u3002\u7136\u800c\u201c\u5468\u671f\u6027\u201d\u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\u6765\u8bf4\u53ef\u80fd\u662f\u4e00\u4e2a\u8f83\u4e3a\u82db\u523b\u7684\u6761\u4ef6\u3002

\u6b64\u65f6\u5c31\u8f6e\u5230\u5085\u7acb\u53f6\u53d8\u6362\u767b\u573a\u4e86\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#fourier-\u53d8\u6362","title":"Fourier \u53d8\u6362","text":"

\u6700\u7b80\u5355\u76f4\u767d\u5730\u7406\u89e3\u5085\u7acb\u53f6\u53d8\u6362(Fourier Transform)\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5c06\u4efb\u610f\u53ef\u4ee5\u8fdb\u884c\u5085\u7acb\u53f6\u53d8\u6362\u7684\u51fd\u6570\uff0c\u53d8\u5316\u4e3a\u4e00\u4e2a\u6b63\u5f26\u3001\u4f59\u5f26\u51fd\u6570\u7ea7\u6570\u7684\u5f62\u5f0f\u3002

\u4f8b\u5982\u6700\u7ecf\u5178\u7684\uff0c\u4f7f\u7528\u4e0d\u540c\u9891\u7387\u7684\u6b63\u5f26\u6ce2\u6765\u62df\u5408\u4e00\u4e2a\u65b9\u6ce2\u3002

\u8fd9\u91cc\u5f15\u6d41\u4e00\u4e2a xg \u7684\u89c6\u9891\uff1ahttps://www.bilibili.com/video/BV1Y7411W73U/

\u6b64\u65f6\u4f60\u53ef\u80fd\u4f1a\u95ee\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u7ea7\u6570\u4e5f\u4e0d\u4fdd\u8bc1\u6709\u5468\u671f\u554a\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u7684\u76ee\u7684\u5e76\u4e0d\u662f\u627e\u5230\u4e00\u4e2a\u5468\u671f\uff0c\u800c\u662f\u80fd\u591f\u4f7f\u7528\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u7684\u67d0\u4e9b\u7279\u5f81\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u662f\u5177\u6709\u5468\u671f\u6027\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u7528\u8fd9\u4e2a\u7ea7\u6570\u4e2d\u7684\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u3002

\u4e0b\u9762\u8fd9\u5f20\u56fe\u7247\u5c31\u662f\u7f16\u7801\u540e\u7684\u9891\u8c31\u3002

\u800c\u5728\u6b27\u62c9\u516c\u5f0f \\(e^{i\\theta} = \\cos\\theta + i\\sin\\theta\\) \u7684\u7edf\u4e00\u4e0b\uff0cFourier \u53d8\u6362\u53ef\u4ee5\u8868\u793a\u4e3a\uff1a

\\[ F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x \\\\ f(x) = \\int^{\\infty}_{-\\infty} F(u) e^{i2\\pi ux} \\rm{d} u \\\\ \\text{ where 'x' refers to space, 'u' refers to frequency} \\]

\u901a\u8fc7\u8fd9\u79cd\u5f62\u5f0f\uff0c\u6211\u4eec\u5b9e\u73b0\u4e86 spatial domain \u548c frequency domain \u4e4b\u95f4\u7684\u7edf\u4e00\u3002

graph LR;\nA([\"spatial domain\"]) ==>|\"Fourier transform\"| B([\"frequency domain\"])\nB ===>|\"Inverse transform\"| A

\u5c1d\u8bd5\u4f7f\u7528\u5377\u79ef\u7684\u89d2\u5ea6\u6765\u770b\u5085\u7acb\u53f6\u53d8\u6362

\u89c2\u5bdf\u5f0f\u5b50 \\(F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x\\)\uff0c\u662f\u4e0d\u662f\u80fd\u5c06\u5b83\u770b\u4f5c\u4e00\u4e2a\u5377\u79ef\u5f0f\u5462\uff1f

\u4e00\u4e2a\u6709\u610f\u601d\u7684\u6027\u8d28

\u800c\u4f7f\u7528 Fourier \u7684\u53e6\u5916\u4e00\u4e2a\u597d\u5904\u662f\uff0c\u5b83\u4e3a\u6211\u4eec\u5e26\u6765\u4e86\u8fd9\u6837\u4e00\u4e2a\u6570\u5b66\u6027\u8d28\uff1a

Spatial Domain Frequency Domain \\(g(x) = f(x) * h(x)\\) Convolution \\(\\leftrightarrow\\) \\(G(u) = F(u)H(u)\\) Multiplication g(x)=f(x)h(x) Multiplication \\(\\leftrightarrow\\) \\(G(u) = F(u) * H(u)\\) Convolution

\u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982\uff1a

\u6211\u4eec\u5bf9\u4e00\u4e2a\u56fe\u50cf\u8fdb\u884c\u6a21\u7cca\u5904\u7406\uff0c\u5373\u5c06\u56fe\u50cf\u4e0e Blur Kernel \u8fdb\u884c\u5377\u79ef\uff0c\u5c31\u7b49\u6548\u4e8e\u5c06\u8fd9\u4e24\u4e2a\u77e9\u9635\u5728\u9891\u7387\u57df\u4e2d\u76f8\u4e58\u3002

\u800c\u4f20\u7edf\u56fe\u50cf\u538b\u7f29\uff0c\u5bf9\u5e94\u5230\u9891\u7387\u57df\u4e0a\uff0c\u5c31\u662f\u5c06\u4ed6\u4eec\u7684\u4e8c\u7ef4\u9891\u8c31\u4e2d\u7684\u9ad8\u9891\u4e22\u6389\u3002

\u90a3\u4e48\u5f97\u5230 Fourier \u53d8\u6362\u8fd9\u4e2a\u5de5\u5177\u4ee5\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5c06\u8f83\u96be\u5904\u7406\u7684\u50cf\u7d20\u4fe1\u606f\u8f6c\u5316\u4e3a\u9891\u7387\u4fe1\u606f\u3002

\u5982\u4e0b\u56fe\uff0c\u5c06\u4e00\u5f20\u56fe\u7247\u4fe1\u606f\u7f16\u7801\u4e3a\u4e86\u9891\u8c31\u7684\u5f62\u5f0f\u3002\u7531\u4e8e\u8fd9\u91cc\u7684\u9891\u8c31\u662f\u4e8c\u7ef4\u7684\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u5f20\u7070\u5ea6\u56fe\u8868\u73b0\u51fa\u6765\u3002

\u597d\uff0c\u6709\u4e86\u8fd9\u4e9b\u94fa\u57ab\uff0c\u6211\u4eec\u5728\u56de\u5934\u6765\u8bb2\u91c7\u6837\uff0c\u8fd9\u6b21\u6211\u4eec\u5c06\u5c1d\u8bd5\u7740\u540c\u65f6\u4ece Spatial domain \u548c Frequency domain \u7684\u89d2\u5ea6\u6765\u770b\u5f85\u95ee\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u91c7\u6837","title":"\u91c7\u6837","text":"

\u9996\u5148\uff0c\u6211\u4eec\u4ece\u5b57\u9762\u610f\u601d\u4e0a\u548c\u76ee\u7684\u4e0a\u6765\u7406\u89e3\u4e00\u4e0b\u91c7\u6837\u3002

wiki \u4e0a\u5bf9\u91c7\u6837\u7684\u5b9a\u4e49\u662f\u8fd9\u6837\u7684\uff1a

\u5728\u4fe1\u53f7\u5904\u7406\u9886\u57df\uff0c\u91c7\u6837\u662f\u5c06\u4fe1\u53f7\u4ece\u8fde\u7eed\u65f6\u95f4\u57df\u4e0a\u7684\u6a21\u62df\u4fe1\u53f7\u8f6c\u6362\u5230\u79bb\u6563\u65f6\u95f4\u57df\u4e0a\u7684\u79bb\u6563\u4fe1\u53f7\u7684\u8fc7\u7a0b\u3002

\u663e\u7136\uff0c\u6211\u4eec\u8fd9\u91cc\u91c7\u6837\u7684\u5b9a\u4e49\u548c\u8fd9\u91cc\u7684\u5b9a\u4e49\u5e76\u4e0d\u4e00\u6837\u3002\u4e0e\u4e4b\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u9700\u8981\u4ece\u539f\u59cb\u7684\uff0c\u8fd1\u4f3c\u8fde\u7eed\u7684\u56fe\u7247\u4e2d\u63d0\u53d6\u51fa\u5177\u6709\u7279\u5f81\u7684\u4e00\u4e9b\u540c\u6837\u662f\u79bb\u6563\u7684\u7684\u4fe1\u606f\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6211\u4eec\u5c06\u56fe\u7247\u8fdb\u884c\u653e\u5927\u7f29\u5c0f\u53d8\u6362\u7684\u76ee\u7684\u3002

\u5173\u4e8e\u91c7\u6837\u66f4\u6570\u5b66\u7684\u5b9a\u4e49\uff0c\u5c31\u662f\u4f7f\u7528\uff08\u68b3\u5f62\uff09\u8109\u51b2\u51fd\u6570(Dirac comb function)\u53bb\u4e58\u88ab\u91c7\u6837\u7684\u51fd\u6570\u3002

\u53d6\u51b3\u4e8e\u8109\u51b2\u51fd\u6570\u7684\u9891\u7387\uff0c\u91c7\u6837\u53c8\u88ab\u5206\u4e3a\u5bc6\u96c6\u91c7\u6837(Dense sampling)\u548c\u7a00\u758f\u91c7\u6837(Sparse sampling)\uff0c\u4e5f\u5c31\u5206\u522b\u5bf9\u5e94\u7740\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u91c7\u6837\u9891\u7387\u8f83\u9ad8\u548c\u91c7\u6837\u9891\u7387\u8f83\u4f4e\u7684\u60c5\u51b5\u3002

\u800c\u7a00\u758f\u91c7\u6837\u5bfc\u81f4\u7684\u4fe1\u53f7\u8d70\u6837\u95ee\u9898\uff0c\u5c31\u662f\u91c7\u6837\u7ed3\u679c\u518d\u9891\u7387\u57df\u4e2d\u51fa\u73b0\u4e86\u4ea4\u96c6\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u51cf\u5c11\u8d70\u6837","title":"\u51cf\u5c11\u8d70\u6837","text":"

\u65e2\u7136\u641e\u6e05\u695a\u4e86\u8d70\u6837\u662f\u5982\u4f55\u4ea7\u751f\u7684\uff0c\u90a3\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u9700\u8981\u8003\u8651\u5982\u4f55\u51cf\u5c11\u4fe1\u53f7\u8d70\u6837\u3002

\u603b\u4f53\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e24\u79cd\u9009\u62e9\uff1a

  1. \u63d0\u9ad8\u91c7\u6837\u9891\u7387\uff1b
  2. \u5148\u8fc7\u6ee4\u9ad8\u9891\u518d\u91c7\u6837\uff1b

\u9996\u5148\u6211\u4eec\u56de\u987e\u77e5\u9053\uff0c\u8d70\u6837\u662f\u7531\u4e8e\u91c7\u6837\u9891\u7387\u4f4e\u4e8e\u56fe\u50cf\u9ad8\u9891\u5bfc\u81f4\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u53ea\u9700\u8981\u63d0\u9ad8\u91c7\u6837\u9891\u7387\u5c31\u80fd\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u4e86\u3002

\u800c\u5177\u4f53\u9700\u8981\u63d0\u9ad8\u5230\u591a\u5c11\u5462\uff1f\u5c31\u9700\u8981\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406(Nyquies-Shannon Theorem)\u3002

\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406

\u5f53\u7136\uff0c\u4e3a\u4e86\u8de8\u8fc7\u4e00\u4e2a\u66f4\u9ad8\u7684\u95e8\u69db\u6211\u4eec\u4e5f\u4e0d\u4e00\u5b9a\u9700\u8981\u589e\u957f\u81ea\u5df1\u7684\u817f\u3002\u5728\u80fd\u591f\u63a5\u53d7\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u964d\u4f4e\u95e8\u69db\u2014\u2014\u5373\uff0c\u5148\u5c06\u9ad8\u9891\u6ee4\u6ce2\uff0c\u518d\u8fdb\u884c\u91c7\u6837\u3002

\u66f4\u5f62\u8c61\u5730\u6765\u8bf4\uff0c\u5728\u9891\u7387\u57df\u4e2d\u53bb\u6389\u4ea4\u96c6\u7684\u624b\u6bb5\u4e3a\uff1a

\u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f

\u56de\u987e\u6211\u4eec\u4e00\u5f00\u59cb\u7ed9\u51fa\u7684\uff0c\u5173\u4e8e\u9891\u7387\u7684\u4e00\u4e2a\u6a21\u7cca\u7684\u7406\u89e3\uff0c\u201c\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u201d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u6d88\u53bb\u8fd9\u4e2a\u9ad8\u9891\uff0c\u6211\u4eec\u5c31\u9700\u8981\u8ba9\u62b9\u53bb\u8fd9\u4e9b\u201c\u53d8\u5316\u5267\u70c8\u201d\u7684\u6210\u5206\u3002\u518d\u63a5\u5730\u6c14\u4e00\u70b9\uff0c\u5c31\u662f\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e9b\u68f1\u89d2\u62b9\u5f00\u2014\u2014\u6240\u4ee5\u4e00\u79cd\u624b\u6bb5\u5c31\u662f\u8fdb\u884c\u6a21\u7cca\u3002

\u4e00\u4e2a\u76f4\u89c2\u7684 \ud83c\udf30

\u6211\u4eec\u4ee5\u5bf9\u4e00\u4e2a\u4e09\u89d2\u5f62\u91c7\u6837\u4e3a\u4f8b\uff0c\u8bf4\u660e\u5982\u4f55\u6ee4\u9ad8\u9891\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u76f4\u63a5\u91c7\u6837\u4f1a\u5bfc\u81f4\u7ed3\u679c\u4e0d\u592a\u7406\u60f3\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u91c7\u6837\u4e4b\u524d\u8fdb\u884c\u4e00\u6b21\u6a21\u7cca\u64cd\u4f5c\uff1a

\u5b83\u5c06\u8d85\u8fc7\u5948\u594e\u65af\u9891\u7387\u7684\u90e8\u5206\u6ee4\u6ce2\u540e\uff0c\u660e\u663e\u53d1\u73b0\u91c7\u6837\u4fdd\u7559\u7684\u539f\u672c\u56fe\u50cf\u7684\u7279\u5f81\u66f4\u591a\u4e86\u3002

\u800c\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u4e00\u4e2a\u6bd4\u8f83\u8d34\u8fd1\u65e5\u5e38\u751f\u6d3b\u7684\u8bcd\uff0c\u53eb\u6297\u952f\u9f7f(anti-aliasing)\uff0c\u6216\u8005\u8bf4\u53cd\u8d70\u6837\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","title":"\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","text":"

\u9996\u5148\u89c4\u5b9a\u9891\u5e26\u9650\u5236\u4fe1\u53f7(band-limited signal) \\(f_0\\) \u662f\u56fe\u50cf\u9891\u7387\u7684\u4e00\u4e2a\u4e0a\u754c\uff1b\u5219\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406\u6307\u51fa\uff0c\u5982\u679c\u91c7\u6837\u9891\u7387\u5927\u4e8e \\(2f_0\\)\uff0c\u5219\u8be5\u91c7\u6837\u5f97\u5230\u7684\u7ed3\u679c\u53ef\u4ee5\u5b8c\u7f8e\u8868\u5f81\u539f\u51fd\u6570\u7684\u7279\u5f81\uff0c\u5373 \"perfectly reconstruct\"\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u653e\u5927\u56fe\u7247\u5411\u4e0a\u91c7\u6837--\u63d2\u503c","title":"\u653e\u5927\u56fe\u7247\uff1a\u5411\u4e0a\u91c7\u6837 / \u63d2\u503c","text":"

\u56fe\u50cf\u653e\u5927(image magnification)\u662f\u56fe\u50cf\u7f29\u5c0f\u7684\u9006\u53d8\u6362(\u5e9f\u8bdd)\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5e76\u4e0d\u80fd\u4e25\u683c\u5730\u8bf4\u662f\u9006\u53d8\u6362\uff0c\u56e0\u4e3a\u56fe\u50cf\u7f29\u5c0f\u4e0e\u56fe\u50cf\u653e\u5927\u90fd\u662f\u4e0d\u53ef\u9006\u7684\u2014\u2014\u5373\uff0c\u56fe\u7247\u7f29\u5c0f\u5fc5\u7136\u5e26\u5566\u50cf\u7d20\u635f\u5931\uff0c\u56fe\u50cf\u653e\u5927\u5fc5\u7136\u5e26\u6765\u4e00\u4e9b\u901a\u8fc7\u8ba1\u7b97\u5f97\u5230\u7684\u8fd1\u4f3c\u50cf\u7d20\uff0c\u800c\u8fd9\u4e9b\u50cf\u7d20\u5728\u53d8\u6362\u5f97\u5230\u7684\u7ed3\u679c\u56fe\u50cf\u4e2d\u4e0e\u539f\u672c\u50cf\u7d20\u662f\u65e0\u6cd5\u533a\u5206\u7684\u3002

\u90a3\u4e48\uff0c\u5355\u5c31\u56fe\u50cf\u653e\u5927\u6765\u8bf4\uff0c\u6211\u4eec\u5c31\u9700\u8981\u6839\u636e\u5df2\u6709\u7684\u50cf\u7d20\uff0c\u8fdb\u884c\u4e00\u4e9b\u63d2\u503c(interpolation)\u64cd\u4f5c\uff0c\u4ee5\u751f\u6210\u90a3\u4e9b\u653e\u5927\u8fc7\u7a0b\u4e2d\u65b0\u51fa\u73b0\u7684\u50cf\u7d20\u3002

\u6211\u4eec\u4ece\u5bf9\u4e00\u4e2a\u4e00\u5143\u4e00\u7ef4\u51fd\u6570\u63d2\u503c\u7684\u89d2\u5ea6\u6765\u770b\u8fd9\u4e2a\u95ee\u9898\uff0c\u5373\u628a\u8fd9\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u5728\u91c7\u6837\u5f53\u4e2d\u63d2\u5165\u70b9\u7684\u95ee\u9898\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u73b0\u5728\u6709\u4e00\u4e2a\u6765\u81ea\u4e8e\u6b63\u5f26\u51fd\u6570\u7684\u91c7\u6837\uff0c\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728 \\(x\\in(x_i,x_{i+1})\\) \u4e2d\u63d2\u5165\u4e00\u4e2a\u70b9 \\((x_{ip}, y_{ip})\\) \u4f7f\u5f97\u5b83\u5c3d\u53ef\u80fd\u7b26\u5408\u539f\u672c\u7684\u6b63\u5f26\u51fd\u6570\u2014\u2014\u53c8\u6216\u8005\u8bf4\uff0c\u4f7f\u5f97\u5b83\u770b\u8d77\u6765\u5c3d\u53ef\u80fd\u5408\u7406\u3002

\u800c\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u518d\u8fdb\u4e00\u6b65\u5730\u601d\u8003\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5229\u7528\u73b0\u6709\u7684\u70b9\u53bb\u62df\u5408\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u7136\u540e\u518d\u7528\u8fd9\u4e2a\u51fd\u6570\u4e0a\u53d6\u7684\u70b9\u4f5c\u4e3a\u63d2\u5165\u7684\u70b9\u3002

\u90a3\u4e48\u6bd4\u8f83\u5e38\u89c1\u7684\u201c\u62df\u5408\u201d\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

1.\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff1b 2.\u7ebf\u6027\u63d2\u503c(linear interpolation)\uff1b 3.(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\uff1b

\u63a5\u4e0b\u6765\u6211\u4eec\u4e00\u4e00\u4ecb\u7ecd\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6700\u8fd1\u63d2\u503c","title":"\u6700\u8fd1\u63d2\u503c","text":"

\u6240\u8c13\u7684\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff0c\u5b9e\u9645\u4e0a\u4e0e KNN \u7684 K=1 \u7684\u7279\u6b8a\u60c5\u51b5\u3002\u5373\uff0c\\(y(x) = y(x_{\\mathop{argmin}(|x-x_i|)})\\)\u3002\u8bf4\u4eba\u8bdd\u5c31\u662f\u6a2a\u5750\u6807\u79bb\u54ea\u4e2a\u8fd1\uff0c\u5c31\u548c\u54ea\u4e2a\u4e00\u6837\u3002

\u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

\u89c2\u5bdf\u8fd9\u6761\u84dd\u8272\u66f2\u7ebf\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b83\u5177\u6709\u8fd9\u51e0\u4e2a\u7279\u5f81\uff1a

\u800c\u4e14\u62cd\u8111\u74dc\u60f3\u60f3\u4e5f\u80fd\u611f\u53d7\u5230\uff0c\u8fd9\u79cd\u63d2\u503c\u7684\u65b9\u6cd5\u5e76\u4e0d\u4f18\u96c5\u2014\u2014\u4e00\u5f20\u56fe\u7247\u653e\u5927\u540e\u4e00\u4e2a\u50cf\u7d20\u7684\u989c\u8272\u53d6\u51b3\u4e8e\u6700\u8fd1\u7684\u91c7\u6837\u50cf\u7d20\u989c\u8272\u2014\u2014\u5728\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e76\u4e0d\u5e0c\u671b\u6709\u8fd9\u6837\u7684\u7ed3\u679c\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7ebf\u6027\u63d2\u503c","title":"\u7ebf\u6027\u63d2\u503c","text":"

\u7ebf\u6027\u63d2\u503c(linear interpolation)\u5c31\u662f\u76f4\u63a5\u505a\u8fde\u7ebf\uff0c\u5c06\u76f8\u90bb\u7684\u70b9\u4e24\u4e24\u7528\u76f4\u7ebf\u8fde\u8d77\u6765\uff0c\u7ed8\u5236\u51fa\u4e00\u4e2a\u6298\u7ebf\u56fe\u3002

\u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u76f8\u6bd4\u4e8e\u6700\u8fd1\u63d2\u503c\uff0c\u7ebf\u6027\u63d2\u503c\u5bf9\u539f\u51fd\u6570\u7684\u62df\u5408\u6027\u76f8\u5bf9\u6765\u8bf4\u597d\u4e86\u5f88\u591a\uff0c\u800c\u4e14\u53d8\u5f97\u8fde\u7eed\u4e86\uff0c\u89c2\u5bdf\u84dd\u8272\u66f2\u7ebf\uff0c\u53d1\u73b0\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

\u4e8e\u662f\u6211\u4eec\u7ee7\u7eed\u6539\u8fdb\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

\u987e\u540d\u601d\u4e49\uff0c(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\u5c31\u662f\u4f7f\u7528\u591a\u9879\u5f0f\u51fd\u6570\u6bb5\u6765\u62df\u5408\u91c7\u6837\u533a\u95f4\u3002

\u8fd9\u91cc\u9700\u8981\u505a\u4e00\u4e2a\u8fa8\u6790\uff1a\u5e76\u4e0d\u662f\u7528\u4e00\u4e2a\u591a\u9879\u5f0f\u6765\u62df\u5408\u6240\u6709\u7684\u91c7\u6837\u70b9\uff0c\u800c\u662f\u7528\u591a\u9879\u5f0f\u6765\u62df\u5408\u4e00\u5bf9\u91c7\u6837\u70b9\uff0c\u5373\u4e00\u4e2a interval\u3002

\u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

\u5176\u4e2d\uff0c\u6bcf\u4e00\u6bb5 interval \u7684\u84dd\u8272\u7ebf\u6761\u90fd\u7b26\u5408 \\(f_i(x) = a_ix^3 + b_ix^2 + c_ix + d_i, x \\in [x_i, x_{i+1}]\\)\uff1b\u5e76\u4e14\u6211\u4eec\u4fdd\u8bc1\u5728\u91c7\u6837\u70b9\u5904\u5b83\u4eec\u90fd\u662f\u5149\u6ed1\u7684\uff0c\u5373\u4fdd\u8bc1 \\(\\forall i, \\frac{\\mathrm{d}f_i(x_{i+1})}{\\mathrm{d} x} = \\frac{\\mathrm{d}f_{i+1}(x_{i+1})}{\\mathrm{d} x}\\)

\u4e8e\u662f\uff0c\u5b83\u81ea\u7136\u5c31\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

  1. \u8fde\u7eed\uff1b
  2. \u5149\u6ed1\uff1b

\u66f4\u5177\u4f53\u7684

\u521a\u624d\u8bb2\u7684\u90fd\u662f\u4ece\u4e00\u7ef4\u51fd\u6570\u7684\u89d2\u5ea6\u6765\u601d\u8003\u63d2\u503c\uff0c\u73b0\u5728\u6211\u4eec\u6765\u4ecb\u7ecd\u4e00\u4e9b\u5728\u4e8c\u7ef4\u5c42\u9762\u505a\u63d2\u503c\u7684\u6848\u4f8b\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc\u7ebf\u6027\u63d2\u503c","title":"\u53cc\u7ebf\u6027\u63d2\u503c","text":"

\u53cc\u7ebf\u6027\u63d2\u503c(bilinear interpolation)\u5c31\u662f\u5728\u4e8c\u7ef4\u5e73\u9762\u5185\u505a\u7ebf\u6027\u63d2\u503c\uff0c\u601d\u8def\u975e\u5e38\u7b80\u5355\u3002

\u5982\u56fe\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u7ea2\u70b9\u5904\u8fdb\u884c\u63d2\u503c\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4f1a\u9009\u53d6\u4e0e\u4e4b\u76f8\u90bb\u7684\u56db\u4e2a\u70b9\uff0c\\(u_{ij},\\;\\; i,j\\in \\{0,1\\}\\)\uff0c\u518d\u6839\u636e\u8fd9\u4e2a\u70b9\u5728\u8fd9\u4e2a\u77e9\u9635\u4e2d\u7684\u4f4d\u7f6e\u8fdb\u884c\u6c42\u503c\u3002

\u5177\u4f53\u8ba1\u7b97\u65b9\u6cd5

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"\u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

wiki \ud83d\udd17

\u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(bicubic interpolation)\u5373\u5728\u4e8c\u7ef4\u5e73\u9762\u505a(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c\uff0c\u5b9e\u73b0\u601d\u8def\u4e0e\u53cc\u7ebf\u6027\u63d2\u503c\u662f\u7c7b\u4f3c\u7684\u3002

\\[ p(x,y) = \\sum_{i=0}^{3}\\sum_{j=0}^{3}a_{i,j}x^iy^j \\]

What's '4' means here?

\u8d85\u5206\u8fa8\u7387

\u5728\u5f97\u5230\u8fd9\u4e9b\u63d2\u503c\u7b56\u7565\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f15\u51fa\u8d85\u5206\u8fa8\u7387(Super-Resolution)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5373\u901a\u8fc7\u63d2\u503c\uff0c\u6211\u4eec\u5c06\u4e00\u5f20\u56fe\u7247\u7684\u5206\u8fa8\u7387\u63d0\u9ad8\uff0c\u5f97\u5230\u8d85\u8fc7\u539f\u6709\u56fe\u7247\u5206\u8fa8\u7387\u7684\u4e00\u5f20\u56fe\u7247\u3002

\u4f8b\u5982\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u4e2a\u5bf9\u6bd4\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u591a\u9879\u5f0f\u63d2\u503c\u7684\u8868\u73b0\u6bd4\u7ebf\u6027\u63d2\u503c\u7684\u8868\u73b0\u597d\u4e0d\u5c11\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","title":"\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","text":"

\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4(aspect ratio)\u8fd9\u4ef6\u4e8b\u8c8c\u4f3c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u5355\u7ef4\u5ea6\u4e0a\u8fdb\u884c\u7f29\u653e\u6765\u5b9e\u73b0\uff08\u8fdb\u884c\u4e00\u7ef4\u63d2\u503cor\u91c7\u6837\uff09\uff0c\u4f46\u662f\u662f\u5426\u5b58\u5728\u522b\u7684\u65b9\u6cd5\uff0c\u4e0d\u5927\u5e45\u6539\u53d8\u6574\u4f53\u56fe\u50cf\u5f62\u72b6\u7684\u60c5\u51b5\u4e0b\uff0c\u5b9e\u73b0\u8be5\u5f7c\u5cb8\u957f\u5bbd\u6bd4\u5462\uff1f

\u5b9e\u9645\u4e0a\uff0c\u6709\u4e00\u4e2a\u505a\u6cd5\u5c31\u662f\u5077\u5077\u5220\u6389\u51e0\u884c/\u51e0\u5217\u50cf\u7d20\uff0c\u5bf9\u4eba\u773c\u6765\u8bf4\u8fd9\u8c8c\u4f3c\u662f\u96be\u4ee5\u5bdf\u89c9\u7684\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u505a\u4e00\u4e9b\u6539\u8fdb\uff0c\u6211\u4eec\u8fd9\u6b21\u4e0d\u662f\u66b4\u529b\u7684\u5220\u9664\u4e00\u884c\u6216\u4e00\u5217\uff0c\u800c\u662f\u6709\u9009\u62e9\u6027\u7684\uff0c\u5728\u6bcf\u4e00\u884c\u91cc\u5220\u9664\u51e0\u4e2a\u50cf\u7d20\u3002\u4e3a\u4e86\u4fdd\u8bc1\u56fe\u50cf\u4e0d\u9519\u4f4d\uff0c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e9b\u9009\u4e2d\u7684\u50cf\u7d20\u53ef\u4ee5\u88ab\u770b\u4f5c\u56fe\u50cf\u4e0a\u7684\u201c\u88c2\u7f1d\u201d\uff0c\u5373\u4e00\u6761\u5f2f\u5f2f\u66f2\u66f2\u7684\u66f2\u7ebf\u3002

\u8fd9\u79cd\u505a\u6cd5\u53ebseam carving\uff0c\u6211\u4eec\u9700\u8981\u627e\u5230\u6bd4\u8f83\u4e0d\u91cd\u8981\u7684\u4e00\u8fde\u4e32\u8fde\u7eed\u50cf\u7d20\u3002\u800c\u8fd9\u91cc\u7684\u201c\u4e0d\u91cd\u8981\u201d\uff0c\u6307\u7684\u5c31\u662f\u90a3\u4e9b\u53d8\u5316\u4e0d\u90a3\u4e48\u5267\u70c8\u7684\u50cf\u7d20\uff0c\u5373\u4e0e\u5468\u56f4\u5341\u5206\u76f8\u8fd1\u7684\u70b9\u3002

\u66f4\u6570\u5b66\u7684\u8868\u8ff0\u662f\uff1a

\u800c\u81f3\u4e8e\u5bfb\u627e\u6700\u77ed\u8def\u7684\u7b97\u6cd5\uff0c\u5219\u662f\u4e2a dp \u95ee\u9898\uff0c\u5728\u8fd9\u91cc\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/","title":"Lecture 4 | Model Fitting and Optimization","text":"

\u7ea6 4135 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 14 \u5206\u949f

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4f18\u5316","title":"\u4f18\u5316","text":"

\u9996\u5148\u6211\u4eec\u6765\u5b9a\u4e49\u4e00\u4e2a\u4f18\u5316(Optimization)\u95ee\u9898\u7684\u6a21\u578b\uff1a

\u4f18\u5316\u95ee\u9898\u7684\u6a21\u578b

\u8bbe\u76ee\u6807\u51fd\u6570\\(f_0(\\vec x)\\) \u6ee1\u8db3\u7ea6\u675f\u6761\u4ef6\uff1a

\\[ \\left\\{ \\begin{aligned} f_i(\\vec x) &\\leq 0, &i = 1,...,m & \\text{inequality constraint functions} \\\\ g_i(\\vec x) &= 0, &i = 1,...,p & \\text{equality constraint functions}& \\end{aligned} \\right. \\]

\u6c42 \\(\\vec x\\in \\mathrm{R}^n\\) \uff0c\u4f7f \\(f_0(\\vec{x})\\) \u6700\u5c0f\uff08\u5373\u6700\u4f18\uff09\u3002

\u5f88\u663e\u7136\uff0c\u8fd9\u548c\u6211\u4eec\u9ad8\u4e2d\u63a5\u89e6\u7684\u7ebf\u6027\u89c4\u5212\u5f88\u50cf\uff0c\u5b9e\u9645\u4e0a\u7ebf\u6027\u89c4\u5212\u5c31\u662f\u5176\u4e2d\u4e00\u79cd\u4f18\u5316\u95ee\u9898\u3002

\u800c\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u590d\u6742\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5373\u6839\u636e\u95ee\u9898\uff0c\u5199\u51fa\u76ee\u6807\u51fd\u6570\u548c\u7ea6\u675f\u6761\u4ef6\uff0c\u5e76\u901a\u8fc7\u4e00\u4e9b\u65b9\u6cd5\u6765\u5f97\u5230\u6211\u4eec\u9700\u8981\u7684 \\(\\vec x\\)\u3002

\ud83c\udf30 \u56fe\u50cf\u53bb\u6a21\u7cca\u95ee\u9898

\u5728\u8fd9\u4e2a \ud83c\udf30 \u4e2d\uff0c\u6211\u4eec\u5df2\u77e5\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u548c\u6a21\u7cca\u6ee4\u6ce2\u5668(\u5377\u79ef\u6838) \\(F\\)\uff0c\u9700\u8981\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u6765\u6c42\u5377\u79ef\u8fd0\u7b97\u4e4b\u524d\u7684\u6e05\u6670\u56fe\u50cf \\(X\\)\u3002

\u8fdb\u4e00\u6b65\u6765\u8bf4\uff0c\u5c31\u662f\u627e\u5230\u6e05\u6670\u7684\u56fe\u50cf \\(X\\)\uff0c\u4f7f\u5f97\u5b83\u505a\u6a21\u7cca\u5904\u7406\u540e\u4e0e\u5df2\u77e5\u7684\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u5dee\u522b\u5c3d\u53ef\u80fd\u5c0f\uff0c\u4e8e\u662f\u95ee\u9898\u8f6c\u5316\u4e3a\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6a21\u578b\u62df\u5408","title":"\u6a21\u578b\u62df\u5408","text":"

\u4e3a\u4e86\u7814\u7a76\u5206\u6790\u5b9e\u9645\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u4e00\u4e2a\u5efa\u6a21\uff0c\u66f4\u5177\u4f53\u7684\u6765\u8bf4\u5c31\u662f\u6839\u636e\u5b9e\u9645\u60c5\u51b5\uff0c\u5bfb\u627e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5e76\u5efa\u7acb\u6570\u5b66\u6a21\u578b\u3002

\u4e00\u4e2a\u6570\u5b66\u6a21\u578b(model)\u63cf\u8ff0\u95ee\u9898\u4e2d\u8f93\u5165\u548c\u8f93\u51fa\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a\u7ebf\u6027\u6a21\u578b(linear model) \\(b = a^T x\\) \u5c31\u63cf\u8ff0\u4e86\u8f93\u5165(input) \\(a\\) \u548c\u8f93\u51fa(output) \\(b\\) \u5173\u4e8e\u6a21\u578b\u53c2\u6570(model parameter) \\(x\\) \u7684\u5173\u7cfb\u3002

\u800c\u5b9e\u9645\u7684\u7ed3\u679c\u5f88\u96be\u4e25\u683c\u6ee1\u8db3\u6570\u5b66\u6a21\u578b\uff0c\u8fd9\u662f\u7531\u591a\u65b9\u539f\u56e0\u5bfc\u81f4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5f80\u5f80\u505a\u7684\u662f\u5bf9\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u6a21\u578b\u62df\u5408(model fitting)\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u6709\u4e00\u4e2a\u5148\u9a8c\u7684\u5047\u8bbe\uff0c\u5373\u6570\u636e\u7b26\u5408\u54ea\u79cd\u6a21\u578b\uff0c\u63a5\u4e0b\u6765\u6839\u636e\u6570\u636e\u6765\u5206\u6790\u5f97\u5230\u5408\u9002\u7684 model parameters\uff0c\u800c\u8fd9\u4e2a\u6b65\u9aa4\u4e5f\u5e38\u5e38\u88ab\u79f0\u4e3a learning\u3002

\u4e00\u79cd\u6bd4\u8f83\u7ecf\u5178\u7684\u903c\u8fd1\u65b9\u6cd5\uff08\u6700\u5c0f\u4e8c\u4e58\u6cd5\uff09\u662f\u6c42\u4f7f\u5747\u65b9\u8bef\u5dee(mean square error, MSE)\u6700\u5c0f\u7684 model parameters\uff1a

\\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\)

\u800c\u5982\u679c\u6211\u4eec\u5047\u8bbe\u6570\u636e\u4e2d\u7684\u566a\u58f0\u662f\u9ad8\u65af\u5206\u5e03\u7684\uff08\u5b9e\u9645\u4e0a\u5927\u90e8\u5206\u566a\u58f0\u5728\u57fa\u6570\u8db3\u591f\u5927\u7684\u60c5\u51b5\u4e0b\u90fd\u53ef\u4ee5\u770b\u4f5c\u4e3a\u9ad8\u65af\u5206\u5e03\u7684\uff09\uff0c\u90a3\u4e48\u53ef\u4ee5\u4e0e\u7edf\u8ba1\u5b66\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1(maximum likelihood estimation, MLE)\u76f8\u7edf\u4e00.

MSE vs. MLE

MSE vs MLE for linear regression

\u5177\u4f53\u6765\u8bf4\uff0c\\(b_i = a_i^T x + n, \\;\\; n \\sim G(0,\\sigma)\\)\uff0c\u800c\u5bf9\u4e8e\u7ed9\u5b9a\u7684 \\(x\\)\uff0c\u5176\u4f3c\u7136(likehood)\\(P[(a_i,b_i)|x] = P[b_i-a_i^Tx] \\propto \\exp \\left( - \\frac{(b_i-a_i^Tx)^2}{2\\sigma^2} \\right)\\)\uff0c\u8868\u793a\u5728 model parameter \u4e3a \\(x\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u6570\u636e\u7b26\u5408 \\((a_i,b_i)\\) \u7684\u53ef\u80fd\u6027\u3002

Maximum Likelihood Estimation

If the data points are independent,

\\[ \\begin{aligned} P[(a_1, b_1)(a_2, b_2)\\dots|x] & = \\prod\\limits_iP[(a_i, b_i)|x] = \\prod\\limits_i P[b_i - a_i^T x] \\\\ & \\propto \\exp\\left(-\\frac{\\sum_i(b_i - a_i^Tx)^2}{2\\sigma^2}\\right) = \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) \\end{aligned} \\]

That is, maximize the likelihood to find the best \\(x\\).

\\[ \\begin{aligned} \\hat x &= \\mathop{\\arg \\max\\limits_x} P[(a_1, b_1)(a_2, b_2)\\dots|x] \\\\ &= \\mathop{\\arg \\max\\limits_x} \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) = \\mathop{\\arg \\min\\limits_x}||Ax - b||_2^2 \\end{aligned} \\]

MSE = MLE with Gaussian noise assumption

\u9700\u8981\u8865\u6570\u5b66\u77e5\u8bc6\uff0c\u5b8c\u5584\u8fd9\u90e8\u5206\u5185\u5bb9

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6570\u503c\u65b9\u6cd5","title":"\u6570\u503c\u65b9\u6cd5","text":"

\u4e0a\u4e00\u5c0f\u8282\u4ecb\u7ecd\u4e86\u5982\u4f55\u5bf9\u5b9e\u9645\u95ee\u9898\u8fdb\u884c\u6570\u5b66\u5efa\u6a21\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u4ecb\u7ecd\u7684\u662f\u5982\u4f55\u6c42\u89e3\u6570\u5b66\u6a21\u578b\u3002

\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u7b80\u5355\u7684\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3(analytical solution)\uff0c\u6bd4\u5982\u4f7f\u7528\u6c42\u5bfc\u7b49\u65b9\u6cd5\u3002

\ud83c\udf30

\u4ee5\u521a\u624d\u7684\u7ebf\u6027 MSE \u4e3a\u4f8b\uff0c\\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\) \u7b49\u6548\u4e8e\u6c42\u89e3\u7b49\u5f0f \\(A^TAx=A^Tb\\)\u3002

\u7136\u800c\uff0c\u5b9e\u9645\u60c5\u51b5\u662f\u5927\u90e8\u5206\u95ee\u9898\u8fc7\u4e8e\u590d\u6742\uff0c\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u91c7\u7528\u4e00\u4e9b\u5373\u91c7\u7528\u4e00\u4e9b\u6570\u503c\u65b9\u6cd5(numerical methods)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u68af\u5ea6\u4e0b\u964d","title":"\u68af\u5ea6\u4e0b\u964d","text":"

\u7531\u4e8e\u76f8\u5173\u9886\u57df\u7684\u201c\u51fd\u6570\u201d\u7b49\u57fa\u672c\u4e0a\u90fd\u662f\u9ad8\u7ef4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e00\u822c\u4f7f\u7528\u4e8c\u7ef4\u51fd\u6570\u56fe\u50cf\u7684\u65b9\u6cd5\u6765\u5f62\u8c61\u8868\u793a\u51fd\u6570\uff0c\u5373\u4f7f\u7528\u201c\u7b49\u9ad8\u7ebf\u201d\u7684\u5f62\u5f0f\u6765\u53ef\u89c6\u5316\u51fd\u6570\u3002

\u867d\u7136\u6ca1\u6cd5\u76f4\u63a5\u6c42\u89e3\u6790\u89e3\uff0c\u4f46\u662f\u4e00\u822c\u51fd\u6570\u90fd\u5177\u6709\u4e00\u4e9b\u5c40\u90e8\u6027\u8d28\uff0c\u4f8b\u5982\u6781\u503c\u70b9\u4e34\u57df\u7684\u68af\u5ea6\u90fd\u6307\u5411\u6781\u503c\u70b9\u3002\u6a21\u7cca\u5730\u6765\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u968f\u7740\u201c\u68af\u5ea6\u201d\u53bb\u201c\u4e0b\u964d\u201d\uff0c\u5c31\u6709\u53ef\u80fd\u627e\u5230\u6781\u503c\u70b9\uff0c\u8fd9\u5c31\u662f\u901a\u8fc7\u68af\u5ea6\u4e0b\u964d(gradient descent)\u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u4f18\u5316\u95ee\u9898\u3002

\u7b80\u5355\u63cf\u8ff0\u68af\u5ea6\u4e0b\u964d\u7684\u8fc7\u7a0b\uff1a

  1. \u521d\u59cb\u5316\u8d77\u70b9\u5750\u6807 x\uff1b
  2. \u76f4\u5230 x \u6536\u655b\u5230\u6211\u4eec\u6ee1\u610f\u7684\u7a0b\u5ea6\u4e4b\u524d\uff1a
    1. \u8ba1\u7b97\u4e0b\u964d\u65b9\u5411 p\uff1b
    2. \u51b3\u5b9a\u4e0b\u964d\u6b65\u957f \u237a\uff1b
    3. \u66f4\u65b0 x = x + \u237ap\uff1b

Sourece: https://commons.wikimedia.org/w/index.php?curid=2283984

\u5176\u4e2d\u6709\u4e09\u4ef6\u4e8b\u9700\u8981\u7279\u6b8a\u8bf4\u660e\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","title":"\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","text":"

\u5bf9\u4e8e\u6211\u4eec\u4ee5\u524d\u63a5\u89e6\u8fc7\u7684\u51fd\u6570\uff0c\u5373\u5f62\u5f0f\u76f8\u5bf9\u7b80\u5355\u7684\u51fd\u6570\uff0c\u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u68af\u5ea6\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u3002\u7136\u800c\u5b9e\u9645\u95ee\u9898\u4e2d\u7684\u51fd\u6570\u53ef\u80fd\u975e\u5e38\u590d\u6742\uff0c\u6216\u68af\u5ea6\u89e3\u6790\u5f0f\u5f88\u96be\u5f97\u5230\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u5c31\u53ea\u80fd\u9000\u800c\u6c42\u5176\u6b21\uff0c\u6c42\u5176\u201c\u8fd1\u4f3c\u201d\u68af\u5ea6\u65b9\u5411\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u627e\u5230\u4e00\u4e2a\u548c\u539f\u51fd\u6570\u5728\u5c40\u90e8\u548c\u8be5\u51fd\u6570\u5f88\u50cf\u7684\u62df\u5408\u51fd\u6570\uff0c\u5e76\u4e14\u7528\u8fd9\u4e2a\u62df\u5408\u51fd\u6570\u7684\u68af\u5ea6\u65b9\u5411\u6765\u51b3\u5b9a\u68af\u5ea6\u4e0b\u964d\u7684\u65b9\u5411\u3002

\u4e8e\u662f\u6211\u4eec\u60f3\u5230\u6cf0\u52d2\u5c55\u5f00\uff0c\u5b83\u5c06\u51fd\u6570\u5c55\u5f00\u4e3a\u591a\u9879\u5f0f\uff0c\u800c\u591a\u9879\u5f0f\u7684\u68af\u5ea6\u662f\u76f8\u5bf9\u5bb9\u6613\u5f97\u5230\u7684\u3002

\u5176\u4e2d\u6bd4\u8f83\u5e38\u7528\u7684\u662f\uff1a

\u5176\u4e2d \\(J_F\\) \u662f\u96c5\u5404\u6bd4\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u7ef4\u5411\u91cf\u51fd\u6570\u7684\u5bfc\u6570\uff1b\\(H_F\\) \u662f\u6d77\u68ee\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u4f4d\u5411\u91cf\u51fd\u6570\u7684\u4e8c\u9636\u5bfc\u6570\u3002

\u63a5\u4e0b\u6765\u4ee5 first-order approximation \u4e3a\u4f8b\u7ee7\u7eed\u5206\u6790\u3002

\u89c2\u5bdf \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F \\Delta x\\)\uff0c\u53d1\u73b0\u5f53 \\(J_F\\Delta x < 0\\) \u65f6\uff0c \\(F(x_0 + \\Delta x)\\) \u5927\u6982\u7387\u6bd4 \\(F(x_0)\\) \u5c0f\uff0c\u5373\u201c\u4e0b\u964d\u201d\uff0c\u6240\u4ee5\u5728 first-order approximation \u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u9009\u62e9\u65b9\u5411 \\(\\vec p = -J_F^T\\)\uff0c\u4e8e\u662f\u4f4d\u79fb\u91cf \\(movement = -J_F \\cdot J_F^T \\cdot step\\)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","title":"\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","text":"

\u5373\u4f7f\u4f46\u4ece\u4e0b\u964d\u901f\u7387\u6765\u8003\u8651\uff0c\u6b65\u957f\u592a\u957f\u6216\u592a\u5c0f\u4e5f\u90fd\u6709\u660e\u663e\u7684\u95ee\u9898\uff1a

\u6240\u4ee5\u6b65\u957f\u7684\u9009\u62e9\u5bf9\u4e0b\u964d\u901f\u7387\u7684\u5341\u5206\u5173\u952e\u3002

\u4e3a\u4e86\u4e13\u6ce8\u4e8e\u6b65\u957f\u7684\u9009\u62e9\uff0c\u6211\u4eec\u8bb0 \\(\\phi(\\alpha) = F(x+\\alpha h),\\;\\;\\text{where x and h fixed}, x\\geq 0\\)\u3002\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u627e\u5230\u4e00\u4e2a\u80fd\u8ba9 \\(\\phi(\\alpha)\\) \u5c3d\u53ef\u80fd\u5c0f\u4e8e \\(\\phi(0)\\) \u7684 \\(\\alpha\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd Backtracking Algorithm\uff1a

  1. \u521d\u59cb\u5316 \\(\\alpha\\) \u4e3a\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u503c\uff1b
  2. \u4e0d\u65ad\u51cf\u5c0f \\(\\alpha\\) \u76f4\u5230 \\(\\phi(\\alpha) \\leq \\phi(0) + \\gamma\\phi'(0)\\alpha\\)\uff1b
    • \u5176\u4e2d \\(\\gamma\\in(0,1)\\) \u662f\u4e00\u4e2a\u56fa\u5b9a\u7684\u53c2\u6570\uff1b

\u6362\u53e5\u8bdd\u8bf4\u5c31\u662f\uff0c\u7b26\u5408\u9884\u671f\u7684\u6700\u5927\u6b65\u957f\uff0c\u8fd9\u4e2a\u201c\u9884\u671f\u201d\uff0c\u5c31\u662f\u901a\u8fc7 \\(\\gamma\\) \u4f53\u73b0\u7684\u3002\u56fe\u4e2d\u7ea2\u8272\u865a\u7ebf\u548c\u9ed1\u8272\u7ec6\u7ebf\u5206\u522b\u662f \\(\\gamma\\) \u53d6\u8fb9\u754c\u503c\u65f6\u7684\u60c5\u51b5\uff0c\u800c\u7ea2\u8272\u5b9e\u7ebf\u5219\u8868\u793a\u6211\u4eec\u7684\u9884\u671f\u968f \\(\\alpha\\) \u7684\u53d8\u5316\u3002

\u4e0a\u9762\u4f7f\u7528 first-order approximation \u4e3a\u4f8b\u4ecb\u7ecd\u7684\u8fd9\u5957\u65b9\u6cd5\u5c31\u662f\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5(steepest descent method)\u3002

\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5

\\(\\vec p = -J_F^T\\)\uff1b

\u8fd9\u662f\u56e0\u4e3a\uff0c\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u4e3b\u8981\u91c7\u7528\u7684\u662f first-order approximation\uff0c\u6ca1\u6709\u4f53\u73b0\u66f2\u7387\u7279\u5f81\u3002

\u56e0\u800c\u4e00\u79cd\u5f88\u81ea\u7136\u7684\u6539\u8fdb\u65b9\u6cd5\u5c31\u662f\u4f7f\u7528 second-order approximation\uff0c\u5373\u725b\u987f\u6cd5(Newton Method)\u3002

\u725b\u987f\u6cd5

\\(F(x_k + \\Delta x) \\approx F(x_k) + J_F\\Delta x + \\frac{1}{2}\\Delta x^T H_F \\Delta x\\)

\u5bf9\u5b83\u6c42\u5bfc\u5f97\u5230 \\(\\frac{\\partial F}{\\partial \\Delta x} = J_F^T+H_F\\Delta x = 0\\)\u3002

\u6240\u4ee5\u5f97\u5230\u65b9\u5411\u4e3a \\(\\vec p = \\Delta x = -H_F^{-1}J_F^T\\)

\u7531\u6b64\u53d1\u73b0\uff0c\u725b\u987f\u6cd5\u7684\u8868\u73b0\u4f1a\u597d\u5f88\u591a\uff0c\u5982\u679c\u80fd\u591f\u907f\u514d\u8ba1\u7b97\u9ed1\u585e\u77e9\u9635\uff0c\u5c31\u53ef\u4ee5\u8fdb\u4e00\u6b65\u63d0\u9ad8\u725b\u987f\u6cd5\u7684\u6548\u679c\uff0c\u4e8e\u662f\u5c31\u51fa\u73b0\u4e86\u9ad8\u65af\u725b\u987f\u6cd5(Gauss-Newton method)\u3002

\u9ad8\u65af\u725b\u987f\u6cd5

\u5bf9\u4e8e\u89e3\u51b3\u6700\u5c0f\u4e8c\u4e58\u6cd5 \\(\\hat x = \\mathop{\\arg \\min\\limits_x} ||R(x)||^2_2\\) \u7684\u95ee\u9898\u8868\u73b0\u975e\u5e38\u597d\u3002

\u5bf9\u4e8e\u8fd9\u7c7b\u95ee\u9898\uff0c\u9ad8\u65af\u725b\u987f\u6cd5\u4f7f\u7528 \\(J_R^TJ_R\\) \u6765\u8fd1\u4f3c\u4ee3\u66ff \\(H_F\\)\uff0c\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u4e3a \\(\\vec p = -(J_R^TJ_R)^{-1}J_R^T,\\;\\;\\text{where }J_R\\text{ is the Jacobian of }R(x)\\)\u3002

Levenberg-Marquardt

Wiki: \ud83d\udd17

\\[ \\Delta x = -(J_R^TJ_R+\\lambda I)^{-1}J_R^TR(x_k) \\]

\u7b80\u5355\u6765\u8bf4\uff0cLM \u5c31\u662f\u7efc\u5408\u4e86\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u548c\u725b\u987f\u6cd5\u7684\u4f18\u70b9\uff0c\u5728\u8fdc\u79bb\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\uff0c\u4fdd\u8bc1\u542f\u52a8\u901f\u5ea6\u5feb\uff1b\u5728\u9760\u8fd1\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u725b\u987f\u6cd5\uff0c\u4fdd\u8bc1\u6536\u655b\u901f\u5ea6\u8db3\u591f\u5feb\uff1b\u5e76\u4e14\u4fdd\u8bc1 \\(J_R^TJ_R+\\lambda I\\) \u6b63\u5b9a\uff0c\u6240\u4ee5\u59cb\u7ec8\u80fd\u591f\u4f7f\u725b\u987f\u6cd5\u6210\u7acb\u3002

\u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898

\u5bf9\u4e8e\u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898(constrained optimization)\uff0c\u5219\u9700\u8981\u6839\u636e\u5b9e\u9645\u95ee\u9898\u6c42\u89e3\u3002

\u63a8\u8350\u540c\u540d\u8bfb\u7269\uff1ahttps://web.stanford.edu/class/ee364a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","title":"\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","text":"

\u5206\u591a\u4e2a batch \u6765\u5904\u7406\uff0c\u5927\u91cf\u6492\u70b9\uff0c\u7136\u540e\u6bd4\u8f83\u6bcf\u4e00\u4e2a batch \u7684\u7ed3\u679c\uff0c\u6700\u7ec8\u53d6\u6700\u597d\u7684\u4e00\u4e2a\u5373\u53ef\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9c81\u68d2\u4f30\u8ba1","title":"\u9c81\u68d2\u4f30\u8ba1","text":"

\u9c81\u68d2\u4f30\u8ba1(robust estimation)\u662f\u5bf9\u4ece\u5404\u79cd\u6982\u7387\u5206\u5e03\uff08\u5c24\u5176\u662f\u975e\u6b63\u6001\u5206\u5e03\uff09\u4e2d\u63d0\u53d6\u7684\u6570\u636e\u5177\u6709\u826f\u597d\u6027\u80fd\u7684\u7edf\u8ba1\u3002

\u5728\u62df\u5408\u6a21\u578b\u4e2d\uff0c\u96be\u514d\u51fa\u73b0\u4e00\u4e9b\u4e0d\u7b26\u5408\u9884\u671f\u7684\u70b9\uff0c\u800c\u5b83\u4eec\u4f1a\u5bf9\u62df\u5408\u7ed3\u679c\u4ea7\u751f\u6216\u591a\u6216\u5c0f\u7684\u5f71\u54cd\uff0c\u800c\u5982\u4f55\u6743\u8861\u8fd9\u4e9b\u566a\u58f0\u4e0e\u771f\u6b63\u6709\u7528\u7684\u6570\u636e\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u9c81\u68d2\u4f30\u8ba1\u7684\u8bfe\u9898\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5185\u70b9--\u5916\u70b9","title":"\u5185\u70b9 & \u5916\u70b9","text":"

\u9996\u5148\u6211\u4eec\u5bf9\u6570\u636e\u70b9\u8fdb\u884c\u5206\u7c7b\uff1a

\u5916\u70b9\u7684\u5f71\u54cd

\u7531\u4e8e\u5916\u70b9\u504f\u79bb\u5f88\u5927\uff0c\u800c\u6700\u5c0f\u4e8c\u4e58\u6cd5\u4e2d\u5b58\u5728\u5e73\u65b9\u64cd\u4f5c\uff0c\u6240\u4ee5\u6700\u5c0f\u4e8c\u4e58\u6cd5\u62df\u5408\u53d7\u8fd9\u4e9b\u5916\u70b9\u5f71\u54cd\u5f88\u5927\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","title":"\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","text":"

\u4e8e\u662f\u6211\u4eec\u8003\u8651\uff0c\u53ef\u4ee5\u66f4\u6362\u62df\u5408\u7684\u635f\u5931\u51fd\u6570\uff0c\u6765\u51cf\u5c0f\u5927\u504f\u5dee\u70b9\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6bd4\u5982\u4f7f\u7528 L1 loss(\u5373\u6c42\u7edd\u5bf9\u503c)\u3002\u4e0d\u8fc7\u66f4\u597d\u7684\u662f\u4e00\u79cd\u9009\u62e9\u53eb huber loss\uff0c\u5b83\u5728\u8ddd\u79bb\u8fdc\u70b9\u8f83\u8fdc\u7684\u65f6\u5019\u6bd4\u8f83\u63a5\u8fd1 L1 loss\u3002

L1 & L2 & Huber

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u968f\u673a\u62bd\u6837\u4e00\u81f4","title":"\u968f\u673a\u62bd\u6837\u4e00\u81f4","text":"

\u968f\u673a\u62bd\u6837\u4e00\u81f4(random sample consensus, RANSAC)\u91c7\u7528\u8fed\u4ee3\u7684\u65b9\u5f0f\u4ece\u5305\u542b\u5916\u70b9\u7684\u6570\u636e\u4e2d\u4f30\u8ba1\u6570\u5b66\u6a21\u578b\u53c2\u6570\uff0c\u662f\u4e00\u4e2a\u5bf9\u4e8e\u5b58\u5728\u660e\u663e\u5916\u70b9\u7684\u6570\u636e\u975e\u5e38\u6709\u6548\u7684\u65b9\u6cd5\u3002

RANSAC procedure

  1. \u9996\u5148\u968f\u673a\u627e\u4e24\u4e2a\u70b9\u62df\u5408\u4e00\u6761\u76f4\u7ebf\uff0c\u7136\u540e\u68c0\u67e5\u6709\u591a\u5c11\u70b9\u7b26\u5408\u8fd9\u6761\u76f4\u7ebf\uff0c\u5e76\u5bf9\u5176\u8fdb\u884c vote\uff1b
  2. \u91cd\u590d\u8fd9\u4e2a\u6b65\u9aa4\uff0c\u6700\u540e\u9009\u62e9\u7968\u6570\u6700\u9ad8\u7684\u62df\u5408\uff1b

\u7531 outlier \u62df\u5408\u51fa\u6765\u7684\u76f4\u7ebf\u4e00\u822c votes \u6bd4\u8f83\u5c11\uff0c\u56e0\u4e3a outlier \u4e4b\u95f4\u5f88\u96be\u4e00\u81f4\uff1b\u4f46\u662finlier\u4e4b\u95f4\u5bb9\u6613\u4e00\u81f4\uff0c\u56e0\u800c\u5f97\u5206\u5f80\u5f80\u66f4\u9ad8\uff0c\u4e8e\u662f\u5c06\u5b83\u4eec\u533a\u5206\u5f00\u6765\u3002\u8fd9\u4e0d\u5c31\u662f Voting Tree (\u9003

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u75c5\u6001\u95ee\u9898","title":"\u75c5\u6001\u95ee\u9898","text":"

\u5982\u679c\u4e00\u4e2a\u95ee\u9898\u7684\u89e3\u4e0d\u552f\u4e00\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898(ill-posed problem)\u3002\u7279\u522b\u7684\uff0c\u5728\u7ebf\u6027\u95ee\u9898\u4e2d\uff0c\u4e00\u4e2a\u7ebf\u6027\u65b9\u7a0b\uff08\u7ec4\uff09\u7684\u89e3\u5982\u679c\u4e0d\u552f\u4e00\uff08\u4e0d\u6ee1\u79e9\uff09\uff0c\u5219\u540c\u6837\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898\u3002

\u5f53\u7136\uff0c\u5bf9\u4e8e\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u6839\u636e\u7ebf\u6027\u4ee3\u6570\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u53ef\u4ee5\u589e\u52a0\u65b9\u7a0b\uff0c\u5373\u589e\u52a0\u7ea6\u675f\u3002\u800c\u8fd9\u79cd\u7ea6\u675f\u4e00\u822c\u6765\u81ea\u4e8e\u5bf9\u53d8\u91cf\u7684\u5148\u9a8c\u7ea6\u675f\uff0c\u6bd4\u5982\uff1a

L2 regularization

L2 norm: \\(||x||_2 = \\sum_i x_i^2\\);

L2 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_2 \\leq 1\\);

\u901a\u8fc7\u8ba9\u9009\u62e9\u7684\u89e3\u5c3d\u53ef\u80fd\u63a5\u8fd1\u539f\u70b9\uff0c\u800c\u8ba9\u6211\u4eec\u6ca1\u6709\u7528\u7684\u89e3\u7684\u7ef4\u5ea6\u5c3d\u53ef\u80fd\u63a5\u8fd1 0\uff0c\u4ee5\u51cf\u5c0f\u6ca1\u7528\u7684\u53d8\u91cf\u7684\u5f71\u54cd\uff0c\u6291\u5236\u5197\u4f59\u53d8\u91cf\u3002

L1 regularization

L1 norm: \\(||x||_1=\\sum_i|x_i|\\);

L1 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_1 \\leq 1\\)

L1 \u53ef\u89c6\u5316\u4e2d\u53ef\u4ee5\u53d1\u73b0\uff0c\u5750\u6807\u8f74\u4e0a\u6bd4\u8f83\u5bb9\u6613\u6293\u4f4f\u89e3\uff0c\u6b64\u65f6\u610f\u5473\u7740\u6709\u4e9b\u53d8\u91cf(\u7ef4\u5ea6)\u662f 0\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u80fd\u8ba9\u89e3\u53d8\u5f97\u201c\u7a00\u758f(sparse)\u201d\uff0c\u5373\u5728\u7ef4\u5ea6\u4e0a\u7684\u5206\u5e03\u53ea\u6bd4\u8f83\u96c6\u4e2d\u4e8e\u4e2a\u522b\u9879\u3002

\u4e0d\u8fc7\uff0c\u5c06\u4ed6\u4eec\u4f5c\u4e3a\u7ea6\u675f\u6761\u4ef6\u53c2\u4e0e\u6c42\u89e3\uff0c\u4e0d\u5982\u76f4\u63a5\u52a0\u8fdb\u53bb\u4f5c\u4e3a\u4e00\u4e2a\u9879\uff0c\u5176\u6548\u679c\u662f\u7b49\u4ef7\u7684\uff1a

\\[ \\begin{matrix} \\text{L2 regularization:} & | & \\text{or L1 regularization:}\\\\ \\min_{x}||Ax-b||^2_2+\\lambda ||x||_2^2 & | & \\min_{x}||Ax-b||^2_2+\\lambda ||x||_1\\\\ s.t. ||x||_2 \\leq 1 & | & s.t. ||x||_1 \\leq 1 \\\\ \\end{matrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","title":"\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","text":"

\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u4e5f\u8981\u5c0f\u5fc3\u8fc7\u62df\u5408(overfitting)\u548c\u6b20\u62df\u5408(underfitting)\uff0c\u5b83\u4eec\u7684\u542b\u4e49\u975e\u5e38\u76f4\u767d\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u63d2\u503c","title":"\u63d2\u503c","text":"

\u63d2\u503c(interpolation)\u5176\u5b9e\u5df2\u7ecf\u5728 lec 3 \u7684\u7b14\u8bb0 \u91cc\u63d0\u5230\u8fc7\u4e86\u3002

\u8fd9\u91cc\u5148\u7565\u8fc7\u3002

sketch

\u7ebf\u6027\u62df\u5408\u3001\u4e8c\u6b21\u6837\u6761\u63d2\u503c\uff08\u6bcf\u4e00\u6bb5\u90fd\u662f\u4e00\u4e2a\u4e8c\u6b21\u51fd\u6570\uff09\u3001\u4e09\u6b21\u6837\u6761\u63d2\u503c\uff08\u4e00\u9636\u5bfc\u4e8c\u9636\u5bfc\u8fde\u7eed\uff0c\u4f46\u6700\u7ec8\u662f\u4e2a\u75c5\u6001\u95ee\u9898\uff0c\u9700\u8981\u989d\u5916\u518d\u7ea6\u675f\u8d77\u70b9\u548c\u7ec8\u70b9\u4e8c\u9636\u5bfc\u4e3a\u96f6\u6216\u8005\u9650\u5b9a\u7ed9\u5b9a\u659c\u7387\u7b49\uff0c\u5c31\u9700\u8981\u4fe9\u989d\u5916\u7ea6\u675f\u6761\u4ef6\uff09\u3001

\u4e0a\u9762\u662f\u8fde\u7eed\u4f18\u5316\u95ee\u9898\uff0c\u4e0b\u9762\u662f\u79bb\u6563\u4f18\u5316\u95ee\u9898

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272--\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u56fe\u5272 & \u9a6c\u53ef\u592b\u968f\u673a\u573a","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","title":"\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","text":"

\u56fe\u50cf\u6807\u7b7e\u95ee\u9898(image labeling problems)\u5373\u901a\u8fc7\u56fe\u7247\u4fe1\u606f\u7ed9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u5206\u914d\u6807\u7b7e\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u5206\u7c7b\u548c\u8bc6\u522b\u95ee\u9898\u3002

\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5f3a\u7684\u5148\u9a8c(prior)\u662f\uff1a\u76f8\u90bb\u4e14\u76f8\u4f3c\u7684\u50cf\u7d20\u5e94\u5f53\u62e5\u6709\u76f8\u540c\u7684\u6807\u7b7e\u3002

\u800c\u56fe\u5272\u548c\u9a6c\u53ef\u592b\u968f\u673a\u573a\u53ef\u4ee5\u5efa\u6a21\u8fd9\u79cd\u5148\u9a8c\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272","title":"\u56fe\u5272","text":"

\u56fe\u5272(Graphcut)\u7684\u6838\u5fc3\u601d\u60f3\u662f\uff0c\u628a\u4e00\u5f20\u56fe\u7247\u7684\u6bcf\u4e00\u4e2a\u50cf\u7d20\u770b\u4f5c\u4e00\u4e2a graph \u4e2d\u7684 vertex\uff0c\u5e76\u5728\u50cf\u7d20\u4e4b\u95f4\u5efa edge\uff0c\u5e76\u5c06 weight \u5b9a\u4e49\u4e3a\u4e24\u50cf\u7d20\u4e4b\u95f4\u7684\u76f8\u4f3c\u6027\u6216\u5173\u8054\u6027(affinity or similarity)\u3002

measuring affinity

\u6bd4\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8861\u91cf\u50cf\u7d20\u7684\u76f8\u4f3c\u6027\uff1a

\u518d\u63a5\u4e0b\u6765\uff0c\u901a\u8fc7\u8fd9\u6837\u7684\u65b9\u5f0f\u5c06\u56fe\u7247\u5efa\u6210\u56fe\u540e\uff0c\u5c31\u53ef\u4ee5\u628a\u95ee\u9898\u8f6c\u5316\u4e3a\u56fe\u5272\u95ee\u9898\uff0c\u6211\u4eec\u5c06\u5c0f\u6743\u7684\u8fb9\u5220\u53bb\uff0c\u6700\u7ec8\u4f1a\u5f62\u6210\u82e5\u5e72\u8fde\u901a\u5206\u91cf\uff0c\u800c\u8fd9\u4e9b\u8fde\u901a\u5206\u91cf\u90a3\u7684\u70b9\u5219\u88ab\u89c6\u4e3a\u4e00\u4e2a\u201c\u5206\u5272\u201d\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u56fe\u5272\u7684\u4ee3\u4ef7\u4e3a\u65ad\u7684\u8fb9\u6743\u4e4b\u6743\u91cd\u548c \\(cut(V_A,V_B)= \\sum_{u\\in V_A, v\\in V_B} w(u,v)\\)\uff0c\u800c\u6211\u4eec\u9700\u8981\u627e\u4ee3\u4ef7\u5c3d\u53ef\u80fd\u5c0f\u7684\uff0c\u6ee1\u8db3\u6211\u4eec\u8981\u6c42\u7684\u56fe\u5272\u3002\u5f53\u7136\uff0c\u8fd9\u4e2a\u95ee\u9898\u4e5f\u7b49\u6548\u4e8e\u6700\u5927\u6d41\u95ee\u9898\uff1b

Problem with min-cut

Bias to cut small, isolated segments.

\u7531\u4e8e min-cut \u7684\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u8861\u91cf\u8fd9\u4e2a\u5b50\u96c6\u662f\u5426\u8db3\u591f\u7a20\u5bc6\uff0c\u6240\u4ee5\u6211\u4eec\u503e\u5411\u4e8e\u4f7f\u7528 normalized-cut\u3002

\\[ assoc(V_A,V) = \\sum_{u\\in V_A, v\\in V} w(u,v) \\\\ NCut(V_A,V_B) = \\frac{cut(V_A,V_B)}{assoc(V_A,V)} + \\frac{cut(V_A,V_B)}{assoc(V_B,V)} \\] "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u9a6c\u53ef\u592b\u968f\u673a\u573a","text":"

\u9a6c\u53ef\u592b\u968f\u673a\u573a(Markov Random Field, MRF)\u662f\u4e00\u79cd\u66f4\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u60dc\u6211\u7b2c\u4e00\u6b21\u6ca1\u542c\u61c2\uff0c\u7b49\u6211\u542c\u61c2\u4e86\u518d\u6765\u8865\u5145\u8fd9\u91cc\u7684\u5185\u5bb9\u3002

sketch

Markov chains

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/","title":"Lecture 5 | Feature Matching and Motion Estimation","text":"

\u7ea6 3966 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 13 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u56fe\u50cf\u7279\u5f81\u5339\u914d","title":"\u56fe\u50cf\u7279\u5f81\u5339\u914d","text":"

\u672c\u8282\u7684\u8bfe\u9898\u662f\u7279\u5f81\u5339\u914d(feature matching)\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u627e\u5230\u4e24\u5f20\u56fe\u50cf\u4e2d\u53ef\u80fd\u6307\u4ee3\u540c\u4e00\u5ba2\u4f53\u7684\u90e8\u5206\uff0c\u5173\u952e\u5728\u4e8e\u627e\u5230\u56fe\u7247\u4e4b\u95f4\u70b9\u548c\u70b9\u7684\u5339\u914d\u5173\u7cfb\u3002\u8be5\u95ee\u9898\u662f\u5f88\u591a\u95ee\u9898\u7684\u57fa\u77f3\uff0c\u4f8b\u5982\uff1a

applications

\u5934\u8111\u98ce\u66b4

\u7a76\u5176\u6839\u672c\uff0c\u7279\u5f81\u5339\u914d\u201c\u8054\u901a\u201d\u4e86\u4e24\u5f20\u56fe\u7247\uff0c\u4f7f\u5b83\u4eec\u539f\u672c\u5b64\u7acb\u8868\u8fbe\u7684\u4fe1\u606f\u8fde\u7ed3\u8d77\u6765\u3002

\u7b80\u5355\u7684\u5e94\u7528\u5982\u56fe\u50cf\u62fc\u63a5\uff0c\u518d\u5f80\u540e\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\u4e09\u7ef4\u91cd\u5efa\u4e2d\u4e5f\u4f1a\u5e94\u7528\u5230\u7279\u5f81\u5339\u914d\u5230\u76f8\u5173\u5185\u5bb9\u3002

\u6982\u62ec\u4f20\u7edf\u7279\u5f81\u5339\u914d\u4e3b\u8981\u73af\u8282\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u4e09\u6b65\uff1a

  1. \u68c0\u6d4b(detection): \u627e\u5230\u5173\u952e\u70b9(interest points)\uff0c\u5373\u53ef\u80fd\u4f1a\u88ab\u5339\u914d\u7684\u201c\u7279\u5f81\u70b9\u201d\uff1b
  2. \u8868\u8fbe(description): \u63d0\u53d6\u6bcf\u4e2a\u5173\u952e\u70b9\u5468\u56f4\u7684\u5411\u91cf\u7279\u5f81\u63cf\u8ff0\u7b26(feature descriptor)\uff0c\u5373\u5c06\u201c\u7279\u5f81\u201d\u6570\u636e\u5316\uff1b
  3. \u5339\u914d(matching): \u51b3\u5b9a\u4e24\u4e2a\u89c6\u89d2\u4e0b\u7279\u5f81\u63cf\u8ff0\u7b26\u7684\u5173\u8054\u5e76\u5339\u914d\uff0c\u5373\u6784\u5efa\u201c\u7279\u5f81\u201d\u4e4b\u95f4\u7684\u5339\u914d\u5173\u7cfb\uff1b
"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u68c0\u6d4b","title":"\u5173\u952e\u70b9\u68c0\u6d4b","text":"

\u63a8\u8350\u9605\u8bfb

\u3010\u8ba1\u7b97\u673a\u89c6\u89c9\u30112. \u7279\u5f81\u70b9\u68c0\u6d4b\uff1aHarris, SIFT, SURF, ORB

\u68c0\u6d4b(detection)\u7684\u9996\u8981\u95ee\u9898\u662f\u5982\u4f55\u9009\u62e9\u5173\u952e\u70b9(interest points/feature points)\uff0c\u6216\u8005\u8bf4\uff0c\u4e00\u4e2a\u70b9\u4ec0\u4e48\u60c5\u51b5\u4e0b\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7279\u5f81\u70b9\u3002

\u603b\u4f53\u6765\u8bf4\uff0c\u5173\u952e\u70b9\u9700\u8981\u7531\u8fd9\u4e48\u4e24\u4e2a\u7279\u5f81\uff1a

  1. \u72ec\u7279\u6027(uniqueness)\uff0c\u5373\u8fd9\u4e2a\u70b9\u9700\u8981\u80fd\u591f\u8868\u5f81\u4e00\u5b9a\u7279\u6027\uff1b
  2. \u5bf9\u4e8e\u53d8\u6362\u4e0d\u654f\u611f\uff0c\u5373\u5bf9\u4e8e\u4e00\u4e2a\u5ba2\u89c2\u4e0a\u7684\u5173\u952e\u70b9\uff0c\u5373\u4f7f\u56fe\u7247\u88ab\u65cb\u8f6c\u3001\u538b\u7f29\u3001\u9002\u5f53\u7684\u626d\u66f2\uff0c\u5b83\u90fd\u5e94\u5f53\uff08\u5c3d\u53ef\u80fd\u5730\uff09\u88ab\u8bc6\u522b\u4e3a\u5173\u952e\u70b9\uff1b

\u5173\u952e\u70b9

\u867d\u7136\u8bf4\u662f\u5173\u952e\u201c\u70b9\u201d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u4e00\u5c0f\u5757\u533a\u57df\u3002\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u80fd\u8868\u8fbe\u5c40\u90e8\u7279\u5f81\u7684\u70b9\uff0c\u5b83\u5fc5\u7136\u9700\u8981\u56ca\u62ec\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u4fe1\u606f\u3002

\u9996\u5148\u6211\u4eec\u8ba8\u8bba\u5982\u4f55\u8861\u91cf\u4e00\u4e2a\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff0c\u672c\u6587\u4f1a\u4ecb\u7ecd\u4e24\u79cd\u68c0\u6d4b\u5668\uff1a

  1. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u89d2\u70b9 - Harris corner detector\uff1b
  2. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u6591\u70b9 - Blob detector(LoG or DoG)\uff1b
"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u89d2\u70b9\u68c0\u6d4b","title":"\u89d2\u70b9\u68c0\u6d4b","text":"

\u63a8\u8350\u9605\u8bfb

Harris Corners @ 16-385 Computer Vision (Kris Kitani) @ Carnegie Mellon University

\u89d2\u70b9\u68c0\u6d4b\u7684\u57fa\u672c\u601d\u8def\u662f\uff0c\u6211\u4eec\u79f0\u67d0\u4e2a\u70b9\u6bd4\u8f83\u72ec\u7279\u65f6\uff0c\u5b83\u76f8\u5bf9\u4e8e\u5468\u56f4\u4e00\u5b9a\u53c8\u4e00\u4e9b\u201c\u4e0d\u540c\u201d\u7684\u5730\u65b9\u3002\u6216\u8005\u8bf4\u5b58\u5728\u4e00\u4e9b\u9ad8\u9891\u7279\u5f81\uff0c\u800c\u4e14\u8fd9\u79cd\u9ad8\u9891\u7279\u5f81\u4e0d\u4f1a\u5404\u5411\u540c\u6027\u6216\u8005\u8bf4\u51e0\u4e2a\u5411\u540c\u6027\u3002

\u5728\u6a21\u5f0f\u5316\u7684\u63cf\u8ff0\u8fd9\u4e2a\u601d\u8def\u5c31\u662f\uff1a

Local measures of uniqueness(rough):

\u6211\u4eec\u4ee5\u7a97\u53e3\u7684\u5f62\u5f0f\u5bf9\u76ee\u6807\u70b9\u53ca\u5176\u90bb\u57df\u8fdb\u884c\u91c7\u6837\uff0c\u5f53\u65e0\u8bba\u5f80\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\u7a97\u53e3\uff0c\u91c7\u6837\u7ed3\u679c\u90fd\u4f1a\u4ea7\u751f\u8f83\u5927\u53d8\u5316\u65f6\uff0c\u6211\u4eec\u5c31\u8ba4\u4e3a\u8fd9\u4e2a\u70b9\u72ec\u7279\u6027\u5f3a\u3002

Flag Edge Corner \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4e0d\u4f1a\u6709\u592a\u5927\u53d8\u5316 \u5f53\u6cbf\u7740\u201cEdge\u201d\u7684\u65b9\u5411\u79fb\u52a8\u65f6\uff0c\u4e0d\u592a\u6709\u53d8\u5316 \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4f1a\u5bfc\u81f4\u8f83\u5927\u7684\u53d8\u5316

\u4e0d\u8fc7\u8fd9\u4ecd\u7136\u662f\u4e00\u4e2a\u76f8\u5bf9\u6a21\u7cca\u7684\u5b9a\u4e49\uff0c\u4e3a\u4e86\u5bf9\u5176\u8fdb\u884c\u5efa\u6a21\uff0c\u6211\u4eec\u8fdb\u4e00\u6b65\u5730\u5bf9\u4e0a\u9762\u63d0\u5230\u7684\u201c\u53d8\u5316\u5e45\u5ea6\u201d\u8d4b\u4e88\u6570\u5b66\u542b\u4e49\uff1a

Local measures of uniqueness(detail):

\u6240\u8c13\u53d8\u5316\u5927\uff0c\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u76f8\u540c\u7684\u5355\u4f4d\u957f\u5ea6\u91cc\uff0c\u8272\u5f69\u503c\u7684\u5dee\u66f4\u5927\uff0c\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e0d\u7528\u68af\u5ea6\u6765\u8861\u91cf\u5462\uff1f\u5173\u6ce8\u533a\u57df\u5185\u7684\u68af\u5ea6\u5206\u5e03\uff1a

\u6839\u636e\u68af\u5ea6\u7684\u5206\u5e03\uff0c\u6211\u4eec\u53ef\u4ee5\u5927\u81f4\u89c2\u5bdf\u5230\u56fe\u5f62\u7684\u7279\u5f81\uff0c\uff0c\u5305\u62ec\u5b58\u5728\u591a\u5c11\u4e2a Edge \u4ee5\u53ca\u8fd9\u4e9b Edge \u7684\u65b9\u5411\u3002

\u4e0d\u8fc7\u7eaf\u7cb9\u6839\u636e\u68af\u5ea6\u6765\u5bfb\u627e\u89d2\u70b9\u6709\u65f6\u5019\u53ef\u80fd\u4f1a\u6536\u5230\u566a\u58f0\u7684\u5f71\u54cd\uff0c\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4e3b\u6210\u5206\u5206\u6790(Principle Component Analysis)\u6765\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002\u3002

Principle Component Analysis

\u2460 Subtract off the mean for each data point.

\u2461 Compute the covariance matrix at each point.

\\[ H = \\sum_{(u,v)}w(u,v) \\begin{bmatrix} I_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \\end{bmatrix} \\text{ where } I_x = \\frac{\\partial f}{\\partial x}, I_y = \\frac{\\partial y}{\\partial y} \\]

\\(w(u,v)\\) \u4e00\u822c\u662f\u9ad8\u65af\u6743\u91cd\u3002

\u2462 Compute eigenvalues.

\\[ H = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\;\\;\\;\\; \\lambda_{\\pm} = \\frac{1}{2}\\left( (a+d) \\pm \\sqrt{4bc + (a-d)^2} \\right) \\] error function approximation

Carnegie Mellon University \u7684 slides P18 \u5f00\u59cb\u8fd8\u63d0\u5230\u4e86\u4e0d\u540c\u4f4d\u79fb\u4e0b\u7684\u8bef\u5dee\u51fd\u6570\uff0c\u5e76\u7ed9\u51fa\u4e86\u4e09\u79cd\u60c5\u51b5\u4e0b\u8bef\u5dee\u51fd\u6570\u7684\u70ed\u529b\u56fe\u3002

\u2463 Components are the eigenvectors ranked by the eigenvalues.

\u5728\u672c\u8282\u7684\u8bed\u5883\u4e0b\uff0c\u5f62\u8c61\u5730\u53d9\u8ff0\u4e3b\u6210\u5206\u5206\u6790\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u65b9\u5dee\u6700\u5927\u7684\u65b9\u5411\uff0c\u7b2c\u4e8c\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u5782\u76f4\u4e8e\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u7684\u65b9\u5411\uff0c\u5b83\u4eec\u7684\u5927\u5c0f\u5219\u4e0e\u8fd9\u4e9b\u65b9\u5dee\u6b63\u76f8\u5173\u3002

\u5bf9\u4e8e\u4e0a\u9762\u7684\u4e09\u79cd\u60c5\u51b5\uff0c\u5b83\u4eec\u505a\u4e3b\u6210\u5206\u5206\u6790\u540e\u5f97\u5230\u7684\u7ed3\u679c\u662f\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u4e09\u4e2a\u60c5\u51b5\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u5f88\u5927\u3002

\u6211\u4eec\u901a\u8fc7\u5224\u65ad\u4e24\u4e2a\u7279\u5f81\u503c\u7684\u5927\u5c0f\u5173\u7cfb\u60c5\u51b5\u6765\u5224\u65ad\u4e00\u4e2a\u533a\u57df\u662f\u5426\u5305\u542b\u4e00\u4e2a\u89d2(corner)\u3001\u8fb9(edge)\u6216\u5e73\u9762(flat)\uff0c\u53ef\u4ee5\u5c06\u4ed6\u4eec\u653e\u5230\u4e00\u4e2a\u76f4\u65b9\u56fe\u4e2d\uff0c\u6839\u636e\u4e24\u4e2a\u7279\u5f81\u503c\u5f62\u6210\u7684\u70b9\u5bf9\u5728\u6574\u4e2a\u8c61\u9650\u4e2d\u51fa\u73b0\u7684\u4f4d\u7f6e\u6765\u5224\u65ad\u89d2\u70b9\u60c5\u51b5\uff1a

Figure from Carnegie Mellon University's slides. Corner detection.

\u4e3a\u4e86\u80fd\u591f\u91cf\u5316\u5730\u8868\u8fbe\u4e0a\u9762\u8fd9\u5f20\u56fe\u7684\u5206\u7c7b\u89c4\u5219\uff0c\u6211\u4eec\u5f15\u5165\u54c8\u91cc\u65af\u7b97\u5b50(Harris operator):

\\[ f = \\frac{\\lambda_1\\lambda_2}{\\lambda_1+\\lambda_2} = \\frac{determinant(H)}{trace(H)} \\]

\u8fd9\u91cc\u7684\u4e00\u4e2a\u7279\u6027\u662f\uff0c\u5bf9\u4e8e\u4e8c\u7ef4\u77e9\u9635\u6765\u8bf4\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u5e76\u4e0d\u9700\u8981\u6309\u7167\u4e4b\u524d\u7684\u6b65\u9aa4\uff0c\u8fdb\u884c\u4e3b\u6210\u5206\u5206\u6790\u4ee5\u540e\u518d\u5f97\u5230\uff0c\u800c\u662f\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8fd9\u4e2a\u516c\u5f0f\u5f97\u5230\u3002

\u800c\u8fd9\u4e2a \\(f\\) \u5c31\u53eb\u505a corner response\u3002

reminder \\[ det\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = ad-bc \\;\\;\\;\\;\\; trace\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = a+d \\]

\u5982\u4e0a\u8fd9\u5957\u65b9\u6cd5\u5c31\u662fHarris corner detector\u7684\u5b9e\u73b0\u3002

\u5f52\u7eb3\u4e00\u4e0b\uff0c\u5176\u6b65\u9aa4\u5c31\u662f\uff1a

Harris detector

  1. \u6c42\u5bfc | Compute derivatives at each pixel.
  2. \u534f\u65b9\u5dee\u77e9\u9635 | Compute covariance matrix \\(H\\) in a Gaussian window around each pixel.
  3. \u54cd\u5e94\u51fd\u6570 | Compute corner response function \\(f\\).
  4. \u9608\u503c\u8fc7\u6ee4 | Threshold \\(f\\).
  5. \u975e\u6781\u5927\u503c\u6291\u5236 | Find local maxima of response function (nonmaximum suppression).

\u66f4\u8be6\u7ec6\u7684\u8bf4\u660e\u53ef\u4ee5\u53c2\u8003 wiki \u4e0a\u7684\u8bf4\u660e\uff1aHarris corner detector\u3002

\u53e6\u4e00\u4e2a\u5173\u952e\u95ee\u9898\u662f\uff0c\u901a\u8fc7\u8fd9\u4e2a\u65b9\u6cd5\u5f97\u5230\u7684\u5173\u952e\u70b9\uff0c\u5177\u6709\u5bf9\u53d8\u6362\u4e0d\u654f\u611f\u6027\u5417\uff1f

\u5bf9\u6b64\uff0c\u7ed3\u8bba\u662f\uff1a

  1. Partially invariant to affine intensity change.
  2. Corner response is invariant w.r.t. translation.
  3. Corner response is invariant w.r.t. image rotation.
  4. Corner response is NOT invariant to scaling.

\u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\u7684\u89e3\u51b3\u65b9\u6848

\u9488\u5bf9\u7ed3\u8bba 4\uff0c\u7531\u4e8e Harris detector \u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u4f7f\u7528\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8fc7\u7a0b\u4e2d\u9700\u8981\u6ce8\u610f\u5c3a\u5ea6\uff0c\u5373\u7a97\u53e3\u7684\u5927\u5c0f\u9009\u5b9a\u3002

\u4e00\u79cd\u8bbe\u60f3\u7684\u65b9\u6848\u662f\uff0c\u4e0d\u65ad\u5c1d\u8bd5\u4e0d\u540c\u7684 window size\uff0c\u7136\u540e\u53d6\u5f97 response \u66f2\u7ebf\uff0c\u5047\u8bbe response \u7684\u5927\u5c0f\u53ea\u4e0e scale \u6709\u5173\uff0c\u5219\u66f2\u7ebf\u90fd\u5e94\u8be5\u662f\u5355\u5cf0\u7684\uff0c\u800c\u53d6\u51fa\u8fd9\u4e2a\u5cf0\u503c\uff08\u7279\u5f81\u6700\u660e\u663e\u7684\u65f6\u5019\uff09\uff0c\u5c31\u53ef\u4ee5\u5f53\u4ed6\u4e3a\u5bf9\u5e94\u7684 scale \u4ee5\u53ca\u5bf9\u5e94\u7684 response\u3002

\u4e0d\u8fc7\u4e00\u822c\u5b9e\u9645\u7684\u505a\u6cd5\u662f\u56fa\u5b9a\u7a97\u53e3\u5927\u5c0f\uff0c\u800c\u6539\u53d8\u56fe\u7247\u7684\u5927\u5c0f\uff0c\u518d\u5728\u5f97\u5230\u7684\u56fe\u50cf\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8ba1\u7b97\uff0c\u5373\u5bf9\u4e0d\u540c\u5206\u8fa8\u7387\u7684\u56fe\u7247\u4e0a\u5206\u522b\u8fdb\u884c\u54c8\u91cc\u65af\u68c0\u6d4b\u3002\uff08\u76f8\u5f53\u4e8e\u7ed9\u56fe\u7247\u589e\u52a0\u4e86\u4e00\u4e2a\u7ef4\u5ea6\uff0c\u672c\u8d28\u4e0a\u548c\u4e0a\u9762\u7684\u65b9\u6cd5\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u7528\u4e86\u4e00\u4e2a\u66f4\u5408\u7406\u7684\u5b9e\u73b0\u89d2\u5ea6\u3002\uff09

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u6591\u70b9\u68c0\u6d4b","title":"\u6591\u70b9\u68c0\u6d4b","text":"

\u9664\u4e86\u89d2\u70b9\uff0c\u6591\u70b9(blob)\u4e5f\u662f\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u7279\u6027\uff0c\u975e\u5e38\u9002\u5408\u4f5c\u4e3a\u5173\u952e\u70b9\u3002

\u800c\u6591\u70b9\u7684\u5bfb\u627e\u6211\u4eec\u5219\u53ef\u4ee5\u5229\u7528\u6ee4\u6ce2\u5668\u6765\u5b9e\u73b0\uff0c\u8ba9\u6211\u4eec\u56de\u987e\u7b2c\u4e09\u7ae0\u8fb9\u7f18\u63d0\u53d6\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u7c7b\u4f3c\u7684\u505a\u6cd5\uff0c\u4f7f\u7528\u4e00\u4e2a\u4e2d\u95f4\u8d1f\u56db\u5468\u6b63\u7684\u6ee4\u6ce2\u5668\u6765\u63d0\u53d6\u6591\u70b9\u3002

\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u4f7f\u7528 Gaussian \u6ee4\u6ce2\u5668\u7684 Laplacian\uff0c\u5373 Laplacian of Gaussian Filter(LoG)\uff0c\u6765\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u548c\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\u3002

\ud83d\udc49 Laplacian \u7b97\u5b50

\u5b9e\u9645\u4e0a\u4e5f\u7b49\u6548\u4e8e\u5148\u5bf9\u56fe\u7247\u4f5c\u9ad8\u65af\u6a21\u7cca\uff08\u51cf\u5c0f\u566a\u58f0\u5f71\u54cd\uff09\uff0c\u518d\u8ba1\u7b97\u5176\u62c9\u666e\u62c9\u65af\u7b97\u5b50\uff0c\u5373\uff1a

\\[ \\nabla^2(f*g) = f * \\nabla^2 g \\]

\u5176\u4e2d\uff0cLoG \u7684 scale \u662f\u901a\u8fc7\u9ad8\u65af\u51fd\u6570\u7684 \\(\\sigma\\) \u63a7\u5236\u7684\uff0c\u4e5f\u540c\u6837\u901a\u8fc7\u50cf\u7d20\u91d1\u5b57\u5854\u6765\u5b9e\u73b0\u3002

\u53c8\u6216\u8005\u53ef\u4ee5\u4f7f\u7528 Difference of Gaussian(DoG)\uff0c\u5373\u5c06 Laplacian of Gaussian Filter \u66ff\u6362\u4e3a\u4e00\u4e2a\u7531\u4e24\u4e2a\u9ad8\u65af\u51fd\u6570\u505a\u5dee\u5f97\u5230\u7684 Filter\uff0c\u76f8\u5bf9\u6765\u8bf4\u6548\u7387\u66f4\u9ad8\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u8868\u8fbe","title":"\u5173\u952e\u70b9\u8868\u8fbe","text":"

\u9009\u5b9a\u5173\u952e\u70b9\u540e\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u5982\u4f55\u63cf\u8ff0\u548c\u8868\u8fbe\u8fd9\u4e9b\u70b9\uff0c\u4ee5\u4f7f\u5bf9\u5e94\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fd1\uff0c\u800c\u4e0d\u76f8\u5173\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fdc\u3002

\u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u5c06\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u4f5c\u4e3a\u4e00\u4e2a\u7279\u6027\u5411\u91cf(feature vector)\u8fdb\u884c\u6bd4\u8f83\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u5bf9\u504f\u79fb\u7684\u8bef\u5dee\u8fc7\u4e8e\u654f\u611f\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e5f\u8bb8\u4e24\u5f20\u56fe\u7247\u5f88\u50cf\uff0c\u4f46\u662f\u56e0\u4e3a\u4e00\u70b9\u4f4d\u79fb\u8bef\u5dee\uff0c\u5bfc\u81f4\u5411\u91cf\u521a\u597d\u9519\u5f00\uff0c\u5bfc\u81f4\u7ed3\u679c\u663e\u793a\u4e24\u4e2a\u70b9\u5dee\u522b\u5f88\u5927\u3002\u8fd9\u662f\u56e0\u4e3a\u8fd9\u79cd\u505a\u6cd5\u5bf9\u50cf\u7d20\u70b9\u5728\u7a97\u53e3\u4e2d\u7684\u4f4d\u7f6e\u5f88\u654f\u611f\uff0c\u4f46\u662f\u663e\u7136\u4f4d\u7f6e\u5e76\u4e0d\u662f\u5173\u952e\u70b9\u7684\u7279\u5f81\u4e4b\u6240\u5728\u3002

\u53e6\u5916\u66f4\u597d\u7684\u505a\u6cd5\u662f\u5c3a\u5ea6\u4e0d\u53d8\u7684\u7279\u5f81\u53d8\u6362(Scale Invariant Feature Transform, SIFT) descriptor\uff0c\u4e0d\u518d\u4f7f\u7528\u50cf\u7d20\u503c\uff0c\u800c\u662f\u4f7f\u7528\u533a\u57df\u4e2d\u7684\u68af\u5ea6\u7684\u5206\u5e03\u4f5c\u4e3a\u4e00\u4e2a\u63cf\u8ff0\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\u4e00\u5f20 \\([0,2\\pi)\\) \u7684\uff0c\u5faa\u73af\u7684\u76f4\u65b9\u56fe\u3002\u6b64\u65f6\u5c0f\u7684\u5e73\u79fb\u548c\u7f29\u653e\u90fd\u4e0d\u4f1a\u5bf9\u5b83\u4ea7\u751f\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u65cb\u8f6c\u53ea\u4f1a\u5bfc\u81f4\u76f4\u65b9\u56fe\u7684\u5faa\u73af\u5e73\u79fb\u2014\u2014\u4e0d\u8fc7\u8fd9\u79cd\u5faa\u73af\u5e73\u79fb\u662f\u5f88\u597d\u5904\u7406\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u4e2d\u6700\u5927\u7684\u5206\u91cf\u4f5c\u4e3a\u53c2\u8003\uff0c\u5e76\u5c06\u6574\u4e2a\u76f4\u65b9\u56fe\u5e73\u79fb\u5bf9\u9f50\u3002\u76f8\u6bd4\u76f4\u63a5\u5c06\u50cf\u7d20\u8f6c\u5316\u4e3a\u7279\u5f81\u5411\u91cf SIFT \u9c81\u68d2\u6027\u66f4\u9ad8\u3002

\u5b8c\u6574\u7684 SIFT \u662f\u5305\u62ec\u300c\u68c0\u6d4b\u300d\u6b65\u9aa4\u7684\u3002

Other detectors and descriptors:

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u5339\u914d","title":"\u5173\u952e\u70b9\u5339\u914d","text":"

\u6240\u8c13\u7684\u5339\u914d(matching)\u5c31\u662f\u5b57\u9762\u4e0a\u7684\u5c06\u4e24\u5f20\u56fe\u4e2d\u5bf9\u5e94\u7684\u70b9\u5efa\u7acb\u8d77\u5339\u914d\u5173\u7cfb\u3002\u800c\u8bc4\u4f30\u65b9\u6cd5\u5c31\u662f\u5bfb\u627e\u300c\u8ddd\u79bb\u300d\u6700\u63a5\u8fd1\u7684\u70b9\u3002

\u800c\u8fd9\u91cc\u7684\u300c\u8ddd\u79bb\u51fd\u6570\u300d\u662f\u7528\u6765\u8861\u91cf\u4e24\u4e2a\u5173\u952e\u70b9\u7684\u8868\u8fbe\u7684\u5dee\u5f02\u7684\u51fd\u6570\uff0c\u4e00\u822c\u4f7f\u7528 L2 distance\uff0c\u5373 \\(||f_1 - f_2||\\)\u3002

\u91cd\u590d\u6027\u7eb9\u7406

\u7136\u800c\u9700\u8981\u7279\u522b\u6ce8\u610f\u70b9\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u67d0\u4e2a\u7279\u5f81\u56fe\u6848\u91cd\u590d\u51fa\u73b0\u7684\u60c5\u51b5\uff0c\u8fd9\u7c7b\u95ee\u9898\u53eb\u505a\u91cd\u590d\u6027\u7eb9\u7406\u95ee\u9898\u3002

\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ef\u80fd\u6709\u5f88\u591a\u5173\u952e\u70b9\u80fd\u548c\u8fd9\u4e2a\u5173\u952e\u70b9\u5b9e\u73b0\u5339\u914d\uff08\u8868\u8fbe\u76f8\u8fd1\uff09\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u7528 Ratio score = \\(\\frac{ ||f_1 - f_2|| }{ ||f_1 - f_2'|| }\\)\uff0c\u6bd4\u8f83\u6700\u63a5\u8fd1\u7684\u4e24\u79cd\u5339\u914d\u3002

\u5982\u679c Ratio score \u63a5\u8fd1 1\uff0c\u8bf4\u660e \\(f_1, F_2,f_2'\\) \u7684\u8868\u8fbe\u90fd\u5f88\u63a5\u8fd1\uff0c\u8fd9\u4e2a\u5339\u914d\u5e76\u4e0d\u53ef\u9760\uff0c\u53ea\u80fd\u4e22\u6389\u8fd9\u4e2a\u5173\u952e\u70b9\u3002

\u5728\u4f20\u7edf CV \u6280\u672f\u4e2d\uff0c\u6211\u4eec\u5f88\u96be\u5904\u7406\u8fd9\u4e00\u7c7b\u91cd\u590d\u6027\u7eb9\u7406\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u9047\u5230\u8fd9\u79cd\u96be\u4ee5\u5bfb\u627e\u5339\u914d\u5173\u7cfb\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ea\u80fd\u9009\u62e9\u4e0d\u5339\u914d\u5b83\u4eec\u3002

\u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u52a0\u5339\u914d\u7684\u51c6\u786e\u6027\uff0c\u6211\u4eec\u8fd8\u6709\u4e00\u4e2a\u5224\u5b9a\u89c4\u5219\uff1a\u4e24\u70b9\u76f8\u4e92\u6700\u76f8\u4f3c\uff0c\u5219\u8be5\u5339\u914d\u5341\u5206\u53ef\u4fe1\u3002\uff08\u5728 I2 \u4e2d\u4f60\u6700\u50cf\u6211\uff0c\u5728 I1 \u4e2d\u6211\u6700\u50cf\u4f60\uff09

"},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u8fd0\u52a8\u4f30\u8ba1","title":"\u8fd0\u52a8\u4f30\u8ba1","text":"

\u5148\u524d\uff0c\u6211\u4eec\u7740\u773c\u4e8e\u5355\u5f20\u56fe\u7247\uff0c\u6216\u8005\u8bf4\u51e0\u5f20\u56fe\u7247\uff0c\u4ecd\u7136\u662f\u4ee5\u4e00\u4e2a\u9759\u6001\u7684\u89c6\u89d2\u6765\u89c2\u5bdf\u56fe\u50cf\u3002

\u800c\u5f53\u6211\u4eec\u628a\u7814\u7a76\u5bf9\u8c61\u4ece\u56fe\u7247\u6539\u53d8\u4e3a\u89c6\u9891\u6216\u8005\u8bf4\u56fe\u7247\u5e8f\u5217\u7684\u65f6\u5019\uff0c\u56fe\u7247\u5c31\u88ab\u8d4b\u4e88\u4e86\u8fd0\u52a8\u7684\u5c5e\u6027\uff0c\u800c\u8fd9\u5c31\u5f15\u51fa\u4e86\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u3002

\u9996\u5148\uff0c\u8fd0\u52a8\u6309\u7167\u6210\u56e0\u4e3b\u8981\u53ef\u4ee5\u5206\u4e3a\u76f8\u673a\u8fd0\u52a8\u548c\u573a\u666f\u8fd0\u52a8\u4e24\u4e2a\u7ef4\u5ea6\u3002

\u76f8\u673a\u8fd0\u52a8 \u573a\u666f\u8fd0\u52a8 eg (\u5149\u7ebf\u53d8\u5316\u7b49\u5f71\u54cd\u89c6\u9891\u6bcf\u4e00\u5e27\u7684\u5185\u5bb9\u5b58\u5728\u5149\u5f71\u5dee\u5f02\u7b49) \u9759\u666f\u201c\u8fd0\u955c\u201d \u76d1\u63a7\u5f55\u50cf \u4f53\u80b2\u8d5b\u4e8b\u955c\u5934\u8ddf\u8e2a

\u800c\u9488\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\uff0c\u6709\u8fd9\u4e48\u51e0\u79cd\u89e3\u51b3\u7684\u89c6\u89d2\uff1a

\u800c\u4e24\u4e2a\u89c6\u89d2\u90fd\u53ef\u4ee5\u4f7f\u7528 Lucas-Kanade method \u89e3\u51b3\u3002

\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u4e00\u4e2a\u66f4\u660e\u786e\u7684\u5b9a\u4e49\uff1a

motion estimation

Wiki: https://en.wikipedia.org/wiki/Motion_estimation

\u8fd0\u52a8\u4f30\u8ba1\u662f\u6307\u4ece\u4e00\u4e2a 2D \u56fe\u50cf\u5230\u53e6\u4e00\u4e2a 2D \u56fe\u50cf\u7684\u8f6c\u6362\u4e2d\u786e\u5b9a\u63cf\u8ff0\u8fd0\u52a8\u7684\u8fd0\u52a8\u77e2\u91cf\u7684\u8fc7\u7a0b\uff0c\u901a\u5e38\u662f\u4ece\u89c6\u9891\u5e8f\u5217\u4e2d\u76f8\u90bb\u7684\u5e27\u4e2d\u63d0\u53d6\u3002

\u5047\u8bbe\u6211\u4eec\u6709\u5339\u914d\u70b9 \\(P(x,y,t)\\) \u548c \\(P(x+u, y+v, t+1)\\)\uff0c\u5219\u8fd0\u52a8\u4f30\u8ba1\u5219\u662f\u6c42\u89e3 \\((u,v)\\) \u7684\u8fc7\u7a0b\u3002

\u4e0d\u540c\u4e8e\u5173\u952e\u70b9\u7684\u5339\u914d\uff0c\u8fd0\u52a8\u4f30\u8ba1\u66f4\u4fa7\u91cd\u4e8e\u5bf9\u5173\u952e\u70b9\u7684\u65f6\u5e8f\u5173\u7cfb\u7684\u5339\u914d\u4e0e\u63cf\u8ff0\u3002

\u800c\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u8ba8\uff0c\u90fd\u9700\u8981\u57fa\u4e8e LK \u5047\u8bbe\u5c55\u5f00\uff1a

Key Asumptions of Lucas-Kanade

  1. [Small motion] \u76f8\u90bb\u5e27\uff0c\u5339\u914d\u70b9\u7684\u8fd0\u52a8\u8ddd\u79bb\u5c0f\uff1b
  2. [Brightness constancy] \u76f8\u90bb\u5e27\uff0c\u70b9\u7684\u4eae\u5ea6\u503e\u5411\u4e8e\u4e0d\u53d8\uff0c\u5373\u53d8\u5316\u5fae\u5c0f\uff1b
  3. [Spatial coherence] \u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\uff1b

\u63a5\u4e0b\u6765\uff0c\u57fa\u4e8e LK \u5047\u8bbe\uff0c\u6211\u4eec\u6765\u7814\u7a76\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\u7684\u6c42\u89e3\u3002

\u9996\u5148\uff0c\u6211\u4eec\u5c06\u7b2c\u4e8c\u6761\u5047\u8bbe\u8868\u8fbe\u5f0f\u5316\uff0c\u5373\u6709\uff1a

\\[ I(x,y,t) = I(x+u, y+v, t+1) \\]

\u4e3a\u4e86\u6c42\u89e3 \\(u\\) \u548c \\(v\\)\uff0cLK Method \u5bf9\u5176\u4f5c\u6cf0\u52d2\u5c55\u5f00\uff1a

\\[ I(x+u,y+v,t+1) \\approx I(x,y,t) + I_x\\cdot u + I_y \\cdot v + I_t \\]

\u79fb\u9879\uff1a

\\[ I(x+u,y+v,t+1) - I(x,y,t) = I_x\\cdot u + I_y \\cdot v + I_t \\]

\u6839\u636e\u5047\u8bbe 2\uff0c\u5f97\u5230\uff1a

\\[ I_x\\cdot u + I_y \\cdot v + I_t \\approx 0 \\]

\u5373\uff1a

\\[ \\nabla I \\cdot \\begin{bmatrix} u & v \\end{bmatrix}^T + I_t = 0 \\]

\u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\u5173\u4e8e \\(u\\) \u548c \\(v\\) \u7684\u4e00\u4e2a\u8f83\u7b80\u5355\u7684\u7b49\u5f0f\u3002

\u7136\u800c\u6211\u4eec\u53ea\u6709\u4e00\u4e2a\u7b49\u5f0f\uff0c\u4f46\u9700\u8981\u6c42\u89e3\u7684\u672a\u77e5\u5143 \\(u\\) \u548c \\(v\\) \u6709\u4e24\u4e2a\u3002

\u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86\u5047\u8bbe 3\uff0c\u5373\u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\u3002

\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u628a\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u90fd\u5e26\u5165\u4e0a\u9762\u90a3\u4e2a\u7b49\u5f0f\uff0c\u5c1d\u8bd5\u6765\u6c42\u89e3\uff08\u5927\u81f4\u90fd\u76f8\u4f3c\u7684\uff09\\(u\\) \u548c \\(v\\)\u3002\u6b64\u65f6\u6211\u4eec\u7684\u65b9\u7a0b\u6570\u91cf\u5c31\u975e\u5e38\u5145\u88d5\u4e86\u3002\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\u3002

\\[ Ad=b \\rightarrow \\min\\limits_d ||Ad-b||^2 \\]

Least squares solution(\u524d\u9762\u63d0\u5230\u8fc7\u7684\u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u8fd1\u4f3c\u89e3) for d given by \\((A^TA)d = A^Tb\\).

\u800c\u8fd9\u4e2a\u89e3\u662f\u5426\u5b58\u5728\u7684\u6761\u4ef6\u662f\uff1a

\\[ \\underbrace{ \\begin{bmatrix} \\sum I_x I_x & \\sum \\sum I_x I_x \\\\ \\sum I_x I_y & \\sum I_y I_y \\end{bmatrix} }_{A^T A} \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\underbrace{ \\begin{bmatrix} \\sum I_x I_t \\\\ \\sum I_y I_t \\end{bmatrix} }_{A^T b} \\]

\u5728\u8be5\u5f0f\u4e2d\uff0c\\(A^TA\\) \u9700\u8981\u662f\u53ef\u9006\u7684\uff0c\u5e76\u4e14\u5b83\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u4e0d\u80fd\u592a\u5c0f\u3002\u4e5f\u5c31\u8be5\u70b9\u80fd\u591f\u88ab Harris corner detector \u68c0\u6d4b\u5230\u70b9\u89d2\u70b9\uff01

\u56e0\u6b64\uff0c\u5018\u82e5\u4f7f\u7528 LK \u65b9\u6cd5\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(A^TA\\) \u53ef\u9006\uff0c\u4e14\u56fe\u50cf\u4e2d\u4e0d\u80fd\u6709\u592a\u591a\u566a\u70b9\u3002

\u6b64\u5916\uff0c\u5173\u4e8e\u5bf9\u5047\u8bbe 1 \u7684\u7ea6\u675f\uff0c\u539f\u5219\u4e0a\u4e24\u5e27\u4e4b\u95f4\u7684\u8fd0\u52a8\u5dee\u8ddd\u5e94\u8be5\u5c0f\u4e8e\u4e00\u4e2a\u50cf\u7d20\uff0c\u7136\u800c\u8fd9\u4e2a\u6761\u4ef6\u975e\u5e38\u82db\u523b\u3002\u6240\u4ee5\u6211\u4eec\u7684\u53ef\u4ee5\u5148\u5bf9\u56fe\u7247\u8fdb\u884c\u6a21\u7cca/\u7f29\u5c0f\u5904\u7406\uff0c\u50cf\u7d20\u8db3\u591f\u201c\u5927\u201d\u4e4b\u540e\u5c31\u53ef\u4ee5\u6ee1\u8db3\u8fd9\u4e2a\u5047\u8bbe 1\u3002\u7136\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u4f1a\u4e22\u5931\u5f88\u591a\u4fe1\u606f\uff0c\u6240\u4ee5\u53ea\u6839\u636e\u8fd9\u4e2a\u6761\u4ef6\u6765\u8ba1\u7b97\u4e5f\u4e0d\u884c\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u50cf\u7d20\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u9010\u5c42\u6b21\u4f30\u8ba1\uff0c\u518d\u4e0d\u65ad\u7ec6\u5316\u7684\u505a\u6cd5\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec06/","title":"Lecture 6 | Image Alignment and Stitching","text":"

\u7ea6 1320 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec06/#\u56fe\u50cf\u62fc\u63a5","title":"\u56fe\u50cf\u62fc\u63a5","text":"

\u6240\u8c13\u7684\u56fe\u50cf\u62fc\u63a5\uff0c\u6a21\u5f0f\u4e0a\u5c31\u662f\u5bfb\u627e\u82e5\u5e72\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u5e76\u5c06\u753b\u9762\u5185\u5bb9\u8fdb\u884c\u62fc\u63a5\u548c\u5ef6\u5c55\uff0c\u5176\u672c\u8d28\u662f\u6c42\u89e3\u56fe\u50cf\u4e4b\u95f4\u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u6a21\u5f0f\u62df\u5408\u7684\u95ee\u9898\u3002\u5e94\u7528\u4e0a\u6bd4\u5982 \u5168\u666f\u56fe(panorama) \u6216 360\u00b0VR\u7b49\u3002

\u6295\u5f71\u5e73\u9762/\u66f2\u9762

\u5e38\u89c1\u7684\u56fe\u50cf\u62fc\u63a5\u6709\u6bd4\u5982\u5c06\u5e73\u884c\u7684\u666f\u8c61\u5728\u5e73\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\uff0c\u4e5f\u6709\u5c06\u6c34\u5e73\u73af\u7ed5\u7684\u7684\u666f\u8c61\u5728\u67f1\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\u7b49\u3002\u533a\u522b\u5728\u4e8e\u9700\u8981\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u8868\u8fbe\u8fdb\u884c\u4e00\u4e2a\u201c\u53d8\u6362\u201d\uff0c\u4f46\u5b9e\u9645\u53d8\u5316\u65b9\u6cd5\u4e0d\u4f1a\u6709\u5927\u533a\u522b\uff0c\u4ecd\u7136\u662f\u5148\u68c0\u6d4b\u76f8\u540c\u90e8\u5206\u518d\u6c42\u89e3\u53d8\u6362\u5173\u7cfb\u3002

\u5728\u8fd9\u91cc\u9700\u8981\u505a\u7684\u4e00\u4e2a\u7279\u522b\u8bf4\u660e\u662f\uff0c\u5728\u4e4b\u540e\u8be6\u7ec6\u4ecb\u7ecd\u201c\u53d8\u6362\u201d\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\u624b\u673a\u62cd\u6444\u5e7f\u89d2\u7167\u7247\u65f6\uff0c\u4f1a\u8981\u6c42\u62cd\u6444\u8005\u53ea\u505a\u89c6\u89d2\u53d8\u5316\u800c\u4e0d\u505a\u4f4d\u79fb\u3002

\u8fc7\u7a0b\u6982\u8ff0

\u6211\u4eec\u8fd9\u91cc\u8003\u8651\u7684\u56fe\u50cf\u62fc\u63a5\u95ee\u9898\uff0c\u66f4\u591a\u6307\u7684\u662f\u4e24\u5f20\u56fe\u7247\u62e5\u6709\u5171\u540c\u523b\u753b\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u62fc\u63a5\uff0c\u5373\u4e24\u5f20\u7167\u7247\u5b58\u5728\u4ea4\u96c6\u3002

\u9996\u5148\uff0c\u6211\u4eec\u901a\u8fc7\u56fe\u50cf\u7279\u5f81\u5339\u914d\u76f8\u5173\u6280\u672f\uff0c\u627e\u5230\u8fd9\u4e24\u5f20\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u8fd9\u4e9b\u5171\u540c\u90e8\u5206\u5982\u4f55\u5b9e\u73b0\u8f6c\u5316\uff08\u76f8\u5f53\u4e8e\u5728\u505a\u201c\u5bf9\u9f50\u201d\uff09\u3002

\u62fc\u63a5\u8fc7\u7a0b\u4e2d\u4f1a\u51fa\u73b0\u8fb9\u754c\uff0c\u800c\u8fd9\u4e2a\u8fb9\u754c\u6211\u4eec\u662f\u53ef\u4ee5\u4eba\u4e3a\u9009\u62e9\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u8ba9\u5b83\u5dee\u8ddd\u6700\u5c0f\u7684\u5730\u65b9\u6210\u4e3a\u8fb9\u754c\uff0c\u53c8\u6216\u8005\u662f\u4e00\u4e2a\u56fe\u5272\u95ee\u9898\uff1b

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/","title":"Lecture 7 | Structure From Motion","text":"

\u7ea6 8658 \u4e2a\u5b57 14 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 29 \u5206\u949f

\u524d\u8a00

\u4e2a\u4eba\u611f\u89c9\u8fd9\u4e00\u7ae0\u7684\u5185\u5bb9\u867d\u7136\u8109\u7edc\u6e05\u6670\uff0c\u4f46\u662f\u9700\u8981\u4e0d\u65ad\u5f15\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5982\u679c\u76f4\u63a5\u91c7\u7528\u201c\u7528\u5230\u4ec0\u4e48\u8bb2\u4ec0\u4e48\u201d\u7684\u987a\u5e8f\u9610\u8ff0\uff0c\u53ef\u80fd\u4f1a\u6709\u4e9b\u6742\u4e71\uff0c\u4e0d\u65b9\u4fbf\u77e5\u8bc6\u7d22\u5f15\u548c\u590d\u4e60\uff0c\u6240\u4ee5\u6211\u5927\u81f4\u6309\u7167\u62d3\u6251\u6392\u5e8f\u7684\u987a\u5e8f\u6392\u5217\u5185\u5bb9\uff0c\u503e\u5411\u4e8e\u5b8c\u6574\u5730\u4ecb\u7ecd\u4e00\u4e0b\u524d\u7f6e\uff0c\u518d\u5f15\u5165\u4e4b\u540e\u7684\u5185\u5bb9\u5e76\u9636\u6bb5\u6027\u5c0f\u7ed3\uff0c\u53ef\u80fd\u770b\u8d77\u6765\u6bd4\u8f83\u5510\u7a81\uff0c\u4f46\u662f\u5927\u6982\u5bf9\u56de\u5934\u67e5\u77e5\u8bc6\u70b9\u6bd4\u8f83\u65b9\u4fbf\u3002

\u8bf4\u660e

\u672c\u6587\u4e2d\u63d0\u5230\u7684\u6240\u6709\u7684\u300c\u6210\u50cf\u5e73\u9762\u300d\u6307\u7684\u90fd\u662f\u6211\u4eec\u7684\u7b80\u5316\u51e0\u4f55\u6a21\u578b\u4e2d\u7684\u865a\u62df\u6210\u50cf\u5e73\u9762\uff0c\u5e76\u4e0d\u662f\u7269\u7406\u610f\u4e49\u4e0a\u5c0f\u5b54\u6210\u50cf\u6240\u5728\u7684\u90a3\u4e2a\u6210\u53cd\u5411\u5012\u7acb\u50cf\u7684\u5e73\u9762\uff01

\u8fd0\u52a8\u63a8\u65ad\u7ed3\u6784(Structure from Motion, SfM)\u7528\u4e8e\u4f30\u8ba1\u4e8c\u7ef4\u56fe\u50cf\u4e2d\u7684\u4e09\u7ef4\u7ed3\u6784\uff0c\u901a\u8fc7\u76f8\u673a\u8fd0\u52a8\uff08\u5e73\u79fb\u3001\u65cb\u8f6c\uff09\u5f15\u8d77\u7684\u753b\u9762\u53d8\u5316\u6765\u8ba1\u7b97\u5176\u53cd\u5e94\u7684 3D \u7ed3\u6784\u3002

\u5728\u673a\u5668\u4eba\u9886\u57df\uff0c\u4e00\u4e2a\u76f8\u5173\u7684\u9886\u57df\u662f \u540c\u65f6\u5b9a\u4f4d\u4e0e\u5730\u56fe\u6784\u5efa(Simultaneous Localization and Mapping, SLAM)\u3002

\u4e09\u4e2a\u5173\u952e\u95ee\u9898

  1. \u5982\u4f55\u63cf\u8ff0\u76f8\u673a\u7684\u6295\u5f71\u884c\u4e3a\uff0c\u4e5f\u5c31\u662f\u76f8\u673a\u6a21\u578b\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u672c\u5c0f\u7ed3\u6307\u900f\u89c6\u6a21\u578b\uff1b
  2. \u5982\u4f55\u901a\u8fc7\u56fe\u50cf\u6c42\u89e3\u76f8\u673a\u53c2\u6570\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u76f8\u673a\u6807\u5b9a(Camera Calibration)\uff0c\u4ee5\u53ca\u5982\u4f55\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4e0e\u671d\u5411\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\uff1b
  3. \u5982\u4f55\u5229\u7528\u82e5\u5e72\u89c6\u89d2\u8fdb\u884c\u91cd\u5efa\uff1b

\u5176\u4e2d\uff0c\u7b2c\u4e00\u4e2a\u547d\u9898\u7684\u5185\u5bb9\u5df2\u7ecf\u5728\u7b2c\u4e8c\u8bb2\u4e2d\u6d89\u53ca\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

\u76f8\u673a\u6807\u5b9a(Camera Calibration)\u5373\u6c42\u89e3\u76f8\u673a\u7528\u6765\u63cf\u8ff0\u76f8\u673a\u6a21\u578b\u7684\u81ea\u8eab\u53c2\u6570\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5185\u53c2(Intrinsic Parameters)\uff1b\u800c\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4ee5\u53ca\u671d\u5411\uff0c\u4e0e\u5185\u53c2\u76f8\u5bf9\u5e94\u7684\uff0c\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5916\u53c2(Extrinsic Parameters)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","title":"\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","text":"

\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898

\u9996\u5148\uff0c\u4e3a\u4e86\u5c55\u5f00\u4e4b\u540e\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898(Visual Localization Problem)\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684\u4e09\u7ef4\u6a21\u578b\uff0c\u4ece\u67d0\u4e2a\u4f4d\u7f6e\u5bf9\u5176\u8fdb\u884c\u62cd\u6444\uff0c\u6c42\u89e3\u62cd\u6444\u4f4d\u7f6e\u548c\u89c6\u89d2\u3002

\u800c\u4e3a\u4e86\u5c55\u5f00\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u5bf9\u76f8\u673a\u6210\u50cf\u8fd9\u4e2a\u8fc7\u7a0b\u8fdb\u884c\u4e00\u4e2a\u6570\u5b66\u5efa\u6a21\u2014\u2014\u66f4\u8be6\u7ec6\u7684\u6765\u8bf4\uff0c\u662f\u5efa\u6a21\u4e00\u4e2a\u7a7a\u95f4 3D \u70b9\u4e0e\u76f8\u673a\u4e0a\u7279\u5b9a\u50cf\u7d20\u533a\u57df\u7684\u8f6c\u5316\u5173\u7cfb\u3002

\u9996\u5148\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u6295\u5f71\u6a21\u578b\u7684\u53ef\u89c6\u5316\u8868\u793a\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\uff1a

\u56de\u987e

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

\u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

\u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cd\u5c06\u76f8\u673a\u6a21\u578b\u6210\u50cf\u539f\u7406\u53ef\u89c6\u5316\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u653e\u5230 3D \u7a7a\u95f4\u4e2d\uff1a

\u8fd9\u5f20\u56fe\u5927\u81f4\u63cf\u8ff0\u4e86\uff1a\u5728\u7279\u5b9a\u4f4d\u7f6e\u6709\u7740\u7279\u5b9a\u671d\u5411\u7684\u76f8\u673a\u6a21\u578b\u5982\u4f55\u62cd\u5230\u5df2\u77e5 3D \u666f\u8c61\u7684\u7279\u5b9a\u753b\u9762\uff0c\u4f46\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u300cPicture\u300d\u4ee3\u8868\u7684\u662f Image Plane\uff0c\u4e5f\u5c31\u662f\u6210\u50cf\u5e73\u9762\uff0c\u6b64\u65f6\u300c\u5750\u6807\u300d\u7684\u5355\u4f4d\u662f\u957f\u5ea6\uff0c\u5982\u6beb\u7c73\u2014\u2014\u4e0e\u4ee5\u300c\u50cf\u7d20\u300d\u4e3a\u57fa\u672c\u5355\u5143\u7684\u201c\u56fe\u7247\u201d\u6709\u4e00\u5b9a\u533a\u522b\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u4ece 3D \u4e2d\u7684\u67d0\u4e00\u4e2a\u70b9\uff0c\u5230\u56fe\u7247\u4e0a\u7684\u67d0\u5757\u50cf\u7d20\u533a\u57df\uff0c\u6709\u5927\u81f4\u5982\u4e0b\u51e0\u4e2a\u9636\u6bb5\uff1a

graph LR\n    A[3D \u666f\u8c61] --> B[2D \u6210\u50cf\u5e73\u9762] --> C[\u50cf\u7d20\u56fe\u50cf];

\u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4e2d\u4ecb\u7ecd\u7684\u4e00\u7cfb\u5217\u5efa\u6a21\uff0c\u662f\u5efa\u7acb\u5728\u4ee5\u76f8\u673a\u4e3a\u53c2\u8003\u7cfb\u7684\u60c5\u51b5\u4e0b\u7684\uff0c\u800c\u5728\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u62e5\u6709\u7684 3D \u666f\u8c61\u4fe1\u606f\u80af\u5b9a\u4e0d\u662f\u901a\u8fc7\u76f8\u673a\u5750\u6807(Camera Coordinates)\u6765\u8868\u793a\u7684\uff0c\u800c\u662f\u7528\u4e16\u754c\u5750\u6807(World Coordinates)\uff0c\u663e\u7136\uff0c\u8fd9\u91cc\u53ea\u5305\u62ec\u5e73\u79fb\u548c\u65cb\u8f6c\uff0c\u4e5f\u5c31\u662f\u7ecf\u8fc7\u4e00\u6b21\u4eff\u5c04\u53d8\u6362\u3002

\u6211\u4eec\u5bf9\u4e0a\u9762\u90a3\u4e2a\u6d41\u7a0b\u56fe\u7684\u7ed3\u679c\u8fdb\u884c\u4e00\u4e2a\u6539\u8fdb\uff1a

graph LR\n    A[\"(\u4e16\u754c\u5750\u6807) 3D \u666f\u8c61\"] --> B[\"(\u76f8\u673a\u5750\u6807) 3D \u666f\u8c61\"] --> C[\"(\u6210\u50cf\u5e73\u9762) 2D \u6620\u5c04\"] --> D[\"(\u4f20\u611f\u5668\u5e73\u9762) \u50cf\u7d20\u56fe\u50cf\"];
"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e16\u754c\u5750\u6807-to-\u76f8\u673a\u5750\u6807","title":"\u4e16\u754c\u5750\u6807 to \u76f8\u673a\u5750\u6807","text":"

\u4e3a\u4e86\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u8f6c\u6362\uff0c\u6211\u4eec\u9700\u8981\u77e5\u9053\u76f8\u673a\u5750\u6807\u5728\u4e16\u754c\u5750\u6807\u4e2d\u7684\u65b9\u5411\u4e0e\u4f4d\u7f6e\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b9e\u9645\u4e0a\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u77e5\u9053\u76f8\u673a\u7684\u5916\u53c2\u3002

\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u5c31\u662f\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u80fd\u591f\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7cfb\u4e0b\u5750\u6807\u7684\u8f6c\u6362\uff1a

\\[ \\underbrace{\\;\\mathbf{x}_w = \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix}\\;}_{\\text{World Coordinates}} \\xrightarrow{\\text{Rotation \\& Movement}} \\underbrace{\\;\\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix}\\;}_{\\text{Camera Coordinates}} \\]

\u6211\u4eec\u5b9a\u4e49\u5916\u53c2 \\((R,\\mathbf{c}_w)\\)\uff0c\u5206\u522b\u4ee3\u8868\u300c\u4ece\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u65cb\u8f6c\u77e9\u9635\u300d\u548c\u300c\u5728\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u76f8\u673a\u7684\u4e2d\u5fc3\u5750\u6807\u300d\uff0c\u5219\u53d8\u6362\u540e\u7684\u5750\u6807\u5373\u4e3a\uff1a

\\[ \\mathbf{x}_c = R(\\mathbf{x}_w - \\mathbf{c}_w) = R \\mathbf{x}_w - R \\mathbf{c}_w = R \\mathbf{x}_w + \\mathbf{t},\\ \\ \\text{ where } \\mathbf{t} = -R \\mathbf{c}_w \\\\ \\text{i.e.} \\;\\; \\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\]

\u5f53\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u7edf\u4e00\uff1a

\\[ \\mathbf{\\tilde x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\underbrace{\\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix}}_{\\text{Extrinsic Matrix}} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

\u5916\u53c2\u77e9\u9635

\u5176\u4e2d\uff0c\u65b0\u5f97\u5230\u7684\u8fd9\u4e2a 44 \u7684\u77e9\u9635\u5c31\u88ab\u79f0\u4e3a\u5916\u53c2\u77e9\u9635(Extrinsic Matrix)*\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

\\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u5750\u6807-to-\u6210\u50cf\u5e73\u9762","title":"\u76f8\u673a\u5750\u6807 to \u6210\u50cf\u5e73\u9762","text":"

\u5b9e\u9645\u4e0a\u8fd9\u4e00\u6b65\u5c31\u662f\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4ecb\u7ecd\u8fc7\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5728\u4e0a\u4e00\u6b65\u5df2\u7ecf\u505a\u597d\u4e86\u9f50\u6b21\u5750\u6807\u7684\u94fa\u57ab\uff0c\u6240\u4ee5\u8fd9\u4e00\u6b65\u683c\u5916\u7b80\u5355\u3002

\\[ \\begin{bmatrix} \\mathbf{x}_{i_{1 \\times 2}} \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

\u6ce8\u610f

\u8fd9\u91cc 3*4 \u7684\u77e9\u9635\u8fd8\u4e0d\u662f\u5185\u53c2\u77e9\u9635\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u5e73\u9762-to-\u4f20\u611f\u5668\u5e73\u9762","title":"\u6210\u50cf\u5e73\u9762 to \u4f20\u611f\u5668\u5e73\u9762","text":"

\u4e4b\u524d\u8bf4\u8fc7\uff0c\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u548c\u4f20\u611f\u5668\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u6700\u5927\u7684\u4e0d\u540c\u5c31\u662f\u8ba1\u91cf\u5355\u4f4d\u4e0d\u540c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u957f\u5ea6\u4fe1\u606f\u8f6c\u5316\u4e3a\u50cf\u7d20\u4fe1\u606f\uff1b\u6b64\u5916\uff0c\u4e2d\u5fc3\u5750\u6807\u4e5f\u9700\u8981\u53d8\u6362\u3002

\u5047\u8bbe \\(m_x\\) \u548c \\(m_y\\) \u5206\u522b\u662f\u5355\u4f4d\u957f\u5ea6\u4e0a\u7684\u50cf\u7d20\u5bc6\u5ea6\uff08\u4ee5 px/mm \u4e3a\u4f8b\uff09\uff0c\\((c_x,c_y)\\) \u5206\u522b\u662f\u5728\u6210\u50cf\u5e73\u9762\u4e0b\u4f20\u611f\u5668\u5e73\u9762\u7684\u4e2d\u5fc3\u5750\u6807\uff0c\u5219\uff1a

\\[ \\left\\{ \\begin{aligned} u &= m_x \\cdot x_i + c_x\\\\ v &= m_y \\cdot y_i + c_y \\end{aligned} \\right. \\]

\u5e26\u5165\u4e0a\u4e00\u8282\u7684\u7ed3\u679c\uff0c\u5f97\u5230\uff08\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u201c\u9f50\u6b21\u5750\u6807\u201d\u662f\u4e0a\u4e00\u8282\u5e26\u6765\u7684\uff0c\u8fd9\u4e00\u8282\u7684\u8ba1\u7b97\u5e76\u4e0d\u9700\u8981\u9f50\u6b21\u5750\u6807\uff09\uff1a

\\[ \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = ... \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{{\\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix}}}_{\\text{Intrinsic Matrix}} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

\u5185\u53c2\u77e9\u9635

\u8fd9\u91cc\u5f97\u5230\u7684\uff0c\u5305\u542b \\(f\\) \u548c \\(m\\) \u7684\u77e9\u9635\u624d\u662f\u5185\u53c2\u77e9\u9635(Intrinsic Matrix)\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

\\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635\u3001\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","text":"

\u7b80\u5355\u603b\u7ed3\u4e0a\u9762\u51e0\u4e2a\u6b65\u9aa4\u4e0e\u5185\u53c2\u5916\u53c2\u77e9\u9635\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u4e0b\u9762\u8fd9\u5f20\u6d41\u7a0b\u56fe\uff1a

graph LR\n    subgraph EM[\"Using Extrinsic Matrix\"]\n        A[\"Coordinate Transformation\"]\n    end\n    subgraph IM[\"Using Intrinsic Matrix\"]\n        B[\"Perspective Projection\"]\n        C[\"Image Plane to Image Sensor Mapping\"]\n    end\n    A ---> B\n    B ---> C
"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635","text":"

\u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5185\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

\\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]

\u5176\u4e2d\u4e3b\u8981\u6709 4 \u4e2a\u81ea\u7531\u5ea6\uff1a\\(m_x f\\)\u3001\\(m_y f\\)\u3001\\(c_x\\)\u3001\\(c_y\\)\u3002

\u7136\u800c\u5b9e\u9645\u4e0a\u672a\u5fc5\u5982\u6b64\uff0c\u7531\u4e8e\u7578\u53d8\u7b49\u53ef\u80fd\u5b58\u5728\u7684\u539f\u56e0\uff0c\u5b9e\u9645\u7684\u5185\u53c2\u77e9\u9635\uff0c\u6216\u8005\u662f\u6c42\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\u5e76\u4e0d\u4e00\u5b9a\u5f62\u5982\u6b64\uff0c\u6211\u4eec\u5728\u540e\u9762\u4f1a\u63d0\u5230\uff0c\u7531\u4e8e\u67d0\u4e9b\u6027\u8d28\u5206\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\uff0c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u53f3\u4e0a\u4e09\u89d2\u9635\uff0c\u5373\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u7684\u5143\u7d20\u672a\u5fc5\u4e3a\u96f6\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5916\u53c2\u77e9\u9635","title":"\u5916\u53c2\u77e9\u9635","text":"

\u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5916\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

\\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]

\u5176\u4e2d\u4e3b\u8981\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5305\u542b\u4e86\u65cb\u8f6c\u77e9\u9635 \\(R\\) \u548c\u65cb\u8f6c\u540e\u7684\u4f4d\u79fb\u5411\u91cf \\(\\mathbf{t}\\)\u3002

\u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u65cb\u8f6c\u77e9\u9635\uff0c\u8fd9\u91cc\u7684\u65cb\u8f6c\u77e9\u9635\u540c\u6837\u62e5\u6709 \u6b63\u4ea4 \u548c \\(||R||_2^2 = 1\\) \u7684\u6027\u8d28\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6295\u5f71\u77e9\u9635","title":"\u6295\u5f71\u77e9\u9635","text":"

\u603b\u7ed3\u5e94\u7528\u4e24\u4e2a\u77e9\u9635\u7684\u4e24\u4e2a\u9636\u6bb5\uff1a

Camera to Pixel: Intrinsic Matrix

\\[ \\mathbf{\\tilde{u}} = M_{int} \\mathbf{\\tilde{x}}_c \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x & 0 \\\\ 0 & f_y & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

World to Camera: Extrinsic Matrix

\\[ \\mathbf{\\tilde{x}}_c = M_{ext} \\mathbf{\\tilde{x}}_w \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

\u800c\u5c06\u5b83\u4eec\u7ed3\u5408\uff0c\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u5b8c\u6574\u7684\u6295\u5f71\u77e9\u9635(Projection Matrix)\\(P\\)\uff1a

\\[ \\mathbf{\\tilde u} = M_{int}M_{ext} \\mathbf{\\tilde x}_w = P \\mathbf{\\tilde x} \\;\\;\\;\\; i.e. \\;\\;\\;\\; \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{\\text{Projection Matrix } P} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1_1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

\u6839\u636e\u6295\u5f71\u77e9\u9635\u6211\u4eec\u5f97\u5230\u4e86\u50cf\u7d20\u70b9\u4e0e 3D \u666f\u7269\u4e16\u754c\u5750\u6807\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u800c\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u5c31\u662f\u5229\u7528\u8fd9\u4e2a\u5173\u7cfb\u5f0f\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002\u6240\u4ee5\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u540c\u65f6\u77e5\u9053\u82e5\u5e72\u70b9\u7684\u50cf\u7d20\u70b9\u4f4d\u7f6e\u548c 3D \u666f\u7269\u4e16\u754c\u5750\u6807\uff0c\u4e00\u822c\u6765\u8bf4\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u662f\u8fd9\u4e48\u5b9e\u73b0\u7684\uff1a

\u6b65\u9aa4\u4e00

\u7ed9\u5b9a\u4e00\u4e2a\u51e0\u4f55\u7279\u6027\u5df2\u77e5\u7684\u6807\u5b9a\u677f\uff0c\u4eba\u4e3a\u5b9a\u4e49\u5176\u4e16\u754c\u5750\u6807\u7cfb\u3002

\u7531\u4e8e\u5750\u6807\u90fd\u662f\u7531\u6211\u4eec\u4eba\u4e3a\u7ed9\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u6309\u7167\u5c3d\u53ef\u80fd\u65b9\u4fbf\u7684\u539f\u5219\u8fdb\u884c\u89c4\u5212\u3002\u6b64\u5916\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\uff0c\u6807\u5b9a\u677f\u7684\u5185\u5bb9\u4e00\u822c\u662f\u7b80\u5355\u660e\u4e86\u7684\u3002

\u4f8b\u5982\u56fe\u4e2d\uff0c\u5b9a\u4e49\u4e16\u754c\u5750\u6807\u7cfb\u540e\uff0c\u6bcf\u4e00\u683c\u7684\u8fb9\u957f\u4e3a 5cm\uff0c\u6240\u4ee5\u7d2b\u8272\u70b9\u7684\u5750\u6807\u4e3a \\((0, 15, 20) cm\\)\u3002

\u6b65\u9aa4\u4e8c

\u5bfb\u627e\u7279\u5b9a\u5173\u952e\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u505a\u7279\u5f81\u5339\u914d\uff0c\u5373\u82e5\u5e72\u70b9\u5bf9\uff0c\u6bcf\u4e00\u4e2a\u70b9\u5bf9\u90fd\u662f\u4e00\u4e2a 3D \u70b9\u548c\u4e00\u4e2a 2D \u70b9\u7684\u5bf9\u5e94\u3002

\u9700\u8981\u8bf4\u660e\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5df2\u77e5\u7684\u7279\u5f81\u5339\u914d\u662f\u5efa\u7acb\u5728\u4e24\u5f20\u4e8c\u7ef4\u56fe\u7247\u4e0a\u7684\uff0c\u800c\u73b0\u5728\u8981\u505a\u7684\u662f 3D \u5230 2D \u7684\u5339\u914d\u3002\u4e00\u79cd\u60f3\u6cd5\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 3D \u666f\u8c61\u6309\u7167\u6211\u4eec\u5e0c\u671b\u7684\u65b9\u6cd5\u6620\u5c04\u4e3a 2D \u666f\u8c61\uff0c\u4f8b\u5982\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u62ff\u8fd9\u4e2a\u6807\u5b9a\u677f\u7684 zy \u5e73\u9762\u6765\u8fdb\u884c\u7279\u5f81\u5339\u914d\u3002

\u6b65\u9aa4\u4e09

\u6839\u636e\u521a\u521a\u5f97\u5230\u7684\u82e5\u5e72\u5bf9\u5174\u8da3\u70b9\uff0c\u5efa\u7acb\u65b9\u7a0b\uff0c\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002

\u6bcf\u4e00\u5bf9\u5173\u952e\u70b9\u53ef\u4ee5\u5206\u522b\u6839\u636e \\(u\\) \u548c \\(v\\) \u5efa\u7acb\u4e24\u4e2a\u7b49\u5f0f\uff1a

\\[ \\underbrace{\\begin{bmatrix} u^{(i)} \\\\ v^{(i)} \\\\ 1 \\end{bmatrix}}_{known} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{unknown} \\underbrace{\\begin{bmatrix} x_w^{(i)} \\\\ y_w^{(i)} \\\\ z_w^{(i)} \\\\ 1 \\end{bmatrix}}_{known} \\\\ i.e. \\;\\;\\;\\; \\left\\{ \\begin{aligned} u^{(i)} &= \\frac{p_{11}x_w^{(i)} + p_{12}y_w^{(i)} + p_{13}z_w^{(i)} + p_{14}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\\\ v^{(i)} &= \\frac{p_{21}x_w^{(i)} + p_{22}y_w^{(i)} + p_{23}z_w^{(i)} + p_{24}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\end{aligned} \\right. \\]

\u7531\u4e8e\u6295\u5f71\u77e9\u9635\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 6 \u5bf9\u5173\u952e\u70b9 12 \u4e2a\u7b49\u5f0f\u3002

\u6b65\u9aa4\u56db

\u5c06\u82e5\u5e72\u65b9\u7a0b\u91cd\u65b0\u6392\u5217\u4e3a\u77e9\u9635\u5f62\u5f0f\uff0c\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\u3002

\u5c06\u6b65\u9aa4\u4e09\u5f97\u5230\u7684\u5f0f\u5b50\u540c\u5206\u79fb\u9879\uff0c\u5f62\u6210 \\(f(...) = 0\\) \u7684\u5f62\u5f0f\uff0c\u518d\u5c06 12 \u4e2a\u5f0f\u5b50\u7ed3\u5408\u5728\u4e00\u8d77\u5c31\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e2a\u5e9e\u5927\u7684\u77e9\u9635\u65b9\u7a0b\uff1a

\\[ \\begin{bmatrix} x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & 0 & 0 & 0 & 0 & -u_1x_w^{(1)} & -u_1y_w^{(1)} & -u_1z_w^{(1)} & -u_1 \\\\ 0 & 0 & 0 & 0 & x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & -v_1x_w^{(1)} & -v_1y_w^{(1)} & -v_1z_w^{(1)} & -v_1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & 0 & 0 & 0 & 0 & -u_ix_w^{(i)} & -u_iy_w^{(i)} & -u_iz_w^{(i)} & -u_i \\\\ 0 & 0 & 0 & 0 & x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & -v_ix_w^{(i)} & -v_iy_w^{(i)} & -v_iz_w^{(i)} & -v_i \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & 0 & 0 & 0 & 0 & -u_nx_w^{(n)} & -u_ny_w^{(n)} & -u_nz_w^{(n)} & -u_n \\\\ 0 & 0 & 0 & 0 & x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & -v_nx_w^{(n)} & -v_ny_w^{(n)} & -v_nz_w^{(n)} & -v_n \\\\ \\end{bmatrix} \\begin{bmatrix} p_{11} \\\\ p_{12} \\\\ p_{13} \\\\ p_{14} \\\\ p_{21} \\\\ p_{22} \\\\ p_{23} \\\\ p_{24} \\\\ p_{31} \\\\ p_{32} \\\\ p_{33} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\]

\u6211\u4eec\u5c06\u5176\u7b80\u5199\uff0c\u4e5f\u5c31\u662f \\(A\\mathbf{p} = 0\\)\u3002

\u6b65\u9aa4\u4e94

\u6c42\u89e3 \\(A\\mathbf{p} = 0\\) \u5f97\u5230 \\(\\mathbf{p}\\)\u3002

\u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u7684\u64cd\u4f5c\uff0c\u8fd9\u91cc\u5f97\u5230\u7684 \\(mathbf{p}\\) \u4e5f\u6709\u591a\u79cd\u53ef\u80fd\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5bf9\u5b83\u8fdb\u884c\u7ea6\u675f\uff0c\u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

\u4e00\u822c\u6211\u4eec\u9009\u62e9\u540e\u8005\uff0c\u4e5f\u5c31\u662f\u8ba9 \\(mathbf{p}\\) \u7684\u957f\u5ea6\u4e3a 1\uff0c\u6b64\u65f6\u81ea\u7531\u5ea6\u524a\u51cf\u4e3a 11\uff0c\u4ecd\u7136\u9700\u8981\u516d\u5bf9\u5173\u952e\u70b9\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u65b9\u7a0b \\(A\\mathbf{p} = 0\\) \u8f6c\u5316\u4e3a \\(\\mathop{minimize} \\limits_\\mathbf{p} ||A\\mathbf{p}||^2 \\;\\; \\text{ such that } ||\\mathbf{p}||^2 = 1\\) \u7684\u4f18\u5316\u95ee\u9898\uff0c\u7531\u4e8e\u548c\u4e4b\u524d\u7684\u4e00\u6837\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

\u5206\u89e3\u6295\u5f71\u77e9\u9635

\u6839\u636e\u6295\u5f71\u77e9\u9635\u7684\u76f8\u5173\u5185\u5bb9\u6211\u4eec\u77e5\u9053\uff1a

\u901a\u5e38\u6765\u8bf4\uff0c\u5c06\u4e00\u4e2a\u77e9\u9635\u5206\u89e3\u4e3a\u4e24\u4e2a\u7279\u5b9a\u77e9\u9635\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u4f46\u662f\u6b64\u5904\u7684\u5185\u53c2\u77e9\u9635\u7684\u5b50\u5f0f\u5177\u6709\u201c\u4e0a\u4e09\u89d2\u9635\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u5916\u53c2\u77e9\u9635\u4e2d\u65cb\u8f6c\u77e9\u9635\u5b50\u5f0f\u5177\u6709\u201c\u6b63\u4ea4\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u800c\u4e14\u89c2\u5bdf 0 \u7684\u5206\u5e03\uff0c\u6211\u4eec\u53d1\u73b0 \\([p_{11} \\sim p_{33}]\\) \u7531 \\(KR\\) \u5f97\u5230\u3002\u6240\u4ee5\u6211\u4eec\u6070\u597d\u53ef\u4ee5\u4f7f\u7528QR \u5206\u89e3\u6765\u5b9e\u73b0\uff1a

\\[ \\begin{bmatrix} p_{11} & p_{12} & p_{13} \\\\ p_{21} & p_{22} & p_{23} \\\\ p_{31} & p_{32} & p_{33} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} = KR \\]

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4f7f\u7528 QR \u5206\u89e3\u5f97\u5230\u7684\u4e09\u89d2\u9635\u5e76\u4e0d\u4e00\u5b9a\u5177\u6709\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u5143\u7d20\u4e3a 0 \u7684\u6027\u8d28\u3002

\u6b64\u65f6\uff0c\u6211\u4eec\u5df2\u7ecf\u77e5\u9053\u4e86\u9664\u4e86 \\(t_x,t_y,t_z\\) \u4ee5\u5916\u7684\u6240\u6709\u672a\u77e5\u5143\u4e86\uff0c\u6240\u4ee5\u5f53\u7136\u53ef\u4ee5\u56de\u8fc7\u6765\u7ee7\u7eed\u6c42\u5b83\u4eec\u3002

\\[ \\because \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} = K \\mathbf{t} \\\\ \\therefore \\mathbf{t} = K^{-1} \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} \\]

\u6ce8\u610f

\u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u5728\u6211\u4eec\u4e0a\u9762\u6d89\u53ca\u7684\u8ba8\u8bba\u4e2d\uff0c\u6211\u4eec\u90fd\u6ca1\u6709\u8003\u8651\u7578\u53d8\u5e26\u6765\u7684\u5f71\u54cd\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","title":"\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","text":"

\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898(Perspective-n-Point Problem)\uff0c\u5373 PnP \u95ee\u9898\uff0c\u6307\u7684\u662f\u5df2\u77e5\u5185\u53c2\u6c42\u5916\u53c2\u7684\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u3002

\u5e38\u89c1\u7684\u89e3\u51b3\u65b9\u6848\u6709\u5982\u4e0b\u51e0\u79cd\u3002

DLT Direct Linear Transform

\u4e5f\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u505a\u6cd5\u3002

P3P

\u81f3\u5c11\u9700\u8981 3 \u7ec4\u5bf9\u5e94\u5173\u7cfb\u624d\u80fd\u6c42\u89e3\u76f8\u673a\u4f4d\u7f6e\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a\u989d\u5916\u7684\u70b9\u6765\u4fdd\u8bc1\u7b54\u6848\u7684\u552f\u4e00\u6027\uff08\u5426\u5219\u4e00\u822c\u6765\u8bf4\u4f1a\u6709\u56db\u4e2a\u89e3\uff09

\u5176\u4e3b\u8981\u601d\u8def\u662f\u6839\u636e\u56fe\u50cf\uff0c\u4f7f\u7528\u4f59\u5f26\u5b9a\u5f8b\u8fdb\u884c\u6c42\u89e3\u3002

\u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

PnP

n > 3 \u7684\u60c5\u51b5\u7684\u505a\u6cd5\u3002

\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u7406\u8bba\u548c\u5b9e\u9645\u7684\u70b9\u8bef\u5dee\u2014\u2014\u91cd\u6295\u5f71\u8bef\u5dee(reprojection error)\u6700\u5c0f\u65f6\u7684\u5916\u53c2\uff0c\u6ce8\u610f\u5c06\u9f50\u6b21\u5750\u6807\u8f6c\u5316\u4e3a\u4e8c\u7ef4\u5750\u6807\u3002

Initialized by P3P, optimized by Gauss-Newton\u3002

\u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

EPnP

\u76ee\u524d\u6700\u53d7\u6b22\u8fce\u7684\u505a\u6cd5\uff0cO(N) \u5341\u5206\u9ad8\u6548\u4e5f\u5341\u5206\u51c6\u786e\uff0c\u5927\u6982\u662f\u7528\u56db\u4e2a\u63a7\u5236\u70b9\u8868\u793a\u5176\u4ed6\u70b9\u3002

\u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

\u8bf4\u660e

\u672c\u8282\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\uff0c\u8bb2\u7684\u662f\u5982\u4f55\u4e09\u7ef4\u91cd\u5efa\u5f97\u5230\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u5982\u4f55\u5f97\u5230\u7a20\u5bc6\u7684\u4e09\u7ef4\u91cd\u5efa\uff0c\u5c06\u6210\u4e3a\u4e0b\u4e00\u8282\u7684\u91cd\u70b9\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

\u53cc\u76ee\u89c6\u89c9(Stereo Vision)\uff1a\u5df2\u77e5\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\uff0c\u6839\u636e\u4e24\u5f20\u56fe\u50cf\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u7684\u5916\u53c2\u548c\u76ee\u6807\u7684 3D \u7ed3\u6784\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5bf9\u6781\u51e0\u4f55","title":"\u5bf9\u6781\u51e0\u4f55","text":"

\u5728\u524d\u4e00\u8282\u6211\u4eec\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728\u300c3D \u666f\u8c61\u6a21\u578b\u5df2\u77e5\u300d\u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\u6216\u8fdb\u884c\u672a\u77e5\u4f30\u8ba1\uff0c\u4f46\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u5982\u4f55\u4ece 2D \u56fe\u7247\u4e2d\u91cd\u5efa\u51fa 3D \u6a21\u578b\u3002

\u8ba9\u6211\u4eec\u8003\u8651\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa\u4e2d\u7684\u60c5\u5f62\u2014\u2014\u4e24\u4e2a\u76f8\u673a\u4e0b\u4e0d\u540c\u666f\u8c61\u4e4b\u95f4\u663e\u7136\u662f\u5b58\u5728\u4e00\u5b9a\u7684\u51e0\u4f55\u5173\u7cfb\u7684\uff0c\u800c\u5bf9\u6781\u51e0\u4f55(Epipolar Geometry)\u7740\u773c\u4e8e\u4e0b\u9762\u8fd9\u4e09\u4e2a\u76ee\u6807\u4e4b\u95f4\u7684\u51e0\u4f55\u5173\u7cfb\uff1a\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\)\uff08\u6216\u8005 \\(P\\)\uff09\u3002

WIKI page

https://en.wikipedia.org/wiki/Epipolar_geometry

Epipolar geometry is the geometry of stereo vision. When two cameras view a 3D scene from two distinct positions, there are a number of geometric relations between the 3D points and their projections onto the 2D images that lead to constraints between the image points. These relations are derived based on the assumption that the cameras can be approximated by the pinhole camera model.

\u5bf9\u6781\u51e0\u4f55\u662f\u7acb\u4f53\u89c6\u89c9\u7684\u51e0\u4f55\u5b66\u3002\u5f53\u4e24\u4e2a\u6444\u50cf\u673a\u4ece\u4e24\u4e2a\u4e0d\u540c\u7684\u4f4d\u7f6e\u67e5\u770b 3D \u573a\u666f\u65f6\uff0c3D \u70b9\u4e0e\u5b83\u4eec\u5728 2D \u56fe\u50cf\u4e0a\u7684\u6295\u5f71\u4e4b\u95f4\u5b58\u5728\u8bb8\u591a\u51e0\u4f55\u5173\u7cfb\uff0c\u5bfc\u81f4\u56fe\u50cf\u70b9\u4e4b\u95f4\u5b58\u5728\u7ea6\u675f\u3002\u8fd9\u4e9b\u5173\u7cfb\u662f\u57fa\u4e8e\u76f8\u673a\u53ef\u4ee5\u7528\u9488\u5b54\u76f8\u673a\u6a21\u578b\u8fd1\u4f3c\u7684\u5047\u8bbe\u5bfc\u51fa\u7684\u3002

\u2014\u2014Wiki

\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u5bf9\u6781\u51e0\u4f55\u4e2d\u7684\u51e0\u4e2a\u6982\u5ff5\uff0c\u6211\u4eec\u5c06\u501f\u52a9\u4e0a\u56fe\u8fdb\u884c\u8bf4\u660e\u3002

\u57fa\u7ebf

\u57fa\u7ebf(Baseline)\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\uff0c\u5373 \\(OO'\\)\u3002

\u5bf9\u6781\u70b9

\u5bf9\u6781\u70b9(Epipole)\u6307\u7684\u662f\uff1a\u5176\u4e2d\u4e00\u4e2a\u76f8\u673a\u7684\u76f8\u673a\u4e2d\u5fc3\u5728 \u53e6\u5916\u4e00\u4e2a\u76f8\u673a\u7684\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u70b9\uff0c\u5373 \\(e_l\\) \u548c \\(e_r\\)\uff0c\u4e14\u4ed6\u4eec\u5728\u65e2\u5b9a\u7684\u5177\u4f53\u53cc\u76ee\u6a21\u578b\u4e0b\u662f\u552f\u4e00\u7684\u3002

\u5bf9\u6781\u9762

\u5bf9\u6781\u9762(Epipolar Plane)\u6307\u7684\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u8fd9\u4e09\u4e2a\u70b9\u6240\u786e\u5b9a\u7684\u7a7a\u95f4\u5e73\u9762\u3002

\u5176\u4e2d\u6709\u4e00\u4e2a\u6027\u8d28\uff0c\u5bf9\u6781\u9762\u603b\u662f\u7ecf\u8fc7\u76f8\u673a\u4e2d\u5fc3\u8fde\u7ebf \\(O_L O_R\\)\uff0c\u6240\u4ee5\u5bf9\u4e8e\u67d0\u4e2a\u666f\u7269\u4e2d\u7684\u70b9 \\(X_i\\)\uff0c\u5176\u5bf9\u6781\u9762\u90fd\u662f\u552f\u4e00\u7684\u3002\uff08\u663e\u7136\uff0c\u53cd\u8fc7\u6765\u4e0d\u6210\u7acb\u3002\uff09

\u5bf9\u6781\u7ebf

\u5bf9\u6781\u7ebf(Epipolar Line)\u662f\u5173\u4e8e\u52a8\u70b9 \\(X\\) \u6765\u8bf4\u7684\uff0c\u4f53\u73b0\u4e3a\u5bf9\u6781\u9762\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u7ebf\u3002

\u5047\u8bbe\u6211\u4eec\u53ea\u77e5\u9053 \\(X_L\\) \u800c\u4e0d\u77e5\u9053 \\(X_R\\)\uff0c\u90a3\u4e48 \\(X\\) \u53ef\u80fd\u5728 \\(O_L X_L\\) \u8fd9\u6761\u7ebf\u4e0a\u7684\u4efb\u4e00\u70b9\uff1b\u800c\u8fd9\u6761\u7ebf\u5728 \\(R\\) \u5e73\u9762\u4e0a\u7684\u6295\u5f71\u5c31\u662f\u4e00\u6761\u5bf9\u6781\u7ebf\uff0c\u5b83\u7684\u542b\u4e49\u662f\u53ef\u80fd\u7684 \\(X_R\\) \u7684\u8f68\u8ff9\u3002

\u6b64\u5916\uff0c\u5bf9\u6781\u7ebf\u6709\u4e00\u4e2a\u6027\u8d28\uff1a\u5bf9\u6781\u7ebf\u5fc5\u5b9a\u7ecf\u8fc7\u5bf9\u6781\u70b9\uff0c\u800c\u7ecf\u8fc7\u5bf9\u6781\u70b9\u7684\u4efb\u610f\u4e00\u6761\u76f4\u7ebf\uff08\u5f53\u7136\u5f97\u5728\u6210\u50cf\u5e73\u9762\u4e0a\uff09\u90fd\u53ef\u4ee5\u662f\u5bf9\u6781\u7ebf\u3002

\ud83d\udc49 WIKI\u3002

\u5176\u4ed6\u8bf4\u660e

\u56fe\u4e2d\u8fd8\u9700\u8981\u989d\u5916\u89e3\u91ca\u7684\u5c31\u662f \\(X_L\\) \u548c \\(X_R\\)\uff0c\u5b83\u4eec\u5206\u522b\u662f\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u50cf\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6781\u7ebf\u7ea6\u675f","title":"\u6781\u7ebf\u7ea6\u675f","text":"

\u73b0\u5728\u6211\u4eec\u5173\u6ce8\u5bf9\u6781\u9762\uff0c\u7740\u773c\u4e8e\u89e3\u51b3\u4e0b\u9762\u8fd9\u6837\u4e00\u4e2a\u95ee\u9898\u3002

\u5176\u4e2d\u4e24\u4fa7\u7684\u76f8\u673a\u7406\u6240\u5f53\u7136\u7684\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5750\u6807\u7cfb\uff0c\u73b0\u5728\u6211\u4eec\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff08\u56fe\u4e2d\u8c8c\u4f3c\u6807\u9519\u4e86\u65b9\u5411\uff09\uff0c\\(\\mathbf{x}_l = \\overrightarrow{O_l P}\\) \u800c \\(\\mathbf{x}_r = \\overrightarrow{O_r P}\\) \u3002

\u4e0b\u9762\u5f00\u59cb \u53d8\u9b54\u6cd5 \u8fdb\u884c\u4e00\u4e9b\u53d8\u5316\uff1a

\u5f62\u5f0f \u2461 \u63a8\u7406\u8fc7\u7a0b

\u9996\u5148\uff0c\u5728\u540c\u4e00\u4e2a\uff08\u4efb\u4f55\u4e00\u4e2a\uff09\u7b1b\u5361\u5c14\u5750\u6807\u7cfb\u4e2d\uff0c\u90fd\u6709 \\(\\mathbf{x}_l \\cdot (\\mathbf{t} \\times \\mathbf{x}_l) = 0\\)\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\\(\\mathbf{t}\\) \u548c \\(\\mathbf{x}_l\\) \u90fd\u662f\u5bf9\u6781\u9762\u5185\u7684\u4e24\u4e2a\u4e0d\u5e73\u884c\uff08\u6211\u4eec\u5047\u5b9a\u8fd9\u4e00\u70b9\u6052\u6210\u7acb\uff09\u7684\u5411\u91cf\uff0c\u90a3\u4e48 \\(\\mathbf{t} \\times \\mathbf{x}_l\\) \u7684\u7ed3\u679c\u5fc5\u7136\u662f\u4e00\u4e2a\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u7684\u5411\u91cf\u3002\u800c\u8fd9\u4e2a\u5411\u91cf\u5fc5\u7136\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u4e0a\u4efb\u610f\u4e00\u4e2a\u5411\u91cf\uff0c\u6240\u4ee5\u4e0a\u5f0f\u7ed3\u679c\u4e3a \\(0\\)\u3002\u800c\u5c06\u8fd9\u4e2a\u5f0f\u5b50\u5199\u6210\u77e9\u9635\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff0c\u5c31\u662f\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} \\right) = 0 \\;\\;\\;\\;\\;\\left( 1 \\right) \\]

\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u5c06 \\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\) \u4e5f\u5199\u6210\u77e9\u9635\u548c\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff1a

\\[ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\;\\;\\;\\;\\;\\left( 2 \\right) \\]

\u6211\u4eec\u5c06 \\((2)\\) \u5f0f\u5e26\u5165 \\((1)\\) \u5f0f\uff0c\u5f97\u5230\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\left( \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\right) = 0 \\]

\u7a0d\u4f5c\u53d8\u5316\uff08\u628a\u542b \\(t\\) \u7684\u65b9\u9635\u62ff\u5230\u62ec\u53f7\u91cc\u9762\uff09\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} }_{\\mathbf{t} \\times \\mathbf{t} = 0} \\right) = 0 \\]

\u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u91cc\u9762\u51fa\u6765\u4e86\u4e00\u4e2a \\(0\\)\uff0c\u628a\u5b83\u6458\u6389\u4ee5\u540e\u5c31\u53d8\u6210\u4e86\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} }_{\\text{Essential Matrix E}} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u8fd9\u4e2a\u95ee\u9898\uff1a

\u5f62\u5f0f \u2460\uff1a\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff1b

\u5229\u7528\u5bf9\u6781\u51e0\u4f55\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u8f6c\u6362\u4e3a\u4e86\uff1a

\u5f62\u5f0f \u2461\uff1a\u6c42\u89e3 \\(E\\) \u4f7f\u5f97 \\(\\mathbf{x}_l^T E \\mathbf{x}_r = 0\\)\uff0c\u5176\u4e2d \\(E = T_{\\times}R\\)\uff0c\u5176\u4e2d \\(T\\) \u662f \\(\\mathbf{t}\\) \u7684\u77e9\u9635\u5f62\u5f0f\uff1b

\u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u8fdb\u4e00\u6b65\u53d8\u5316\u3002

\u5f62\u5f0f \u2462 \u63a8\u7406\u8fc7\u7a0b

\u6839\u636e\u900f\u89c6\u6295\u5f71\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

\\[ \\small \\begin{aligned} \\text{Left Camera} && \\text{Right Camera} \\\\ z_l \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} & = \\underbrace{ \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} \\\\ 0 & f_y^{(l)} & o_y^{(l)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_l} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} & z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\underbrace{ \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} \\\\ 0 & f_y^{(r)} & o_y^{(r)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_r} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} \\\\ \\mathbf{x}_l^T &= \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T & \\mathbf{x}_r &= K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} \\end{aligned} \\]

\u5c06\u4e0a\u5f0f\u5e26\u5165\u5230\u5f62\u5f0f \u2461 \u5f97\u5230\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

\u5c31\u53d8\u6210\u4e86\uff1a

\\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

\u8fd9\u65f6\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\\(\\mathbf{u}_l\\) \u548c \\(\\mathbf{u}_r\\) \u7ec8\u4e8e\u662f\u6211\u4eec\u5df2\u77e5\u7684\u4e1c\u897f\u4e86\uff0c\u8fd9\u4e0b\u6211\u4eec\u53ef\u4ee5\u6c42\u89e3\u57fa\u672c\u77e9\u9635 \\(F\\)\uff0c\u800c\u7531\u4e8e\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u53ef\u4ee5\u5012\u8fc7\u6765\u63a5\u7740\u5f97\u5230\u672c\u5f81\u77e9\u9635 \\(E\\)\uff0c\u6700\u540e\u901a\u8fc7 SV \u5206\u89e3\u5f97\u5230\u6211\u4eec\u60f3\u8981\u7684 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u6c42\u89e3\u57fa\u672c\u77e9\u9635\u3001\u672c\u5f81\u77e9\u9635\u3001\u5750\u6807\u53d8\u6362\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

\u6c42\u89e3\u6b65\u9aa4

\u5bf9\u4e8e\u5173\u952e\u70b9 \\(i\\)\uff0c\u6211\u4eec\u9700\u8981\u6c42\u89e3\uff1a

\\[ \\begin{bmatrix} u_l^{(i)} & v_l^{(i)} & 1 \\end{bmatrix} \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\begin{bmatrix} u_r^{(i)} \\\\ v_r^{(i)} \\\\ 1 \\end{bmatrix} = 0 \\]

\u5c06\u5176\u5c55\u5f00\uff1a

\\[ \\left( f_{11} u_r^{(i)} + f_{12} v_r^{(i)} + f_13 \\right) u_l^{(i)} + \\left( f_{21} u_r^{(i)} + f_{22} v_r^{(i)} + f_23 \\right) v_l^{(i)} + f_{31} u_r^{(i)} + f_{32} v_r^{(i)} + f_33 = 0. \\]

\u63a5\u4e0b\u6765\u5c06\u6240\u6709\u7684 \\(m\\) \u7ec4\u65b9\u7a0b\u5408\u518d\u540c\u4e00\u4e2a\u77e9\u9635\u91cc\uff08\u6211\u4eec\u81f3\u5c11\u9700\u8981\u989d\u5916\u7684 8 \u4e2a\u65b9\u7a0b\uff0c\u4e4b\u540e\u4f1a\u8bf4\uff09\uff1a

\\[ \\underbrace{ \\begin{bmatrix} u_l^{(1)}u_r^{(1)} & u_l^{(1)}v_r^{(1)} & u_l^{(1)} & v_l^{(1)}u_r^{(1)} & v_l^{(1)}v_r^{(1)} & v_l^{(1)} & u_r^{(1)} & v_r^{(1)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(i)}u_r^{(i)} & u_l^{(i)}v_r^{(i)} & u_l^{(i)} & v_l^{(i)}u_r^{(i)} & v_l^{(i)}v_r^{(i)} & v_l^{(i)} & u_r^{(i)} & v_r^{(i)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(m)}u_r^{(m)} & u_l^{(m)}v_r^{(m)} & u_l^{(m)} & v_l^{(m)}u_r^{(m)} & v_l^{(m)}v_r^{(m)} & v_l^{(m)} & u_r^{(m)} & v_r^{(m)} & 1 \\\\ \\end{bmatrix} }_{A: \\text{ Known }} \\underbrace{ \\begin{bmatrix} f_{11} \\\\ f_{12} \\\\ f_{13} \\\\ f_{21} \\\\ f_{22} \\\\ f_{23} \\\\ f_{31} \\\\ f_{32} \\\\ f_{33} \\\\ \\end{bmatrix} }_{\\mathbf{f}: \\text{ Unknown }} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\\\ \\text{i.e.} \\;\\;\\;\\; A\\mathbf{f}=0 \\]

\u5f53\u7136\uff0c\u50cf\u4e4b\u524d\u4e00\u6837\uff0c\u7531\u4e8e\u8fd9\u4e2a\u65b9\u7a0b\u53ef\u4ee5\u89e3\u51fa \\(k\\mathbf{f}, \\forall k\\in \\text{Z}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ed9 \\(\\mathbf{f}\\) \u4e00\u4e2a\u7ea6\u675f\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u53d6 \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u4e8e\u662f\u95ee\u9898\u5c31\u53c8\u53d8\u6210\u4e86\uff1a

\\[ \\mathop{minimize} \\limits_{\\mathbf{f}} ||A\\mathbf{f}||^2 \\text{ such that } ||\\mathbf{f}||^2 = 1 \\]

\u4e3a\u4e86\u6c42\u89e3 \\(F\\) \u4e2d\u7684 9 \u4e2a\u672a\u77e5\u6570\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e00\u4e2a\u786e\u5b9a\u7684\u7ea6\u675f\u65b9\u7a0b\u662f \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u989d\u5916 8 \u4e2a\u65b9\u7a0b\u3002

\u6c42\u89e3\u5f97\u5230 \\(F\\) \u4ee5\u540e\uff0c\u6839\u636e \\(E = K_l^T F K_r\\) \u5f97\u5230 \\(E\\)\u3002

\u524d\u9762\u4e5f\u5df2\u7ecf\u8bf4\u8fc7\uff0c\u5bf9 \\(E\\) \u8fdb\u884c SV \u5206\u89e3\u5c31\u53ef\u4ee5\u5f97\u5230 \\(R\\) \u548c \\(T_{\\times}\\)\uff0c\u5bf9 \\(T_{\\times}\\) \u91cd\u6392\u5217\u5c31\u5f97\u5230\u4e86 \\(\\mathbf{t}\\)\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u672c\u5f81\u77e9\u9635","title":"\u672c\u5f81\u77e9\u9635","text":"

\u66f4\u8fdb\u4e00\u6b65\u5316\u7b80\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e2d\u95f4\u4e24\u4e2a\u77e9\u9635\u5408\u8d77\u6765\uff0c\u5f97\u5230\u672c\u5f81\u77e9\u9635(Essential Matrix)\\(E\\)\uff1a

\\[ E=T_{\\times}R= \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\]

\u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\uff1a

\\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\;\\;\\;\\text{i.e.} \\;\\;\\; \\mathbf{x}_l^T E \\mathbf{x}_r = 0 \\]

\u672c\u5f81\u77e9\u9635\u7684\u6027\u8d28

\u7531\u4e8e Essential Matrix \u7684\u5b9a\u4e49\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a

\\(T_{\\times}\\) \u53cd\u5bf9\u79f0(Skew-Symmetric)\uff0c\\(R\\) \u6b63\u4ea4(Orthonormal)\u3002

\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5947\u5f02\u503c\u5206\u89e3(Singular Value Decomposition)\u6216\u8005\u8bf4 SV \u5206\u89e3\u6765\u53bb\u8026\u5408\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u57fa\u672c\u77e9\u9635","title":"\u57fa\u672c\u77e9\u9635","text":"

\u6211\u4eec\u53ef\u4ee5\u5c06\u5e38\u6570 \\(z_l\\) \u548c \\(z_r\\) \u7ea6\u6389\uff0c\u5e76\u4e14\u5408\u5e76\u4e2d\u95f4\u7684\u4e09\u4e2a\u77e9\u9635\uff0c\u5f97\u5230\uff1a

\\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} \\underbrace{ (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} }_{\\text{Fundamental Matrix F}} \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

\u4e8e\u662f\u5f97\u5230\u4e86\u57fa\u672c\u77e9\u9635(Fundamental Matrix)\\(F\\)\uff1a

\\[ F = (K_l^{-1})^T E K_r^{-1} = (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} = \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\]

\u8fd9\u5c31\u662f\u6211\u4eec\u7684\u5f62\u5f0f \u2462\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e09\u89d2\u6d4b\u91cf","title":"\u4e09\u89d2\u6d4b\u91cf","text":"

\u6211\u4eec\u77e5\u9053\uff0c\u5982\u679c\u5047\u8bbe\u6570\u636e\u90fd\u662f\u51c6\u786e\u7684\uff0c\u90a3\u4e48 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u5e94\u5f53\u76f8\u4ea4\u4e8e\u7a7a\u95f4\u70b9 \\(X\\)\u3002\u800c\u4e09\u89d2\u6d4b\u91cf\u63cf\u8ff0\u7684\u5c31\u662f\u5982\u4f55\u901a\u8fc7\u8fd9\u6837\u4e00\u4e2a\u8fc7\u7a0b\u5f97\u5230\u7a7a\u95f4\u70b9 \\(X\\)\u3002

\u6211\u4eec\u5728 \u6781\u7ebf\u7ea6\u675f \u91cc\u5df2\u7ecf\u77e5\u9053\u4e86 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\) \u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u7684\u65b9\u7a0b\u4e86\u3002\u90a3\u4e48\u5e94\u5f53\u80fd\u591f\u89e3\u51fa\u8fd9\u4e2a \\(X\\)\uff0c\u4e0d\u8fc7\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u6709\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u53ea\u80fd\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u5f97\u5230\u8fd1\u4f3c\u89e3\u3002

\u5177\u4f53\u7684\u63a8\u7406\u6b65\u9aa4\u5982\u4e0b\uff1a

\u6c42\u89e3\u6b65\u9aa4

\u9996\u5148\u6211\u4eec\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u6539\u5199\u53d8\u6362\u65b9\u7a0b\uff0c\u5e76\u6700\u7ec8\u5199\u6210\u5173\u4e8e \\(\\mathbf{u}\\) \u7684\u5f62\u5f0f \\begin{aligned} \\text{Left Camera} \\\\ \\because \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} ,\\ \\ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\therefore \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_l &= P_l \\mathbf{\\tilde x}_r \\\\ \\text{Right Camera} \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} & 0 \\\\ 0 & f_y^{(r)} & o_y^{(r)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_r &= M_{int_r} \\mathbf{\\tilde x}_r \\end{aligned}

\u7a0d\u4f5c\u603b\u7ed3\uff0c\u5c31\u662f\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e24\u4e2a\u5173\u7cfb\uff1a

\\[ \\mathbf{\\tilde u}_l = P_l \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \\\\ m_{21} & m_{22} & m_{23} & m_{24} \\\\ m_{31} & m_{32} & m_{33} & m_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\\\ \\mathbf{\\tilde u}_l = M_{int_r} \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\]

\u6211\u4eec\u53d1\u73b0\uff0c\u9664\u4e86 \\(\\mathbf{x}_r\\) \u7684\u90e8\u5206\u90fd\u662f\u5df2\u77e5\u7684\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u53ef\u4ee5\u300c\u8054\u7acb\u300d\u8fd9\u4e24\u4e2a\u65b9\u7a0b\uff0c\u5c06\u4ed6\u4eec\u91cd\u6392\u5217\u4e3a\u5982\u4e0b\u5f62\u5f0f\uff1a

\\[ \\underbrace{ \\begin{bmatrix} u_r m_{31} - m_{11} & u_r m_{32} - m_{12} & u_r m_{33} - m_{13} \\\\ v_r m_{31} - m_{21} & v_r m_{32} - m_{22} & v_r m_{33} - m_{23} \\\\ u_l p_{31} - p_{11} & u_l p_{32} - p_{12} & u_l p_{33} - p_{13} \\\\ v_l p_{31} - p_{21} & v_l p_{32} - p_{22} & v_l p_{33} - p_{23} \\end{bmatrix} }_{A_{4\\times 3}} \\underbrace{ \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} }_{\\mathbf{x}_r} = \\underbrace{ \\begin{bmatrix} m_{14} - m_{34} \\\\ m_{24} - m_{34} \\\\ p_{14} - p_{34} \\\\ p_{24} - p_{34} \\end{bmatrix} }_{\\mathbf{b}} \\]

\u6211\u4eec\u5df2\u77e5 \\(A_{4 \\times 3}\\) \u548c \\(\\mathbf{b}\\)\uff0c\u9700\u8981\u6c42 \\(\\mathbf{x}_r\\)\u3002

\u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u63d0\u5230\uff0c\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u5b58\u5728\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u6ca1\u53d1\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u800c\u662f\u53ef\u4ee5\u4f7f\u7528\u6700\u5c0f\u4e8c\u4e58\u7684\u7ed3\u8bba\uff0c\u5f97\u5230\uff1a

\\[ \\mathbf{x}_r = (A^TA)^{-1}A^T\\mathbf{b} \\]

\u8fd8\u6709\u4e00\u79cd\u6539\u8fdb\uff0c\u5c31\u662f\u5c06\u5b83\u8f6c\u5316\u6210\u6700\u5c0f\u5316\u518d\u6295\u5f71\u8bef\u5dee(Reprojection Error)\u7684\u4f18\u5316\u95ee\u9898\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u6c42\u4e00\u4e2a \\(X\\) \u4f7f\u5f97\u5b83\u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u548c\u5b9e\u9645\u7684\u6295\u5f71\u4e4b\u95f4\u7684\u8bef\u5dee\u6700\u5c0f\u3002

\u5b9a\u4e49\u518d\u6295\u5f71\u8bef\u5dee\u4e3a\uff1a

\\[ cost(P) = dist(\\mathbf{u}_l, \\cap{\\mathbf{u}_l})^2 + dist(\\mathbf{u}_r, \\cap{\\mathbf{u}_r})^2 \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5177\u4f53\u6b65\u9aa4","title":"\u5177\u4f53\u6b65\u9aa4","text":"

\u524d\u63d0

\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\\(K\\) \u5df2\u77e5\u3002

\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u53c2\u6570\u5c06\u76f8\u673a\u6210\u50cf\u53ef\u89c6\u5316\uff0c\u5982\u4e0b\u56fe\u3002

\u5176\u4e2d\u4e0b\u6807\u4e3a \\(l\\) \u7684\u8868\u793a\u5de6\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\uff0c\u4e0b\u6807\u4e3a \\(r\\) \u7684\u8868\u793a\u53f3\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\u3002

\u6b65\u9aa4\u4e00

\u5bf9\u4e24\u5f20\u56fe\u7247\u8fdb\u884c \u5173\u952e\u70b9\u5339\u914d\uff0c\u627e\u5230\u81f3\u5c11 8 \u5bf9\u5339\u914d\u7279\u5f81\u3002

\u300c\u4e3a\u4ec0\u4e48\u9700\u8981 8 \u5bf9\u300d\u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u4e2d\u5df2\u7ecf\u8bf4\u660e\u3002

\u6b65\u9aa4\u4e8c

\u6309\u7167 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u63d0\u5230\u7684\u6b65\u9aa4\uff0c\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u5750\u6807\u7684\u53d8\u6362\u53c2\u6570 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

\u6b65\u9aa4\u4e09

\u63a5\u4e0b\u6765\u5bf9\u4e8e\u6bcf\u4e00\u5bf9\u5339\u914d\u7684\u5173\u952e\u70b9\uff0c\u6309\u7167 #\u4e09\u89d2\u6d4b\u91cf \u63d0\u5230\u7684\u65b9\u6cd5\uff0c\u6c42\u89e3\u7a7a\u95f4\u70b9 \\(X_i\\)\u3002

\u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u6240\u6709\u5339\u914d\u7684\u5173\u952e\u70b9\u8ba1\u7b97\u5f97\u5230\u7684\u7a7a\u95f4\u70b9\uff0c\u6700\u7ec8\u5f97\u5230\u4e00\u4efd\u7a00\u758f\u7684\u7a7a\u95f4\u70b9\u4e91\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

Sequential SfM\uff1a

  1. \u4ece\u5176\u4e2d\u4e24\u5f20\u5f00\u59cb\uff0c\u5bf9\u573a\u666f\u8fdb\u884c\u91cd\u5efa
  2. \u4e4b\u540e\u4e0d\u65ad\u62ff\u51fa\u65b0\u7684\u56fe\u50cf\uff0c\u6839\u636e\u5df2\u77e5\u8ba1\u7b97 camera pose\uff0c\u518d\u8fdb\u4e00\u6b65\u4f18\u5316\u4e4b\u524d\u91cd\u5efa\u51fa\u6765\u7684 3D \u70b9\uff0c\u4ee5\u53ca\u589e\u52a0\u4e00\u4e9b\u65b0\u7684\u70b9
  3. \u4f7f\u7528\u96c6\u675f\u4f18\u5316\u8fdb\u4e00\u6b65\u4f18\u5316\u548c\u8c03\u6574
"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u96c6\u675f\u4f18\u5316","title":"\u96c6\u675f\u4f18\u5316","text":"

\u96c6\u675f\u4f18\u5316(Bundle Adjustment)\u4e5f\u5c31\u662f\u5728\u591a\u76ee\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6240\u6709\u70b9\u7684 \u518d\u6295\u5f71\u8bef\u5dee \u4f18\u5316\u95ee\u9898\uff1a

\\[ \\mathop{minimize} \\limits_\\mathbf{P} E(P_{proj}, \\mathbf{P}) = \\sum^m_{i=1}\\sum^n_{j=1} dist(u_j^{(i)}, P_{proj}^{(i)}\\mathbf{P}_j)^2 \\]

\u5176\u6c42\u89e3\u53ef\u4ee5\u4f7f\u7528 LM algorithm\u3002

A modern SfM system: COLMAP

COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections.

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/","title":"Lecture 8 | Depth Estimation & 3D Reconstruction","text":"

\u7ea6 5007 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

\u5f15\u5165

\u5728 \u4e0a\u4e00\u7ae0 \u4e2d\uff0c\u6211\u4eec\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5982\u4f55\u91cd\u5efa\u5f97\u5230\u5173\u952e\u70b9\u7684\u70b9\u4e91\uff0c\u4f46\u662f\u6b64\u65f6\u6211\u4eec\u5f97\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u672c\u7ae0\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\u5982\u4f55\u201c\u7a20\u5bc6\u201d\u5730\u8fdb\u884c\u91cd\u5efa\u3002

\u800c\u5728\u7a20\u5bc6\u91cd\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4e0d\u80fd\u5355\u5355\u7740\u773c\u4e8e\u5173\u952e\u70b9\uff0c\u800c\u662f\u8981\u5e7f\u6cdb\u5730\u9762\u5411\u56fe\u50cf\u4e2d\u7684\u6240\u6709\u50cf\u7d20\uff0c\u800c\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4e2a\u6280\u672f\u5c31\u662f\u6df1\u5ea6\u4f30\u8ba1(Depth Estimation)\u3002

\u300c\u6df1\u5ea6\u300d\u8fd9\u4e2a\u6982\u5ff5\u548c\u5b83\u7684\u5b57\u9762\u610f\u601d\u51e0\u4e4e\u4e00\u6837\uff0c\u800c\u5728\u300c\u6df1\u5ea6\u4f30\u8ba1\u300d\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u56fe\u50cf\uff0c\u6807\u8bb0\u6bcf\u4e00\u4e2a\u50cf\u7d20\u7684\u6df1\u5ea6\u3002\u800c\u5c06\u5176\u53ef\u89c6\u5316\uff0c\u5c31\u662f\u6df1\u5ea6\u56fe\u3002

\u53ea\u4e0d\u8fc7\u6709\u65f6\u5019\u6df1\u5ea6\u6307\u7684\u662f\u7a7a\u95f4\u70b9\u5230\u76f8\u673a\u4e2d\u95f4\u6216\u8005\u76f8\u673a\u5e73\u9762\u7684\u8ddd\u79bb\uff0c\u4e5f\u6709\u7684\u65f6\u5019\u6307\u7684\u662f\u67d0\u4e2a\u7a7a\u95f4\u5750\u6807\u8f74\u5411\u7684\u6df1\u5ea6\uff0c\u5177\u4f53\u5e94\u5f53\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u6765\u3002

\u6309\u7167\u6df1\u5ea6\u611f\u77e5\u7684\u624b\u6bb5\u5206\u7c7b\uff0c\u6709\u4e3b\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Active depth sensing)\u548c\u88ab\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Passive depth sensing)\u4e24\u79cd\uff0c\u5176\u4e2d\u6211\u4eec\u5c06\u8981\u5c55\u5f00\u7684\u89c6\u89c9\u65b9\u6cd5\u90fd\u662f\u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5\u3002

\u4e3b\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u975e\u89c6\u89c9\u65b9\u6cd5

\u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u89c6\u89c9\u65b9\u6cd5

\u903b\u8f91\u94fe\uff1a

(\u53cc\u76ee\u89c6\u89c9 -> \u6df1\u5ea6\u611f\u77e5) => ((\u53cc\u89c6\u89d2\u5339\u914d\u70b9 + \u89c6\u5dee -> \u6df1\u5ea6) + (\u5bf9\u6240\u6709\u50cf\u7d20\u8fdb\u884c\u5339\u914d)) => \u6781\u7ebf\u4e0a\u5bfb\u627e\u5339\u914d\u70b9

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u89c6\u89c9","title":"\u7acb\u4f53\u89c6\u89c9","text":"

\u6211\u4eec\u5df2\u7ecf\u6709\u4e86\u7a00\u758f\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u60f3\u8981\u5f97\u5230\u7a20\u5bc6\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u4e00\u4e2a\u6700\u66b4\u529b\u7684\u65b9\u6cd5\u5c31\u662f\u5c1d\u8bd5\u7740\u53bb\u5339\u914d\u6240\u6709\u50cf\u7d20\uff0c\u5f53\u7136\u8fd9\u770b\u8d77\u6765\u65f6\u95f4\u5f00\u9500\u975e\u5e38\u5927\u3002\u4f46\u662f\u6bcb\u5eb8\u7f6e\u7591\u7684\u662f\uff0c\u5728\u76ee\u524d\u8fd8\u6ca1\u6709\u4ecb\u5165\u4eba\u5de5\u667a\u80fd\u6280\u672f\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u50cf\u7d20\u7684\u5339\u914d\u5173\u7cfb\u3002

\u4ee5\u53ca\u8fd8\u6709\u4e00\u4e2a\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\uff0c\u5982\u4f55\u5f97\u5230\u5339\u914d\u70b9\u7684\u6df1\u5ea6\u4fe1\u606f\u3002

\u6240\u4ee5\u603b\u7ed3\u4e0b\u6765\uff0c\u6709\u4e24\u4e2a\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff1a

\u7531\u4e8e\u5339\u914d\u4e2d\u4f1a\u6709\u90e8\u5206\u4f18\u5316\u5185\u5bb9\u6d89\u53ca\u5230\u6df1\u5ea6\u8ba1\u7b97\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u6211\u60f3\u5148\u4ece\u6df1\u5ea6\u8ba1\u7b97\u5f00\u59cb\u8bb2\uff0c\u4e5f\u5c31\u662f\u4ece\u89c6\u5dee\u5f00\u59cb\u8bb2\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u89c6\u5dee","title":"\u89c6\u5dee","text":"

\u9996\u5148\uff0c\u6211\u4eec\u90fd\u77e5\u9053\u4eba\u7684\u53cc\u773c\u8d4b\u4e88\u4e86\u4eba\u7c7b\u89c6\u89c9\u4e0a\u6df1\u5ea6\u611f\u77e5\u7684\u80fd\u529b\uff0c\u4e5f\u5c31\u662f\u7acb\u4f53\u89c6\u89c9(stereo vision)\u3002\u4e00\u4e2a\u6bd4\u8f83\u5bb6\u55bb\u6237\u6653\u7684\u5b9e\u9a8c\u5c31\u662f\u5355\u773c\u7a7f\u9488\u4f1a\u53d8\u5f97\u5341\u5206\u56f0\u96be\u3002

\u5728\u5355\u76ee\u89c6\u89c9\u4e0b\uff0c\u4f53\u73b0\u8fdc\u8fd1\u6700\u7b80\u5355\u7684\u539f\u7406\u63cf\u8ff0\u5c31\u662f\u300c\u8fd1\u5927\u8fdc\u5c0f\u300d\uff0c\u800c\u5728\u52a8\u6001\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e5f\u4f53\u73b0\u5728\u79fb\u52a8\u76f8\u540c\u7684\u8ddd\u79bb\uff0c\u8fd1\u5904\u7684\u7269\u4f53\u79fb\u52a8\u66f4\u660e\u663e\uff0c\u800c\u8fdc\u5904\u7684\u66f4\u4e0d\u660e\u663e\u3002\u7136\u800c\u8fd9\u4e2a\u4fe1\u606f\u548c\u5355\u7eaf\u7684\u201c\u5927\u5c0f\u201d\u4fe1\u606f\u662f\u53ef\u4ee5\u6df7\u6dc6\u7684\uff0c\u6216\u8005\u8bf4\u5728\u201c\u5927\u5c0f\u201d\u53d8\u5316\u4e0d\u660e\u663e\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4fe1\u606f\u662f\u5f88\u96be\u88ab\u8bc6\u522b\u51fa\u6765\u7684\u3002

\u800c\u5728\u53cc\u76ee\u89c6\u89c9\u4e0b\uff0c\u6211\u4eec\u6709\u6709\u4e00\u4e2a\u66f4\u8fd1\u4e00\u6b65\u7684\u539f\u7406\uff0c\u4e5f\u5c31\u662f\u89c6\u5dee(disparity)\uff0c\u901a\u8fc7\u89c6\u5dee\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u7cbe\u786e\u5730\u611f\u53d7\u5230\u201c\u8ddd\u79bb\u201d\uff08\u5b9e\u9645\u4e0a\u4e5f\u662f\u5bf9\u6781\u51e0\u4f55\u90a3\u4e00\u5957\uff09\uff0c\u63a5\u4e0b\u6765\u9610\u8ff0\u5176\u539f\u7406\u3002

\u9996\u5148\uff0c\u6211\u4eec\u7ed8\u5236\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\uff1a

\u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe\u4e24\u4e2a\u56fe\u50cf\u4e2d\u7684\u5339\u914d\u70b9\u7b26\u5408\u4e4b\u540e\u4f1a\u5728\u7acb\u4f53\u5339\u914d\u4e00\u8282\u91cc\u63d0\u5230\u7684\u6700\u7b80\u60c5\u51b5(simplest case)\uff0c\u4f46\u662f\u53ef\u4ee5\u4e0d\u7528\u7ba1\u8fd9\u4e2a\u6700\u7b80\u60c5\u51b5\u662f\u4ec0\u4e48\uff0c\u76f4\u63a5\u5f53\u4f5c\u8fd9\u662f\u4e00\u4e2a\u4fef\u89c6\u89c6\u89d2\u4e0b\u7684\u7b80\u5316\uff0c\u76f4\u63a5\u770b\u4e0b\u9762\u7684\u6a21\u578b\u5373\u53ef\u3002

\u8fd9\u56fe\u6211\u753b\u4e86\u81f3\u5c11\u534a\u5c0f\u65f6 T^T\uff08\u5f3a\u8feb\u75c7\u306e\u6028\u5ff5\uff09

(1) \u4e2d OL \u548c OR \u5206\u522b\u662f\u4e24\u76f8\u673a\u4e2d\u5fc3\uff0c\u6de1\u84dd\u8272\u7ebf\u6761\u8868\u793a\u6210\u50cf\u5e73\u9762\uff0cXL \u548c XR \u5206\u522b\u8868\u793a\u5b9e\u9645\u70b9 X \u5728\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\uff0c\u6a59\u8272\u7ebf\u6761\u8868\u793a\u4ed6\u4eec\u7684\u6a2a\u5411\u5750\u6807\uff08\u5047\u8bbe\u4ed6\u4eec\u90fd\u5728\u540c\u4e00\u6c34\u5e73\u7ebf\u4e0a\uff09\uff0cz \u8868\u793a\u5b9e\u9645\u70b9 X \u5230\u57fa\u7ebf\u7684\u8ddd\u79bb\uff0c\u8fd9\u91cc\u6211\u4eec\u6682\u4e14\u79f0\u4e4b\u4e3a\u201c\u6df1\u5ea6\u201d\uff08\u53cd\u6b63\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\u6df1\u5ea6\uff0c\u6709 z \u90fd\u80fd\u7b97\uff09\u3002

(2) \u4e2d\u6211\u753b\u56fe\u7684\u65f6\u5019\u5fd8\u8bb0\u533a\u5206\u4e24\u4e2a XR \u4e86\uff0c\u6240\u4ee5\u5173\u4e8e (2) \u56fe\u4e2d\u7684 XR \u4e00\u5f8b\u6307\u5de6\u8fb9\u90a3\u4e2a XR\u3002

\u6211\u4eec\u5c06 OR \u7684\u6210\u50cf\u6a21\u578b\u5e73\u79fb\u5230\u5de6\u4fa7\uff0c\u5373\u56fe (2)\uff0c\u53d1\u73b0\u6a59\u8272\u7684\u4e09\u89d2\u5f62\u548c\u7ea2\u8272\u7684\u4e09\u89d2\u5f62\u76f8\u4f3c\uff1a\\(\\Delta O X_L X_R \\cong \\Delta X O_L O_R\\) \uff08\u6ce8\u610f\uff0c\u5b9e\u9645\u60c5\u51b5\u4e0d\u4e00\u5b9a\u7b49\u8170\uff01\uff09

\u4e8e\u662f\u6211\u4eec\u5f97\u5230\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff1a

\\[ \\frac{\\overline{X_L X_R}}{f} = \\frac{\\overline{O_L O_R}}{z} \\\\ \\text{ i.e. }\\; disparity = \\Delta{\\mathbf{x}} = |\\mathbf{x}_l - \\mathbf{x}_r| = |x_l - x_r| = \\frac{B \\cdot f}{z} \\\\ \\text{where }B\\text{ is the length of baseline} \\\\ \\text{ i.e. }\\; z = \\frac{B \\cdot f}{|x_l-x_r|} \\]

\u63d0\u793a

\u867d\u7136\u662f\u4e2a\u7b80\u5316\u60c5\u51b5\uff0c\u4f46\u662f\u5728\u6700\u7b80\u60c5\u51b5(simplest case)\u4e0b\u662f\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\u7684\uff0c\u7a0d\u540e\u6211\u4f1a\u63d0\u9192\u56de\u987e\u8fd9\u4e00\u8282\u6765\u7406\u89e3\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u5b89\u5fc3\u987a\u7740\u8bfb\u4e0b\u53bb\u5373\u53ef\u3002

\u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u89e3\u51b3\u4e00\u4e2a\u4e86\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u5339\u914d","title":"\u7acb\u4f53\u5339\u914d","text":"

\u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u5047\u8bbe\uff0c\u4e5f\u5c31\u662f\u5728\u5339\u914d\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684\u4e24\u4e2a view \u7684\u8ddd\u79bb\u76f8\u5dee\u4e0d\u5927\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c40\u90e8\u7279\u5f81\u4ecd\u7136\u662f\u76f8\u4f3c\u7684\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u641c\u7d22","title":"\u641c\u7d22","text":"

\u7acb\u4f53\u5339\u914d(Stereo Matching)\u7684\u539f\u7406\u5c31\u662f\uff0c\u9009\u5b9a\u7b2c\u4e00\u4e2a\u56fe\u50cf\u5185\u7684\u67d0\u4e00\u70b9\uff0c\u7136\u540e\u53bb\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u80fd\u591f\u548c\u5b83\u5339\u914d\u7684\u70b9\u3002\u6ca1\u9519\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u5339\u914d\u7684\u70b9\u5373\u53ef\uff0c\u8fd9\u5927\u5927\u4f18\u5316\u4e86\u590d\u6742\u5ea6\u3002\u800c\u5b83\u7684\u6839\u636e\u6070\u597d\u5c31\u662f\u5bf9\u6781\u7ebf\u7684\u5b9a\u4e49\u3002

\ud83d\udc49 \u56de\u987e\u5bf9\u6781\u51e0\u4f55\uff01

\u6ca1\u9519\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u77e5\u4e86 \\(X_L\\)\uff08\u7531\u6211\u4eec\u9009\u5b9a\u7684\uff09\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u8f68\u8ff9\u4fbf\u662f\u5bf9\u6781\u7ebf\uff0c\u4e8e\u662f\u6211\u4eec\u53ea\u9700\u8981\u5148\u627e\u5230\u6211\u4eec\u9009\u5b9a\u7684 \\(X_L\\) \u5728\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u4e0a\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\uff0c\u7136\u540e\u518d\u5728\u8fd9\u6761\u7ebf\u4e0a\u641c\u7d22\u7279\u5f81\u4e0e \\(X_L\\) \u6700\u5339\u914d\u7684\u90a3\u4e2a\u70b9\u5373\u53ef\u3002\uff08\u8fd9\u91cc\u6211\u4eec\u4e5f\u6ca1\u6709\u5fc5\u8981\u4f7f\u7528 SIFT\uff0c\u76f4\u63a5\u505a\u5dee\u5c31\u591f\u4e86\uff09

\u4f46\u662f\u8bdd\u53c8\u8bf4\u56de\u6765\uff0c\u8ba1\u7b97\u5bf9\u6781\u7ebf\u8fd9\u4ef6\u4e8b\u4e5f\u5e76\u975e\u5341\u5206\u7b80\u5355\uff0c\u5982\u679c\u5bf9\u4e8e\u6bcf\u4e2a\u70b9\u6211\u4eec\u90fd\u9700\u8981\u53bb\u8ba1\u7b97\u5bf9\u6781\u7ebf\uff0c\u90a3\u4e48\u5c06\u5e26\u6765\u4e0d\u5c0f\u7684\u5e38\u6570\uff0c\u800c\u4e14\u7531\u4e8e\u8fd9\u4ef6\u4e8b\u6ca1\u6cd5\u201c\u6574\u4f53\u5730\u9884\u5904\u7406\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4f18\u5316\u8fd9\u4ef6\u4e8b\u3002

\u6700\u7b80\u60c5\u51b5

\u9996\u5148\u8003\u8651\u6700\u7b80\u60c5\u51b5(simplest case)\u8fd9\u4e2a\u7279\u6b8a\u60c5\u51b5\uff1a

  1. \u4e24\u4e2a\u76f8\u673a\u7684\u7126\u8ddd\u76f8\u540c\uff1b
  2. \u76f8\u673a\u4f4d\u7f6e\u5728\u540c\u4e00\u6c34\u5e73\u9762\u4e0a\uff0c\u5373\u9ad8\u5ea6\u76f8\u540c\uff1b
  3. \u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u548c\u57fa\u7ebf\uff0c\u4e09\u8005\u76f8\u4e92\u5e73\u884c\uff0c\u6216\u8005\u8bf4\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u5171\u9762\uff08\u6b64\u65f6\u5bf9\u6781\u70b9\u4e0d\u5b58\u5728\uff09\uff1b

\u6b64\u65f6\uff0c\u5bf9\u6781\u7ebf\u4e5f\u6c34\u5e73\uff0c\u800c\u4e14\u4e24\u6761\u5bf9\u6781\u7ebf\u4e5f\u5171\u7ebf\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5f53\u6211\u4eec\u9009\u5b9a\u5de6\u56fe\u4e2d\u7684\u67d0\u4e2a\u70b9 \\(X_L\\)\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u5019\u9009\u4f4d\u7f6e\u5c31\u5728\u53f3\u56fe\u4e2d\u540c\u4e00\u9ad8\u5ea6\u7684\u90a3\u6761\u6c34\u5e73\u7ebf\u4e0a\u3002

\u90a3\u4e48\u5982\u4f55\u89e3\u51b3\u8fd9\u79cd\u60c5\u51b5\u4ee5\u5916\u7684\u60c5\u51b5\u5462\uff1f\u65e2\u7136\u6211\u90fd\u8fd9\u4e48\u6392\u4e86\uff0c\u90a3\u89e3\u51b3\u529e\u6cd5\u81ea\u7136\u5c31\u662f\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\u6765\u505a\u4e86\u3002

\u8f6c\u5316\u601d\u60f3

\u53c8\u662f\u4e00\u4e2a\u7a81\u7136\u7684\u60f3\u6cd5\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u6216\u8bb8\u53ef\u4ee5\u4e0d\u4ece\u6574\u4f53\u53bb\u601d\u8003\uff0c\u800c\u662f\u5148\u89e3\u51b3\u4e00\u4e2a\u6700\u7b80\u60c5\u51b5\uff0c\u518d\u8f6c\u5316\u95ee\u9898\u3002

\u4e00\u822c\u60c5\u51b5

\u8fd9\u4e2a\u95ee\u9898\u88ab\u79f0\u4e3a\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\uff0c\u8fd9\u91cc\u5e76\u4e0d\u5c55\u5f00\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1a

C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.

\u56de\u987e

\u76f8\u4fe1\u73b0\u5728\u4f60\u5bf9\u201c\u6700\u7b80\u60c5\u51b5\u201d\u5df2\u7ecf\u6709\u66f4\u6df1\u523b\u7684\u7406\u89e3\u4e86\uff0c\u4e0d\u59a8\u56de\u8fc7\u5934\u53bb\u7406\u89e3\u4e00\u4e0b\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u90a3\u4e2a\u7b80\u5316\u7684\u89c6\u5dee\u6a21\u578b\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\uff1f

\ud83d\udc49 \u89c6\u5dee

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d","title":"\u5339\u914d","text":"

\u6240\u8c13\u7684\u5bfb\u627e\u5339\u914d\uff0c\u5c31\u662f\u5728\u5145\u65a5\u7740\u5019\u9009\u70b9\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u6700\u597d\u7684\u4e00\u4e2a\u70b9\uff0c\u6216\u8005\u8bf4\u5dee\u5f02\u6700\u5c0f\u7684\u4e00\u4e2a\u70b9\u3002

\u5e38\u89c1\u7684\u5dee\u5f02\u8861\u91cf\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

SSD: Sum of Squared Differences

\\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,2)|^2 \\]

SAD: Sum of Absolute Differences

\\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,y)| \\]

ZNCC: Zero-mean Normalized Cross Correlation

\\[ diff = \\frac{(W_1(x,y)-\\overline{W_1})(W_2(x,y)-\\overline{W_2})}{\\sigma_{W_1}\\sigma_{W_2}} \\\\ \\text{where } \\overline{W_i} = \\frac{1}{n}\\sum_{x,y} W_i \\;\\;\\; \\sigma_{W_i} = \\sqrt{\\frac{1}{n}\\sum_{x,y}(W_i-\\overline{W_i})^2} \\]

\u5176\u4e2d\uff0cZNCC \u76f8\u6bd4\u5176\u4ed6\u65b9\u6cd5\uff0c\u4f18\u8d8a\u6027\u5728\u4e8e\u5b83\u5bf9\u56fe\u50cf\u6574\u4f53\u7684\u5149\u5f3a\u5ea6\u4e0d\u654f\u611f\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\\(W_i\\) \u5728\u53c2\u4e0e\u8ba1\u7b97\u524d\u90fd\u51cf\u53bb\u4e86 \\(\\overline{W_i}\\)\uff0c\u6240\u4ee5\u6d88\u9664\u4e86\u56fe\u50cf\u6574\u4f53\u4eae\u5ea6\u5e26\u6765\u7684\u5f71\u54cd\u3002

\u4e2a\u4eba\u7591\u60d1

\u8fd9\u91cc\u6240\u8c13\u7684\u201c\u6d88\u9664\u4eae\u5ea6\u5f71\u54cd\u201d\uff0c\u662f\u5426\u662f\u5bf9\u4e8e multi-view \u7684\u60c5\u51b5\u6765\u8bf4\u7684\uff1f\u56e0\u4e3a\u5982\u679c\u53ea\u6709\u4e24\u5f20\u56fe\u7247\uff0c\u4e14\u4eae\u5ea6\u5dee\u8ddd\u6574\u4f53\u6052\u5b9a\u7684\u8bdd\uff0c\u867d\u7136\u8ba1\u7b97\u51fa\u6765\u7684 diff \u4f1a\u504f\u5927\uff0c\u4f46\u662f\u6574\u4f53\u4e0a\u7684\u5927\u5c0f\u5173\u7cfb\u597d\u50cf\u4e5f\u6ca1\u6709\u53d8\u5316\uff1f\u6211\u6ca1\u6709\u60f3\u6e05\u695a\u8fd9\u4e00\u70b9\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d\u7684\u6539\u8fdb","title":"\u5339\u914d\u7684\u6539\u8fdb","text":"

\u7136\u800c\uff0c\u5339\u914d\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u989d\u5916\u7684\u95ee\u9898\u9700\u8981\u89e3\u51b3\u3002

\u7a97\u53e3\u641c\u7d22\u7684\u5f0a\u7aef

\u7a97\u53e3\u641c\u7d22\u7684\u6548\u679c\u5b9e\u9645\u4e0a\u5e38\u5e38\u4e0d\u5c3d\u5982\u4eba\u610f\uff0c\u6709\u4e00\u79cd\u57fa\u4e8e\u56fe\u5272\u7684\u505a\u6cd5\uff0c\u6548\u679c\u76f8\u5bf9\u7a0d\u597d\u3002

\u8fd9\u91cc\u6240\u8bf4\u7684\u7a97\u53e3\uff0c\u6307\u7684\u662f\u5728\u5339\u914d\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u7528\u6765\u6bd4\u8f83\u76f8\u4f3c\u5ea6\u7684\u7a97\u53e3\u5927\u5c0f\u3002

\ud83d\udc49 Boykov et al., Fast Approximate Energy Minimization via Graph Cuts, International Conference on Computer Vision 1999.

\u8fd8\u6709\u53e6\u5916\u4e00\u4e2a\u601d\u8def\uff0c\u90a3\u5c31\u662f\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5982\u679c\u8bf4\u539f\u6765\u7684\u76ee\u6807\u51fd\u6570\u662f\u4e24\u70b9\u7684\u5339\u914d\u7a0b\u5ea6\uff0c\u90a3\u4e48\u73b0\u5728\u7684\u76ee\u6807\u51fd\u6570\u53ef\u4ee5\u662f\u5339\u914d\u7a0b\u5ea6\u548c\u5e73\u6ed1\u7a0b\u5ea6\u7684\u52a0\u6743\u548c\uff1a

\\[ \\begin{aligned} E(d) = E_d(d) + \\lambda E_s(s) \\\\ \\text{match cost: } & E_d(d) = \\sum_{(x,y)\\in I} C(x,y,d(x,y)) \\;\\;\\; \\text{e.g., SSD, SAD, ZNCC} \\\\ \\text{smoothness cost: } & E_s(d) = \\sum_{(p,q) \\in \\varepsilon} V(d_p, d_q) \\;\\;\\; \\text{where } \\varepsilon \\text{ is the set of neighboring pixels } \\end{aligned} \\]

\u5176\u4e2d\uff0c\\(V(d_p,d_q)\\) \u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

\\[ \\begin{aligned} \\begin{aligned} \\text{L_1 Distance: } \\\\ V(d_p, d_q) &= |d_p - d_q| \\end{aligned} & & \\begin{aligned} \\text{Potts Model: } \\\\ V(d_p, d_q) &= \\left\\{ \\begin{array}{*} 0 & \\text{ if } d_p = d_q \\\\ 1 & \\text{ if } d_p \\not = d_q \\end{array} \\right. \\end{aligned} \\end{aligned} \\]

\u7279\u522b\u7684\uff0c\u5982\u679c\u6d89\u53ca\u7684\u662f\u4e00\u4e2a\u7ebf\u6027\u7684\u626b\u63cf\uff0c\u4e5f\u5c31\u662f\u5f53 \\(\\varepsilon\\) \u4e2d\u53ea\u542b\u6709\u5de6\u53f3\u4e24\u4fa7\u7684\u70b9\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u7528 DP \u89e3\u51b3\u3002\u800c\u8fd9\u79cd\u65b9\u5f0f\u4f18\u5316\u51fa\u6765\u7684\u56fe\u7247\u6548\u679c\u662f\u8fd9\u6837\u7684\uff1a

\u7136\u800c\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\u7ebf\u6027\u626b\u63cf\u8fd9\u4e2a\u6761\u4ef6\u7684\u8bdd\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u53d8\u6210\u4e86\u4e00\u4e2a NP-hard \u95ee\u9898\uff0c\u4e0d\u8fc7\u53ef\u4ee5\u7528\u56fe\u5272\u6c42\u8fd1\u4f3c\u89e3\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7efc\u5408","title":"\u7efc\u5408","text":"

\u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u5168\u90e8\u89e3\u51b3\u4e86\u3002

\u4e8e\u662f\u53cc\u76ee\u91cd\u5efa\u7684\u5927\u81f4\u6d41\u7a0b\u5982\u4e0b\u2014\u2014\u9996\u5148\u6211\u4eec\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\uff0c\u83b7\u5f97\u76f8\u673a\u7684\u5185\u53c2\uff1b\u63a5\u4e0b\u6765\u901a\u8fc7\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\u6280\u672f\uff0c\u5c06\u4e24\u5f20\u56fe\u7247\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\uff1b\u7136\u540e\u518d\u5bf9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u8fdb\u884c\u5339\u914d\uff0c\u53ea\u9700\u8981\u5728\u540c\u9ad8\u5ea6\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u5c40\u90e8\u7279\u5f81\u6700\u76f8\u4f3c\u7684\u53e6\u5916\u4e00\u4e2a\u70b9\u5373\u53ef\uff1b\u63a5\u7740\u518d\u6839\u636e\u5339\u914d\u70b9\u7684\u5173\u7cfb\u8fdb\u884c\u6df1\u5ea6\u4f30\u8ba1\u5373\u53ef\u3002

graph LR;\n    A --> B --> C --> D\n    A[\"Calibrate Cameras\"]\n    B[\"Rectify Images\"]\n    C[\"Compute Disparity\"]\n    D[\"Estimate Depth\"]
\u5f15\u8d77\u8bef\u5dee\u7684\u53ef\u80fd\u56e0\u7d20

\u8bfe\u7a0b\u5185\u8fd9\u4e2a\u5217\u8868\u5176\u5b9e\u662f\u7ed9\u5927\u4f5c\u4e1a\u7684\u63d0\u793a\uff0c\u4e2a\u4eba\u8ba4\u4e3a\u4e5f\u6709\u52a9\u4e8e\u68b3\u7406\u6574\u4e2a\u6d41\u7a0b\u3002

\u4e0b\u9762\u8be6\u7ec6\u8bf4\u660e\u51e0\u4e2a\u56e0\u7d20\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\u3002

\u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

\u5f53\u6211\u4eec\u4f7f\u7528\u7a97\u53e3\u641c\u7d22\u65f6\uff0c\u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u4ecd\u7136\u662f\u4e2a\u96be\u9898\u2014\u2014\u7a97\u53e3\u8d8a\u5c0f\uff0c\u5f80\u5f80\u7ed3\u679c\u7684\u7ec6\u8282\u4f1a\u66f4\u591a\uff0c\u76f8\u5bf9\u7684\u566a\u58f0\u4e5f\u66f4\u591a\uff0c\u56fe\u7247\u770b\u8d77\u6765\u5c31\u5f88\u4e71\uff1b\u800c\u7a97\u53e3\u8d8a\u5927\uff0c\u5f80\u5f80\u566a\u58f0\u66f4\u5c11\u3001\u66f4\u5e73\u6ed1\uff0c\u4f46\u662f\u7ec6\u8282\u4e5f\u66f4\u5c11\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2a\u5e73\u6ed1\u5ea6\u548c\u7cbe\u786e\u5ea6\u7684 trade off\u3002

W \u8868\u793a\u7a97\u53e3\u5927\u5c0f\u3002

\u57fa\u7ebf\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

\u8c28\u8bb0\u6211\u53c8\u56e0\u4e3a\u753b\u56fe\u6d6a\u8d39\u534a\u4e2a\u5c0f\u65f6\u3002

\u4e0a\u9762\u7684\u5185\u5bb9\u7ed3\u675f\u540e\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u9057\u7559\u4e0b\u6765\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u5148\u601d\u8003\u4e00\u4e0b\u76ee\u524d\u8fd9\u4e2a\u6d41\u7a0b\u6709\u4ec0\u4e48\u95ee\u9898\uff0c\u518d\u6253\u5f00\u4e0b\u9762\u7684\u63d0\u793a\u6846\u3002

\u4e00\u4e2a\u5c1a\u672a\u88ab\u89e3\u51b3\u7684\u95ee\u9898

\u8ba9\u6211\u4eec\u56de\u5230\u7b2c\u4e94\u7ae0\u7684\u5173\u952e\u70b9\u5339\u914d\u2014\u2014\u4e3a\u4ec0\u4e48\u6211\u4eec\u53ea\u627e\u5173\u952e\u70b9\uff1f

\u6211\u4e2a\u4eba\u7684\u60f3\u6cd5\u662f\uff0c\u9996\u5148\uff0c\u5173\u952e\u70b9\u80fd\u591f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u8868\u8fbe\u4e00\u4e2a\u7269\u4f53\u7684\u7279\u5f81\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u52fe\u52d2\u4e00\u4e2a\u7269\u4f53\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u90e8\u5206\uff1b\u8fd8\u6709\u4e00\u4e2a\u539f\u56e0\u662f\uff0c\u5173\u952e\u70b9\u7279\u5f81\u660e\u663e\uff0c\u5176\u8868\u8fbe\u5177\u6709\u4e00\u5b9a\u7684\u72ec\u7279\u6027\uff08\u4e5f\u5c31\u662f\u5173\u952e\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff09\u3002

\u800c\u73b0\u5728\u6211\u4eec\u505a\u5339\u914d\u7684\u5185\u5bb9\u662f\u4efb\u610f\u7684\u3001\u5e7f\u6cdb\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u73b0\u5728\u5728\u505a\u5339\u914d\u7684\u5f88\u53ef\u80fd\u662f\u4e00\u9762\u767d\u5899\u4e0a\u7684\u67d0\u4e00\u4e2a\u70b9\uff08\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u8fc7\u7684 textureless regions\uff09\uff0c\u8fd9\u6837\u7684\u70b9\u53c8\u8981\u5982\u4f55\u627e\u5230\u5b83\u7684\u5339\u914d\u70b9\u5462\uff1f

\u7b54\u6848\u5c31\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u7ed3\u6784\u5149\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u7ed3\u6784\u5149

\u6211\u4eec\u518d\u68b3\u7406\u4e00\u4e0b\u95ee\u9898\u7684\u8981\u70b9\uff0c\u5c31\u4ee5\u767d\u5899\u4e3a\u4f8b\u5b50\uff0c\u5b83\u96be\u4ee5\u8fdb\u884c\u5339\u914d\u662f\u56e0\u4e3a\u5b83\u7f3a\u5c11\u7279\u5f81\u3001\u7f3a\u5c11\u7eb9\u7406\uff0c\u800c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5bf9\u5176\u7ed3\u6784\u8fdb\u884c\u91cd\u5efa\u2014\u2014\u90a3\u4e48\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u6211\u4eec\u624b\u52a8\u7ed9\u4ed6\u300c\u4e0a\u7eb9\u7406\u300d\uff0c\u5f53\u7136\u5e76\u4e0d\u662f\u6307\u753b\u4e0a\u53bb\uff0c\u800c\u662f\u4f7f\u7528\u7ed3\u6784\u5149\uff1a

\u4e8e\u662f\u6211\u4eec\u7684\u56fe\u50cf\u5c31\u6709\u4e86\u7eb9\u7406\uff0c\u62e5\u6709\u4e86\u201c\u7279\u5f81\u201d\u3002

\u4e2a\u4eba\u60f3\u6cd5

\u6211\u5f53\u65f6\u770b\u5230\u8fd9\u4e2a idea \u7684\u65f6\u5019\uff0c\u611f\u89c9\u5f88\u523a\u6fc0\uff0c\u4f46\u662f\u53c8\u89c9\u5f97\u8fd9\u7834\u574f\u4e86\u666f\u8c61\u672c\u6765\u7684\u7eb9\u7406\uff0c\u4f46\u662f\u8f6c\u5ff5\u4e00\u60f3\uff0c\u662f\u4e0d\u662f\u4f1a\u62cd\u4e24\u5f20\uff0c\u4e00\u5f20\u7528\u6765\u4e0a\u8272\uff0c\u4e00\u5f20\u7528\u6765\u5efa\u6a21\uff1f\u6211\u6682\u65f6\u8fd8\u4e0d\u77e5\u9053\uff0c\u7ebf\u653e\u4e2a\u731c\u60f3\u5728\u8fd9\u91cc\u3002

\u4e0d\u8fc7\u6b64\u65f6\u53c8\u6709\u4e00\u4e2a\u5f15\u7533\u51fa\u6765\u7684\u70b9\uff0c\u5c31\u662f\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5176\u5b9e\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e2a\u76f8\u673a\u3002

\u8fd9\u662f\u56e0\u4e3a\uff0c\u5047\u8bbe\u6211\u4eec\u628a camera 2 \u653e\u5728\u4e0e projector \u4e00\u6837\u7684\u4f4d\u7f6e\uff0c\u6b64\u65f6 camera 2 \u6536\u5230\u7684\u56fe\u50cf\u5e94\u5f53\u548c projector \u5c04\u51fa\u53bb\u7684\u662f\u4e00\u6837\u7684\uff0c\u6216\u8005\u8bf4\u662f\u7c7b\u4f3c\u7684\u3002

\u5982\u4f55\u89e3\u91ca\uff1f

\u8bf4\u5b9e\u8bdd\u6211\u8fd8\u662f\u4e0d\u592a\u80fd\u7406\u89e3\u8fd9\u4e00\u70b9\u3002\u5982\u679c\u8981\u6211\u5f3a\u884c\u7406\u89e3\u7684\u8bdd\uff0c\u6211\u89c9\u5f97\u5927\u6982\u662f\u53c8\u8fd9\u4e48\u4e24\u70b9\uff0c\u7b2c\u4e00\u70b9\u662f\u88ab\u7ed3\u6784\u5149\u7167\u5c04\u7684\u4e1c\u897f\u5bf9\u7ed3\u6784\u5149\u7684\u53cd\u5c04\u4ee5\u6f2b\u53cd\u5c04\u4e3a\u4e3b\uff0c\u800c\u4e14\u6240\u8c13\u7684\u201c\u4e00\u6837\u201d\u4e5f\u53ea\u662f\u7d2f\u6b7b\uff0c\u5e76\u4e0d\u80fd\u5305\u62ec\u9634\u5f71\u5173\u7cfb\u7b49\uff0c\u6240\u4ee5\u5bf9\u8fd9\u4e2a\u7ed3\u8bba\u7684\u6b63\u786e\u4e0e\u5426\u6211\u8868\u793a\u6000\u7591\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u591a\u89c6\u89d2","title":"\u591a\u89c6\u89d2","text":"

\u591a\u89c6\u89d2\u7acb\u4f53(Multi-view Stereo, MVS)\u91cd\u5efa\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u5229\u7528\u66f4\u591a\u7684\u89c6\u89d2\u6765\u8fdb\u884c\u91cd\u5efa\uff0c\u76f8\u6bd4\u4e8e\u524d\u9762\u63d0\u5230\u7684\u53cc\u76ee\u6a21\u578b\uff0c\u5b83\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\u3001\u80fd\u5728\u591a\u4e2a\u5019\u9009\u4e2d\u9009\u62e9\u6700\u5408\u9002\u7684\u65b9\u6848\uff0c\u4ee5\u53ca\u80fd\u5f97\u5230\u66f4\u5b8c\u6574\u7684 3D

\u6211\u4eec\u5728\u53cc\u76ee\u5339\u914d\u4e2d\uff0c\u9996\u5148\u5bfb\u627e\u80fd\u591f\u5339\u914d\u7684\u70b9\u5bf9\u518d\u505a\u63a5\u4e0b\u6765\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u5728\u591a\u89c6\u89d2\u4e2d\uff0c\u627e\u5230\u300c\u5339\u914d\u7684\u4e00\u7cfb\u5217\u70b9\u300d\u662f\u6bd4\u8f83\u56f0\u96be\u4e14\u8017\u65f6\u7684\uff0c\u56e0\u4e3a n \u4e2a\u70b9\u6709 \\(C_n^2\\) \u5bf9\u5339\u914d\u5173\u7cfb\u3002\u6240\u4ee5\u6211\u4eec\u8981\u53d8\u6362\u601d\u8def\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u67d0\u4e00\u4e2a\u89c6\u89d2\u4e3a\u57fa\u7840\uff0c\u5e76\u679a\u4e3e\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff0c\u8ba1\u7b97\u91cd\u6295\u5f71\u8bef\u5dee\uff0c\u627e\u5230\u4f7f\u91cd\u6295\u5f71\u8bef\u5dee\u6700\u4f18\u79c0\u7684\u90a3\u4e2a\u6df1\u5ea6\u4f5c\u4e3a\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff08\u800c\u4e0d\u662f\u5728\u6bcf\u4e00\u4e2a\u5bf9\u6781\u7ebf\u4e0a\u627e\uff0c\u53ef\u4ee5\u601d\u8003\u4e3a\u4ec0\u4e48\uff09\u3002

\u4e2a\u4eba\u7591\u95ee

\u8bdd\u8bf4\u8fd9\u4e2a\u91cd\u6295\u5f71\u8bef\u5dee\u6307\u7684\u662f\u4ec0\u4e48\u554a\uff0c\u662f\u9700\u8981\u5148\u7b97\u597d\u5339\u914d\u70b9\u7136\u540e L2 \u8ddd\u79bb\u7684\u8bef\u5dee\u8fd8\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff1f\u5982\u679c\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff0c\u90a3\u600e\u4e48\u89e3\u51b3\u5f62\u53d8\uff1f

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-reconstruction","title":"3D reconstruction","text":"

\u5177\u4f53\u6765\u8bf4\uff0c3D \u91cd\u5efa\u5305\u62ec\u8fd9\u4e48\u4e09\u4e2a\u6b65\u9aa4\uff1a

  1. \u6df1\u5ea6\u8ba1\u7b97
  2. \u6df1\u5ea6 -> 3D\u7f51\u683c\u8868\u9762
  3. \u7eb9\u7406\u586b\u5145
"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-representations","title":"3D representations","text":"

\u8865\u5145\u56fe\u7247

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-surface-reconstruction","title":"3D surface reconstruction","text":"
  1. \u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a
  2. \u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c
"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u6df1\u5ea6---\u4f53\u7d20\u8868\u793a","title":"\u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a","text":"

\u5e38\u7528\u65b9\u6cd5\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#depth-fusion-depth-maps-to-tsdf","title":"Depth Fusion \uff08depth maps to TSDF\uff09","text":"

\u3010\u5bf9\u4e8e\u56fe\u4e2d\u3011\uff1a

\u601d\u8def

\u4e4b\u524d\u4e5f\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\u3002\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u60f3\u6cd5\u662f\uff0c\u5f53\u4f60\u9700\u8981\u628a\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u4e1c\u897f\u6295\u5f71\u5230\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u5230\u5730\u65b9\u53bb\u65f6\uff0c\u5e94\u5f53\u679a\u4e3e\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u7684\u90a3\u4e00\u4fa7\u7684\u5355\u5143\uff0c\u7136\u540e\u5229\u7528\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u8fd9\u4e00\u4fa7\u53bb\u8ba1\u7b97\uff0c\u800c\u4e0d\u662f\u4ece\u4f4e\u5230\u9ad8\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#poisson-reconstruction-depth-maps-to-occupancy-volume","title":"Poisson reconstruction \uff08depth maps to occupancy volume\uff09","text":"

\u67cf\u677e\u91cd\u5efa

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u4f53\u7d20\u8868\u793a---\u4e09\u7ef4\u7f51\u683c","title":"\u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c","text":"

\u5e38\u7528\u65b9\u6cd5\uff1a

Marching cubes

"},{"location":"cour_note/D2QD_Intro2CV/Lec08/#texture-mapping","title":"Texture mapping","text":"

\u5c55\u5f00 get \u7eb9\u7406\u56fe\uff08\u4e8c\u7ef4\u5750\u6807\u80fd\u591f\u5bf9\u5e94\u4e00\u4e2a\u7f51\u683c\u9762\uff09 using \u53c2\u6570\u5316

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/","title":"Lecture 9 | Deep Learning","text":"

\u7ea6 1839 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u673a\u5668\u5b66\u4e60\u6982\u8ff0","title":"\u673a\u5668\u5b66\u4e60\u6982\u8ff0","text":"

\u8bf4\u660e

\u672c\u8bfe\u7a0b\u4e0d\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u5173\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u6240\u6709\u77e5\u8bc6\uff0c\u4f46\u4ecd\u7136\u5bf9\u57fa\u7840\u6982\u5ff5\u6709\u6240\u8981\u6c42\uff0c\u6240\u4ee5\u5728\u6b64\u4ec5\u505a\u6982\u5ff5\u6027\u5bf9\u7b80\u4ecb\u3002

\u673a\u5668\u5b66\u4e60(Machine Learning, ML) \u7c97\u7565\u7684\u6765\u8bf4\u5c31\u662f\u901a\u8fc7\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u5b66\u4e60\uff0c\u5728\u4e00\u5b9a\u89c4\u5219\u4e0b\u751f\u6210\u7a0b\u5e8f\uff0c\u5bf9\u4e8e\u673a\u5668\u5b66\u4e60\u6765\u8bf4\uff0c\u5b66\u4e60\u51fa\u6765\u7684\u8fd9\u4e2a\u201c\u7a0b\u5e8f\u201d\u7ed3\u679c\u662f\u6a21\u578b(model)\u3002

\u800c\u5982\u679c\u7528\u6765\u5b66\u4e60\u7684\u662f\u88ab\u6807\u6ce8\u8fc7\u7684\u6570\u636e(labeled data)\uff0c\u5219\u79f0\u4e4b\u4e3a(\u6709)\u76d1\u7763(\u7684)\u5b66\u4e60(supervised learning)\u3002

\u65e0\u8bba\u662f\u673a\u5668\u5b66\u4e60\u6280\u672f\u8fd8\u662f\u4f20\u7edf\u7684\u7f16\u7a0b\u6280\u672f\uff0c\u90fd\u662f\u4e3a\u4e86\u89e3\u51b3\u67d0\u4e2a\u95ee\u9898\u800c\u5b58\u5728\u7684\u3002\u800c\u89e3\u51b3\u4e00\u4e2a\u590d\u6742\u95ee\u9898\u2014\u2014\u6b63\u5982\u6211\u4eec\u4e4b\u524d\u5f3a\u8c03\u7684\u2014\u2014\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u62bd\u8c61\u5efa\u6a21\u3002\u800c\u4e00\u4e2a\u673a\u5668\u5b66\u4e60\u5b66\u4e60\u51fa\u6765\u7684\u6a21\u578b(model)\u53ef\u4ee5\u88ab\u89c6\u4f5c\u4e00\u4e2a\u5173\u4e8e\u8f93\u5165\u548c\u8f93\u51fa\u7684\u63cf\u8ff0\uff1a

\\[ \\text{Input } X \\rightarrow f_w \\rightarrow \\text{Output } Y \\]

\u800c\u6839\u636e\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u8f93\u51fa\u201d\u7684\u4e0d\u540c\uff0c\u6309\u7167\u8fde\u7eed\u4e0e\u79bb\u6563\uff0c\u6211\u4eec\u5c06\u6240\u89e3\u51b3\u7684\u95ee\u9898\u533a\u5206\u4e3a\u56de\u5f52(regression)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u8fde\u7eed\u7684\u6570\u503c\uff09\u548c\u5206\u7c7b(classification)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u79bb\u6563\u7684\u6807\u7b7e\uff09\uff0c

\u66f4\u5177\u9898\u7684\u6765\u8bf4\uff0c\u4e00\u822c\u673a\u5668\u5b66\u4e60\u7684 pipeline \u662f\u8fd9\u6837\u7684\uff1a

  1. \u5bf9\u95ee\u9898\u8fdb\u884c\u5b9a\u4e49\uff1b
  2. \u6536\u96c6\uff08\u548c\u5904\u7406\uff09\u7528\u6765\u5b66\u4e60\u7684\u6570\u636e\u96c6\uff1b
  3. \u5bf9\u95ee\u9898\u5efa\u6a21\uff0c\u5e76\u8bbe\u8ba1\u6a21\u578b\uff1b
    • \u62bd\u8c61\u5730\u6765\u8bf4\u662f\u51b3\u5b9a\u8f93\u5165\u8f93\u51fa\u7684\u5173\u8054\u5f62\u5f0f\uff1b
  4. \u6a21\u578b\u8bad\u7ec3\uff1b
    • \u8bbe\u8ba1\u635f\u5931\u51fd\u6570\u6765\u8bc4\u4f30\u6a21\u578b\u7684\u6548\u679c\uff1b
    • \u7528\u4f18\u5316\u6280\u672f\u6c42\u89e3\u4f7f\u6a21\u578b\u6548\u679c\u6700\u597d\u7684\u53c2\u6570\uff1b
  5. \u6a21\u578b\u6d4b\u8bd5\uff1b
    • \u4e5f\u5c31\u662f\u7528\u6d4b\u8bd5\u6570\u636e\u96c6\u6d4b\u8bd5\u5b83\u7684\u8868\u73b0\uff1b
"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u7ebf\u6027\u5206\u7c7b\u5668","title":"\u7ebf\u6027\u5206\u7c7b\u5668","text":"

\u7ebf\u6027\u5206\u7c7b\u5668(Linear Classifier)\u6700\u65e9\u53eb\u611f\u77e5\u673a(Perceptron)\uff0c\u5b83\u662f ML \u4e2d\u4e00\u4e2a\u6700\u7b80\u5355\u4e5f\u662f\u6700\u57fa\u672c\u7684\u6784\u6210\u3002

\\[ y = f(x, W) = W x + b \\\\ \\begin{aligned} & \\text{where } x \\text{ means inputs, such as image, } \\\\ & y \\text{ means outputs, such as the class of the object, } \\\\ & \\text{and } W \\text{ is the parameters matrix.} \\end{aligned} \\]

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u6570\u5b66\u63cf\u8ff0\u5c31\u89e3\u91ca\u4e86\u5b83\u4e3a\u4ec0\u4e48\u53eb\u300c\u7ebf\u6027\u300d\u5206\u7c7b\u5668\u3002

\u66f4\u8be6\u7ec6\u7684\u89e3\u91ca\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\uff0c\u53ef\u4ee5\u67e5\u770b cs231n \u7b14\u8bb0\u7684\u76f8\u5173\u4ecb\u7ecd

\u4f55\u65f6\u8f93\u51fa\u6bd4\u8f83\u5927\uff1f

\u8f93\u51fa\u5927\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u67d0\u884c\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u5206\u7c7b\u5230\u8fd9\u4e00\u884c\u7684\u53ef\u80fd\u6027\u66f4\u5927\uff0c\u4e00\u822c\u662f \\(x\\) \u4e0e \\(W\\) \u7684\u5bf9\u5e94\u884c\u76f8\u4f3c\u65f6\u3002

\u8fd9\u91cc\u6709\u4e00\u4e2a\u7279\u6b8a\u7684\u6982\u5ff5\u662f\u51b3\u7b56\u8fb9\u754c(Decision Boundary)\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training","title":"Training","text":"

\u5982\u4f55\u627e\u5230\u6700\u4f73\u7684\u53c2\u6570\uff1f

\u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u7f3a\u70b9

\u8bc4\u4ef7\u4e24\u4e2a\u6982\u7387\u5206\u5e03\u662f\u5426\u76f8\u4f3c\uff0c\u5e38\u7528\u7684\u662f\u4ea4\u53c9\u5dee\uff0ccross entropy as loss function

\\[ S \\sim S(y) \\\\ D(S,L) = -\\sum_i L_i \\log S_i \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#neural-networks","title":"Neural Networks","text":"

\u7ebf\u6027\u5206\u7c7b\u6700\u65e9\u53eb\u611f\u77e5\u673a\uff0cperceptron

\u7136\u800c\u6709\u4e9b\u5206\u7c7b\u53ef\u80fd\u662f\u975e\u7ebf\u6027\u7684\uff0c\u5982\u56fe

\u8fd9\u79cd\u65f6\u5019\u6211\u4eec\u53ef\u80fd\u4f1a\u4f7f\u7528\u4e00\u4e2a\u51fd\u6570\u5c06\u5b83\u4e0e\u7ebf\u6027\u5206\u7c7b\u6620\u5c04\u8d77\u6765\uff0c\u8fd9\u79cd\u51fd\u6570\u4e00\u822c\u53eb\u6fc0\u6d3b\u51fd\u6570 activation functions

\u591a\u7c7b\u522b\u8868\u793a

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u591a\u5c42\u611f\u77e5\u673a-multi-layer-perceptron","title":"\u591a\u5c42\u611f\u77e5\u673a Multi-layer perceptron","text":"\\[ \\sigma \\text{ is a nonlinear transform.} f(x) = \\sigma(w^T x + b) \\]

hidden layers

\u5982\u679c\u6ca1\u6709\u975e\u7ebf\u6027\u6fc0\u6d3b\u51fd\u6570\uff0c\u6700\u540e\u7b49\u4ef7\u4e8e\u4e00\u4e2a\u5355\u5c42\u7ebf\u6027\u611f\u77e5\u673a

Neural Networks

\u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc Deep Neural Networks \u5c42\u6570\u591a =>

\u5168\u8fde\u5c42 Fully connected layer

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#convolution-neural-networks","title":"Convolution Neural Networks","text":"

What is CNN? What is convolution? Layer Types: 1. Convolutional layer 2. Pooling layer 3. Fully-connected layer

\u5728 CV \u4e2d\uff0c\u6709\u65f6\u5019\u56fe\u50cf\u7684\u5c40\u90e8\u7279\u5f81\u5c31\u591f\u6211\u4eec\u8fdb\u884c\u5206\u7c7b\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u80fd\u4e0d\u9700\u8981\u8ba9\u7f51\u7edc\u8fde\u4e0a\u6240\u6709\u7684\u90e8\u5206\u3002

1 \u4e2a\u7f51\u7edc -> 3 \u4e2a\u7f51\u7edc\uff0cwith weight sharing\uff0c\u56e0\u4e3a 3 \u4e2a\u7f51\u7edc\u90fd\u662f\u7528\u6765\u8bc6\u522b\u540c\u6837\u7684\u4e1c\u897f\u7684\uff0c\u6216\u8005\u8bf4\u529f\u80fd\u76f8\u540c\u3002

\\[ y = \\sigma(x \\otimes w + b) \\]

padding & pooling & stride

\u597d\u5904\u662f\u53c2\u6570\u6bd4\u5168\u8fde\u5c42\u5c11\u5f88\u591a

\u611f\u53d7\u91ce Receptive fields

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6c60\u5316\u5c42","title":"\u6c60\u5316\u5c42","text":"

\u628a\u4e0d\u540c\u5730\u996d\u7684\u7ed3\u679c\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c06\u54cd\u5e94\u56fe\u7684\u591a\u4e2a\u7ed3\u679c\u5408\u5e76\u4e3a\u540c\u4e00\u4e2a

CNN \u4e00\u822c\u8fc7\u7a0b

P71

CNN \u7ecf\u5178\u7f51\u7edc\uff1aAlexNet, VGG,

\u4e0d\u540c channel \u5355\u72ec\u505a ----> Batch Normalization

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training-neural-networks","title":"Training Neural Networks","text":"

\u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u201c\u6700\u4f73\u201d\u7684\u7f51\u7edc\uff0c\u4f46\u662f\u5982\u4f55\u5bfb\u627e\u5176\u4e2d\u6700\u597d\u7684\u53c2\u6570\u5219\u662f\u6709\u4e00\u7cfb\u5217\u4e25\u683c\u7684\u65b9\u6cd5\u3002

loss function

optimization

\u6700\u5c0f\u5316 loss function\uff0c\u4f7f\u7528\u5404\u79cd\u68af\u5ea6\u4e0b\u964d

This training method is called \u540e\u5411/\u53cd\u5411\u4f20\u64ad back-propagation

\\[ \\mathbf{w}^{t+1} = \\mathbf{w}^t - \\eta_t\\frac{\\partial L}{\\partial \\mathbf{w}}\\mathbf{w}^t \\]

\u6c42\u68af\u5ea6-\u300b\u590d\u5408\u51fd\u6570\u6c42\u5bfc-\u300b\u94fe\u5f0f\u6cd5\u5219

\u5bf9\u4e8e\u73b0\u5728\u7684\u6df1\u5ea6\u5b66\u4e60\u5de5\u5177\u6765\u8bf4\uff0c\u53cd\u5411\u4f20\u64ad\u4e0e\u6c42\u5bfc\u7b49\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u81ea\u52a8\u5b9e\u73b0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u597d\u7f51\u7edc\u7ed3\u6784\u548c loss function \u5373\u53ef\uff0c\u800c\u4f18\u5316\u90e8\u5206\u5219\u53ef\u4ee5\u901a\u8fc7\u5de5\u5177\u5b9e\u73b0\u3002

\u968f\u673a\u68af\u5ea6\u4e0b\u964d\uff0c\u968f\u673a\u7684\u91c7\u6837\u4e00\u90e8\u5206\u70b9\uff0c\\(\\Omega\\) @P86\uff0c

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#architecture--hyper-parameters","title":"Architecture & hyper-parameters","text":"

\u65e0\u6cd5\u901a\u8fc7\u90a3\u4e9b\u80fd\u591f\u81ea\u52a8\u8ba1\u7b97\u7684\u6743\u91cd\uff0c\u6d89\u53ca\u5230\u7f51\u7edc\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u6210\u4e3a\u8d85\u53c2\u6570 hyper-parameters\u3002

\u65b9\u6cd5\uff1a\u8bd5\uff08\u5f53\u7136\u4e0d\u662f\u7528\u624b\u8bd5x\uff09\uff01

How to prevent overfitting? \u2022 Cross validation and early stop \u2022 Regularization or dropout \u2022 Data augmentation

\u5982\u4f55\u8bc4\u4ef7\u7ed3\u679c\u201c\u597d\u201d\u8fd8\u662f\u201c\u4e0d\u597d\u201d\uff1f

\u5982\u4f55\u5206\u5272\u6570\u636e\u96c6\uff1f(cross validation: train & validation & test)

Data split idea * 3

P89\uff08cs231n also\uff09

\u4e00\u79cd\u8fdd\u548c\u611f\uff0cvalidation \u53c2\u4e0e\u81ea\u52a8\u53cd\u9988\uff0ctest \u96be\u9053\u4e0d\u7b97\u4e00\u79cd\u4eba\u4e3a\u53cd\u9988\u5417\uff1f

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6b63\u5219\u5316","title":"\u6b63\u5219\u5316","text":"

\u589e\u52a0\u7ea6\u675f\u4ee5\u51cf\u5c11 over fit

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#dropout","title":"Dropout","text":"

\u8bad\u7ec3\u65f6\u5ffd\u7565\u4e00\u90e8\u5206\u54cd\u5e94\uff0c\u6d4b\u8bd5\u7684\u65f6\u5019\u4ecd\u7136\u4f7f\u7528

\u65ed\u5b9d\uff1aDropout\u8bf4\u7684\u7b80\u5355\u4e00\u70b9\u5c31\u662f\uff1a\u6211\u4eec\u5728\u524d\u5411\u4f20\u64ad\u7684\u65f6\u5019\uff0c\u8ba9\u67d0\u4e2a\u795e\u7ecf\u5143\u7684\u6fc0\u6d3b\u503c\u4ee5\u4e00\u5b9a\u7684\u6982\u7387p\u505c\u6b62\u5de5\u4f5c\uff0c\u8fd9\u6837\u53ef\u4ee5\u4f7f\u6a21\u578b\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u56e0\u4e3a\u5b83\u4e0d\u4f1a\u592a\u4f9d\u8d56\u67d0\u4e9b\u5c40\u90e8\u7684\u7279\u5f81\u3002

\u7edf\u8ba1\u4e0a\u7b49\u6548\u4e8e L2

\u6211\uff1a\u56e0\u4e3a\u6bcf\u4e2a\u70b9\u90fd\u6709\u53ef\u80fd\u6982\u7387\u6027\u5931\u6548\uff0c\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u8fd9\u4e5f\u8981\u6c42\u67d0\u4e00\u4e2a\u7279\u5f81\u7684contributes\u4f1a\u88ab\u201c\u5206\u644a\u201d\u5f00\u6765\uff0c\u6240\u4ee5\u6548\u679c\u4e0a\u6709\u70b9\u50cfL2\u7684\u90a3\u79cd\u8ba9\u6743\u91cd\u66f4\u5c0f

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6570\u636e\u589e\u5e7f-data-augmentation","title":"\u6570\u636e\u589e\u5e7f Data augmentation","text":"

overfit \u53ca\u6570\u636e\u592a\u5c11\u8bad\u7ec3\u592a\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5bf9\u5df2\u6709\u6570\u636e\u53d8\u6362\u6765\u201c\u9020\u201d\u4e00\u4e9b\u6570\u636e\u51fa\u6765\uff0c\u6bd4\u5982\u7ffb\u8f6c\u3001\u62c9\u4f38\u2026\u2026

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#batch-normalization","title":"Batch Normalization","text":"

\u5bf9\u591a\u4e2a channel \u5bf9\u7ed3\u679c\u8fdb\u884c\u5f52\u4e00\u5316\u64cd\u4f5c

Reduce internal covariate shift\uff0c\u4ee5\u51cf\u5c11 channal \u4e4b\u95f4\u7684\u53d1\u6563\u6027\uff0c\u66f4\u7a33\u5b9a\u66f4\u6536\u655b

For more: https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#deep-learning-frameworks","title":"Deep Learning Frameworks","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec09/#network-architectures","title":"Network Architectures","text":"

\u65e9\u671f\u4e0d\u53d7\u6b22\u8fce\uff1a\u6548\u679c\u5dee & \u53ef\u63a5\u53d7\u6027\u5dee

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#resnet","title":"ResNet","text":"

\u5047\u8bbe\u6570\u636e\u91cf\u591f\u5927\uff0c\u662f\u4e0d\u662f\u5c42\u6570\u8d8a\u591a\u8d8a\u597d\uff1f

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#densenet","title":"DenseNet","text":"

\u66f4\u52a0\u7a20\u5bc6\u7684\u94fe\u63a5\uff0c\u672c\u5c42\u53d6\u51b3\u4e8e\u524d\u9762\u6240\u6709\u5c42

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#mobilenets","title":"MobileNets","text":"

\u901f\u5ea6\u5feb

NAS: Neural Architecture Search \u81ea\u52a8\u5316\u7f51\u7edc\u7ed3\u6784\u8bbe\u8ba1\uff0clearning to learn

"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#why-deep-learning-is-powerful","title":"why deep learning is powerful?","text":"

End-to-end learning\uff0c\u7aef\u5230\u7aef\u5b66\u4e60

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/","title":"Lecture 10 | Recognition","text":"

\u7ea6 1509 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

\u4e8c\u7ef4\u56fe\u50cf\u8bc6\u522b(Recognition)\u4e0b\u6709\u5f88\u591a\u4efb\u52a1\uff0c\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#semantic-segmentation","title":"Semantic segmentation","text":"

\u6bcf\u4e2a\u50cf\u7d20\u5c5e\u4e8e\u54ea\u4e2a\u7c7b\u522b\u8fd9\u79cd\u4fe1\u606f\u53eb\u8bed\u4e49\u4fe1\u606f\u3002

\u6700\u6734\u7d20\u7684\u505a\u6cd5\u662f sliding window\uff0c\u53d6\u51fa\u4e00\u4e2a window \u653e\u8fdb\u5206\u7c7b\u673a\u5f97\u5230\u7ed3\u679c\uff0c\u4f46\u662f\u663e\u7136\u7531\u4e8e window \u5305\u542b\u7684\u4fe1\u606f\u592a\u5c11\uff0c\u800c\u4e14\u6548\u7387\u592a\u4f4e\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u975e\u5e38 naive\u3002

\u73b0\u5728\u6807\u51c6\u7684\u505a\u6cd5\u662f\u5168\u5377\u79ef\u7f51\u7edc(Fully Convolutional Network)

\u5c40\u9650\u6027\uff1a

\u6539\u8fdb\uff1a

\u4f46\u662f\u7531\u4e8e\u6211\u4eec\u6700\u540e\u5e0c\u671b\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u548c\u539f\u56fe\u4e00\u6837\u5927\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6709\u5411\u4e0b\u91c7\u6837\u5c31\u80af\u5b9a\u4f1a\u6709\u5411\u4e0a\u91c7\u6837\uff08\u56de\u5fc6\uff1a\u63d2\u503c\uff09\u3002

\u56fe\u50cf\u5411\u4e0a\u91c7\u6837\u4ee5\u540e\u53d8\u5927\u4ee5\u540e\u53c8\u5377\u79ef\uff0c\u8fd9\u4e2aTransposed convolution

ppt P13

\u4f46\u662f\u5f88\u663e\u7136\uff0c\u5728\u53d8\u5c0f\u53d8\u5927\u7684\u8fc7\u7a0b\u4e2d\u80af\u5b9a\u6709\u4fe1\u606f\u635f\u5931\u3002\u6240\u4ee5\u73b0\u5728\u4e00\u4e2a\u6bd4\u8f83\u6d41\u884c\u7684\u505a\u6cd5\u662f U-Net\uff0c\u4e5f\u5c31\u662f\u5927\u91cf\u5e94\u7528 skip-connection\u3002

ppt P14 https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

DeepLab P15

\u8003\u8651\u76f8\u90bb\u50cf\u7d20\u4e4b\u95f4\u7684\u5173\u8054\u6027\uff0c\u4f7f\u7528 CRF(Conditional random field) \u4f18\u5316 P16

\u9a6c\u53ef\u592b\u968f\u673a\u573a\uff1f

Unary potential: \u4f53\u73b0\u81ea\u5df1\u7684\u7279\u6027

Pairwise potential: \u4f53\u73b0\u5173\u8054\u6027

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#\u8861\u91cf\u6307\u6807-evaluation-metric-per-pixel-intersection-over-union-iou","title":"\u8861\u91cf\u6307\u6807 Evaluation metric: Per-pixel Intersection-over-union (IoU)","text":"

\\(IoU=\\frac{ \\text{Ground truth \u548c prediction \u7684\u4ea4\u96c6\u9762\u79ef} }{ \\text{Ground truth \u548c prediction \u7684\u5e76\u96c6\u9762\u79ef} }\\) P19

mIoU \u6307\u7684\u662f\u5206\u51fa\u6765\u7684\u4e0d\u540c\u7c7b\u522b\u7684 mean IoU

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#object-detection","title":"Object detection","text":"

Bounding box (bbox)

\u90a3\u4e48\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u5148\u5047\u8bbe\u4e00\u5171\u53ea\u6709 1 \u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6b64\u65f6\u548c\u5206\u7c7b\u4efb\u52a1\u662f\u975e\u5e38\u63a5\u8fd1\u7684\uff0c\u53ea\u9700\u8981\u518d\u989d\u5916\u6c42\u89e3\u4e00\u4e2a\u7a97\u53e3\u4f4d\u7f6e\u5373\u53ef\u3002

\u90a3\u4e48\u591a\u4e2a\u7a97\u53e3\u5462\uff1f

\u89e3\u51b3\u529e\u6cd5\u8fd8\u662f\u6ed1\u52a8\u7a97\u53e3\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e4b\u524d\u7684\uff0c\u6211\u4eec\u73b0\u5728\u91c7\u7528\u7684\u65b9\u6cd5\u57fa\u672c\u4e0a\u4e5f\u662f\u57fa\u4e8e\u6ed1\u52a8\u7a97\u53e3\u5c55\u5f00\u7684\u3002\u800c\u5728\u8fd9\u79cd\u8bed\u5883\u4e0b\uff0c\u8fd9\u6837\u7684\u4e00\u4e2a\u6ed1\u52a8\u7a97\u53e3\u88ab\u79f0\u4e3a\u4e00\u4e2a\u63d0\u8bae(proposal)\u3002

\u4f46\u662f\u663e\u7136\uff0c\u4f7f\u7528\u6700\u6734\u7d20\u7684\u6ed1\u52a8\u7a97\u53e3\u4f1a\u5bfc\u81f4\u201c\u63d0\u8bae\u201d\u8fc7\u591a\uff0c\u5bfc\u81f4\u6548\u7387\u592a\u4f4e\u3002\u6240\u4ee5\u6211\u4eec\u8981\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002

\u4e00\u822c\u8fd9\u4e9b\u4f18\u5316\u7684\u65b9\u6cd5\u90fd\u662f\u542f\u53d1\u5f0f(heuristics)\u7684\u505a\u6cd5\uff0c\u4f8b\u5982 over-segmentation\uff0c

\u800c\u8fd9\u7c7b\u65b9\u6cd5\u5c31\u662f R-CNN (region proposal & CNN) P36

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#evaluation-metric","title":"Evaluation metric","text":"

\u5bf9\u4e8e\u5355\u4e2a\u7269\u4f53\uff0c\u4ecd\u7136\u662f IoU

P39

\u4e3a\u4e86\u8bc4\u4ef7\u9884\u6d4b\u7ed3\u679c\u7684\u6b63\u786e\u6027\uff0c\u6211\u4eec\u9700\u8981\u4e3a\u5b83\u8bbe\u7f6e\u4e00\u4e2a\u9608\u503c\u3002

\u800c\u5bf9\u4e8e\u591a\u4e2a\u7269\u4f53\uff0c\u5219\u4e0d\u90a3\u4e48\u7b80\u5355\uff1aP42

\uff08\u56de\u5fc6\u7edf\u8ba1\u5b66\u5185\u5bb9\uff09

positive: \u80af\u5b9a\u7684\u5047\u8bbe P

negative: \u5426\u5b9a\u7684\u5047\u8bbe N

true: \u5047\u8bbe\u662f\u6210\u7acb\u7684 T

false: \u5047\u8bbe\u662f\u9519\u8bef\u7684 F

\u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u4e24\u4e2a\u6807\u51c6\u6765\u8054\u5408\u5224\u65ad\u6548\u679c\u3002

\u7cbe\u5ea6 Precision = TP/(TP+FP)\uff1a\u63cf\u8ff0\u7ed9\u5b9a\u7684 bbox \u91cc\u6709\u591a\u5c11\u662f\u6b63\u786e\u7684

\u53ec\u56de\u7387 Recall = TP/(TP+FN)\uff1a\u63cf\u8ff0\u6240\u6709\u5bf9\u8c61\u4e2d\uff0c\u88ab\u6211\u4eec\u8bc6\u522b\u51fa\u6765\u7684\u6709\u591a\u5c11

\u4e00\u822c\u6765\u8bf4\uff0c\u8fd9\u4fe9\u4e1c\u897f\u6709\u4e00\u4e2a trade-off\u3002\uff08\u6982\u7edf\u91cc\u5e94\u8be5\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\uff09

https://en.wikipedia.org/wiki/Precision_and_recall

\u800c\u6700\u7ec8\u7684\u8861\u91cf\u65b9\u6cd5\uff0c\u662f Mean Average Precision (mAP)\u3002

  1. Run object detector on all test images
  2. For each category, compute Average Precision
  3. (AP) = area under Precision vs Recall Curves

PPT p52

\u5148\u505a\u6240\u6709\u7c7b\u522b\u7684 AP\uff0c\u7136\u540e\u53d6\u5e73\u5747\u5c31\u662f mAP

mAP@threshold = ...

COCOmAP = average(mAP@threshold_i), for i \\in {0.5, 0.55, 0.6, \u2026, 0.95}

Non-Max Suppression

\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u6211\u6709\u53ef\u80fd\u8bc6\u522b\u51fa\u597d\u51e0\u4e2a\u8bc6\u522b\u540c\u4e00\u4e2a\u7269\u4f53\u7684 bbox\uff0c\u6240\u4ee5\u6211\u53ef\u4ee5\u8003\u8651\u8bbe\u8ba1\u4e00\u79cd\u7b97\u6cd5\u51cf\u5c11\u8fd9\u79cd\u8bc6\u522b\u3002

\u7b80\u5355\u6765\u8bf4\uff0c\u505a\u6cd5\u5c31\u662f\u627e score \u6700\u5927\u7684\uff0c\u7136\u540e\u770b\u5176\u4ed6 bbox \u548c\u8fd9\u4e2a bbox \u7684 IoU\uff0c\u5927\u4e8e\u4e00\u5b9a\u6743\u91cd\u65f6\uff0c\u8ba4\u4e3a\u5b83\u4eec\u662f\u4e00\u81f4\u7684\uff0c\u5c31\u53ef\u4ee5\u628a\u8f83\u5c0f\u7684\u90a3\u4e2a\u5220\u6389\u4e86\u3002

Fast R-CNN

RoI pool \uff08\u6ca1\u542c\u61c2\uff0c\u6574\u7406\u7684\u65f6\u5019\u518d\u4ed4\u7ec6\u5b66\u4e00\u4e0b\uff09

Faster R-CNN

\u7528\u7f51\u7edc\uff08Region Proposal Network, RPN\uff09\u751f\u6210\u63d0\u8bae\u9009\u6846\uff0c

\u951a\u70b9 anchor\uff1a

\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\uff0c\u951a\u70b9\u662f\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\u7684\u9884\u5b9a\u4e49\u6846\u6216\u611f\u5174\u8da3\u533a\u57df\u3002\u951a\u70b9\u80fd\u591f\u5e2e\u52a9\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u8bc6\u522b\u56fe\u50cf\u4e2d\u5b58\u5728\u7684\u7269\u4f53\u53ca\u5176\u4f4d\u7f6e\uff0c\u4ece\u800c\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u7684\u51c6\u786e\u6027\u3002\u951a\u70b9\u901a\u5e38\u7531\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u957f\u5bbd\u6bd4\u548c\u5c3a\u5ea6\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u56e0\u7d20\u51b3\u5b9a\u4e86\u5b83\u4eec\u7684\u5927\u5c0f\u548c\u5f62\u72b6\u3002\u5728\u8bad\u7ec3\u671f\u95f4\uff0cCNN\u5b66\u4e60\u9884\u6d4b\u76f8\u5bf9\u4e8e\u8fd9\u4e9b\u951a\u70b9\u7684\u7269\u4f53\u7684\u4f4d\u7f6e\u548c\u5927\u5c0f\u3002\u4f7f\u7528\u951a\u70b9\u53ef\u4ee5\u68c0\u6d4b\u4e0d\u540c\u5927\u5c0f\u548c\u5bbd\u9ad8\u6bd4\u7684\u7269\u4f53\uff0c\u5e76\u6709\u52a9\u4e8e\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u5728\u590d\u6742\u573a\u666f\u4e0b\u7684\u51c6\u786e\u6027\u3002----chatGPT

RPN \u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u628a\u751f\u6210\u9009\u6846\u95ee\u9898\u8f6c\u5316\u4e3a\u6253\u5206\u95ee\u9898\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u7ed9\u6bcf\u4e2a\u50cf\u7d20\u6253\u5728\u8be5\u4f4d\u7f6e\u6709\u4e00\u4e2a\u7279\u5b9a size \u7684\u6846\u7684\u53ef\u80fd\u6027\u7684\u5206\u3002

\u4e8c\u9636\u6bb5\u5bf9\u8c61\u68c0\u6d4b\u7b26 two-stage object detector

P76 \u5404\u79cd\u65b9\u6cd5\u7684\u6548\u679c\u6392\u5e8f\u3002

\u4e00\u79cd\u5bf9 two-stage object detector \u7684\u6539\u8fdb\u662f single-stage object detector\uff0c\u5927\u6982\u5c31\u662f\u5728\u505a RPN \u7684\u540c\u65f6\u53bb\u9884\u6d4b\u8fd9\u4e2a\u6846\u6807\u8bb0\u7684\u662f\u67d0\u4e2a\u7c7b\u522b\u7684\u6982\u7387\u3002

single-stage \u7684\u4ee3\u8868\u6027\u5de5\u4f5c\uff1aYOLO

two-stage v.s. single-stage

\u4f46\u662f\u6211\u4eec\u4e0a\u9762\u7684\u5de5\u4f5c\u90fd\u6ca1\u8003\u8651\u5c3a\u5ea6\u53d8\u5316\uff0cFeature pyramid network \u5728\u8fd9\u65b9\u9762\u63d0\u51fa\u4e86\u89e3\u51b3\u65b9\u6848\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#instance-segmentation","title":"Instance segmentation","text":"

Faster R-CNN + additional head

Mask R-CNN

Deep snake

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#panoptic-segmentation","title":"Panoptic segmentation","text":"

Microsoft COCO dataset

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#human-pose-estimation","title":"Human pose estimation","text":"

keypoints

represent joint location as the heatmap // hourglass networks

Top-down: - Detect humans and detect keypoints in each bbox - Example: Mask R-CNN - \u6700\u5927\u7684\u95ee\u9898\u8fd8\u662f\u6162

Bottom-up: - Detect keypoints and group keypoints to form humans - Example: OpenPose \u5148\u627e kpts\uff0c\u518d\u5229\u7528 Affinity Fields \u628a\u5c5e\u4e8e\u4e00\u4e2a\u4eba\u7684 kpts \u5408\u5728\u4e00\u8d77\u3002

Top-down is generally more accurate Bottom-up is faster\uff0c\u800c\u4e14\u5728\u906e\u6321\u60c5\u51b5\u4e0b\u4e5f\u6709\u5b83\u7684\u4f18\u52bf

"},{"location":"cour_note/D2QD_Intro2CV/Lec10/#optical-flow","title":"Optical flow","text":"

\u5149\u6d41

video classification

\u4e00\u4e2a\u505a\u6cd5\u662f\u628a\u89c6\u9891\u5f53\u4f5c\u4e00\u4e2a 3d \u56fe\u50cf\u53bb\u505a\uff0c\u5373 3D CNN\u3002\u4f46\u662f\u6570\u636e\u7ef4\u5ea6\u975e\u5e38\u5927\u3002

Temporal action localization

Spatial-temporal detection

\u505a\u6cd5\u4e5f\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a 3D \u7684 R-CNN \u53bb\u505a\u3002

Multi-object tracking

\u5bf9\u6bcf\u4e00\u5e27\u505a\u7269\u4f53\u68c0\u6d4b\uff0c\u7136\u540e\u5728\u6bcf\u4e00\u5e27\u4e4b\u95f4\u505a\u5173\u8054\u5339\u914d\u3002

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/","title":"Lecture 11 | 3D Deep Learning","text":"

\u7ea6 385 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

Deep Learning for 3D reconstruction

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#feature-matching","title":"Feature matching","text":"

recap: SfM // Colmap

use deep learning to improve feature matching

\u4f20\u7edf\u65b9\u6cd5\u7684\u7f3a\u70b9\u5c31\u662f\u56e0\u4e3a\u8fd9\u4e9b\u65b9\u6cd5\u90fd\u662f handcrafted \u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7528 deep learning \u6765\u589e\u5f3a\u6548\u679c\u3002

example: SuperPoint\u3001SuperGlue

\u63cf\u8ff0\u503c\uff1a

  1. contrastive loss
  2. triplet loss

\u5b9e\u9645\u4e0a\u672c\u8d28\u7c7b\u4f3c\uff0c\u6548\u679c\u76f8\u8fd1

\u4e3b\u6d41\u7528 MVS \u6765\u751f\u6210\u8bad\u7ec3\u6570\u636e

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#object-pose-estimation","title":"Object Pose Estimation","text":"

\u672c\u8d28\u4e0a\u662f\u5728\u8ba8\u8bba\u7269\u4f53\u5728\u91cd\u5efa\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u548c\u76f8\u673a\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u7684\u53d8\u6362\u5173\u7cfb\u3002

PnP

\u53ef\u662f\u96be\u5c31\u96be\u5728\uff0c\u5982\u4f55\u5bfb\u627e 3D-2D \u7684\u5173\u7cfb\u5462\uff1f

\u4e00\u4e2a idea \u662f\uff0c\u9996\u5148\u5f97\u5230\u4e00\u4e2a\u8f83\u597d\u7684\u91cd\u5efa\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u91cd\u5efa\u6a21\u578b\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4ece\u522b\u7684\u601d\u8def\u6765\u770b\u8fd9\u4ef6\u4e8b\u3002

pose refinement methods

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#human-pose-estimation","title":"Human Pose Estimation","text":"

(Markerless) MoCap

Monocular 3D Human Pose Estimation (eg. Vnet)

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#depth-estimation","title":"Depth Estimation","text":"

MVSNet

MVS

\u79bb\u6563\u8868\u793a\u3001\u9690\u5f0f\u8868\u793a\uff08\u7528\u4e00\u4e2a\u7f51\u7edc\u6765\u8868\u793a\u4e00\u4e2a\u51fd\u6570 Implicit Neural Representations\uff0c\u4ee3\u8868\uff1aNeRF\uff09

Replacing density field in NeRF by SDF: NeuS

"},{"location":"cour_note/D2QD_Intro2CV/Lec11/#single-image-to-3d","title":"Single Image to 3D","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec11/#deep-learning-for-3d-understanding","title":"Deep learning for 3D understanding","text":"

\u8ba1\u7b97\u5f00\u9500\u5f88\u5927

\u8fd1\u51e0\u5e74\u63d0\u51fa\u7684\u89e3\u51b3\u65b9\u6848\uff1aSparse ConvNets

Octree \u516b\u53c9\u6811\uff0c\u7a7a\u95f4\u5212\u5206

\u7a00\u758f\u5377\u79ef\uff0c\u53ea\u6709\u6709\u503c\u7684\u5730\u65b9\u8fdb\u884c\u5377\u79ef

\u7531\u4e8e\u5377\u79ef\u7b49\u64cd\u4f5c\u662f\u5efa\u7acb\u5728\u7f51\u683c\u4e0a\u7684\uff0c\u800c\u70b9\u4e91\u5e76\u4e0d\u5b9a\u4e49\u5728\u7f51\u683c\u4e0a\uff0c\u6240\u4ee5\u5bf9\u70b9\u4e91\u8fdb\u884c\u5377\u79ef\u5219\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u65b9\u6cd5\u3002

\u4e00\u4e2a\u76f8\u5173\u5de5\u4f5c\u662f PointNet\uff0c\u4e13\u95e8\u7528\u5728\u5bf9\u70b9\u4e91\u4e0a\u3002\u8fd8\u6709 PointNet++

3D Semantic Segmentation

3D Object Detection

3D Instance Segmentation

PointRCNN

Frustum PointNets

\u6570\u636e\u96c6\uff1aShapeNet, PartNet,SceneNet , ScanNet

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/","title":"Lecture 12 | Computational Photography 1","text":"

\u7ea6 253 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

What's \u8ba1\u7b97\u6444\u5f71\uff1f

...

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#high-dynamic-range-imaging-hdr","title":"High Dynamic Range Imaging (HDR)","text":"

\u6211\u4eec\u5e0c\u671b\u4eae\u7684\u548c\u6697\u7684\u5730\u65b9\u7ec6\u8282\u90fd\u5f88\u4e30\u5bcc

\u66dd\u5149 exposure = Gain\u589e\u76ca * Irradiance\u8f90\u7167\u5ea6 * Time\u66dd\u5149\u65f6\u95f4

\u5206\u522b\u53d6\u51b3\u4e8e\u2026\u2026

Dynamic range

The ratio between the largest and smallest values of a certain quantity

HRD: \u4e0d\u540c\u4eae\u5ea6\u90fd\u62cd\u4e00\u4e9b\uff0c\u7136\u540e\u5408\u6210

12 to 8 -> tone mapping

Gamma compression

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#deblurring","title":"Deblurring","text":"

\u6a21\u7cca\u7684\u4e24\u4e2a\u4e3b\u8981\u539f\u56e0\uff1adefocus and motion blur

blurred image = clear image * blur kernel

deblurring = deconvolution

inverse filter

wiener filter

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#colorization","title":"Colorization","text":"

\u6700\u5173\u952e\u7684\u95ee\u9898\u662f\uff0c\u5982\u4f55\u51b3\u5b9a\u4e0a\u7684\u989c\u8272

\u4e3b\u8981\u6709\u4e24\u7c7b\u65b9\u6cd5\uff1a

  1. sample-based colorization
  2. interactive colorization
"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#sample-based","title":"Sample-based","text":"

...

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#interactive","title":"Interactive","text":"

...

\u5bf9\u4e8e\u89c6\u9891

Colorful Image Colorization

GAN (Generative Adversarial Network)

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#more-image-synthesis-tasks","title":"more Image synthesis tasks","text":"

GAN \u7684\u6539\u8fdb\uff1aCycle-GAN\uff0c\u89e3\u51b3\u4e86\u7f3a\u5c11\u6210\u5bf9\u7684\u8bad\u7ec3\u6570\u636e\u7684\u95ee\u9898

"},{"location":"cour_note/D2QD_Intro2CV/Lec12/#super-resolution","title":"Super Resolution","text":"

up sampling

bi-cubic

super resolution using GAN

"},{"location":"cour_note/D2QD_Intro2CV/Lec13/","title":"Lecture 13 | Computational Photography 2","text":"

\u7ea6 90 \u4e2a\u5b57

\u6ce8\u610f

\u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

"},{"location":"cour_note/D2QD_Intro2CV/Lec13/#image-based-rendering","title":"Image-based Rendering","text":"

rendering: from 3D models to images.

Image-based Rendering: images -> 3D Models -> novel views.

representations:

surface-based representations

volume-based representations

\u81ea\u7531\u89c6\u70b9\u89c6\u9891

"},{"location":"cour_note/D3QD_OperatingSystem/","title":"\ud83d\udc8e \u64cd\u4f5c\u7cfb\u7edf | Operating System","text":"

\u7ea6 243 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

\u8bfe\u7a0b\u4fe1\u606f

\u5206\u6570\u6784\u6210

\u7b14\u8bb0\u53c2\u8003

\u672c\u8bfe\u7a0b\u7684\u7b14\u8bb0\u4e3b\u8981\u53c2\u8003\u4e86\u5982\u4e0b\u8d44\u6599\uff1a

list

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0-brief/","title":"[\u6559\u5b66\u7248] Unit 0: \u603b\u89c8 | Overview","text":"

\u7ea6 3594 \u4e2a\u5b57 23 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 12 \u5206\u949f

\u4e24\u4e2a\u4efb\u52a1
  1. \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u4e00\u4e2a\u8f83\u4e3a\u62bd\u8c61\u7684\u4ecb\u7ecd\uff0c\u540c\u65f6\u5efa\u7acb\u8d77\u6574\u95e8\u8bfe\u7a0b\u7684\u6846\u67b6\uff0c\u65b9\u4fbf\u8bfb\u8005\u5728\u4e4b\u540e\u7684\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u80fd\u6709\u4e00\u4e2a\u6bd4\u8f83\u603b\u4f53\u7684\u8ba4\u8bc6\uff0c\u80fd\u5e26\u7740\u76ee\u7684\u53bb\u5b66\u4e60\u5177\u4f53\u7684\u77e5\u8bc6\uff1b
  2. \u4ecb\u7ecd\u4e00\u4e9b\u6bd4\u8f83\u57fa\u7840\u7684\u5185\u5bb9\uff0c\u6216\u662f\u4e00\u4e9b\u6bd4\u8f83\u7410\u788e\u3001\u4ec5\u9700\u4e86\u89e3\u7684\u5185\u5bb9\uff1b
\u201c\u5b9a\u4e49\u4e0d\u5b58\u5728\u4e86\u201d \u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0 \u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf \u2460 \u4ece\u804c\u80fd\u4e0a\u770b

\u8d44\u6e90\uff1aCPU\u3001\u5185\u5b58\u3001\u8bbe\u5907\u2026\u2026\u2026

\u2461 \u4ece\u5b58\u5728\u4e0a\u770b

\u5185\u6838(kernel)\u2014\u2014\u81ea\u8ba1\u7b97\u673a\u5f00\u673a\u540e\u5c31\u4e0d\u505c\u5728\u8fd0\u884c\uff08\u6211\u4eec\u5b66\u7684\u57fa\u672c\u90fd\u662f kernel \u7684\u4e1c\u897f\uff09\u3002

\u603b\u7ed3

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)

\u5982\u4f55\u8bc4\u4ef7\u64cd\u4f5c\u7cfb\u7edf

\u6ce8\u610f

\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

\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1 \u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784 \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)

\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

\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

\u2462 \u96c6\u7fa4\u7cfb\u7edf(Cluster System)

\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1

\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\uff0c\u968f\u7740\u9700\u6c42\u4e0d\u65ad\u590d\u6742\uff0c\u4f7f\u7528\u7684\u6280\u672f\u4e5f\u4e0d\u65ad\u53d1\u5c55\u3002

\u2460 \u6279\u5904\u7406\u7cfb\u7edf\u9636\u6bb5 \u80cc\u666f 1

\u4eba\u5de5\u901f\u5ea6\u4e25\u91cd\u9650\u5236\u4e86\u8ba1\u7b97\u673a\u7684\u5de5\u4f5c\u6548\u7387\u3002

\u2776 \u5355\u9053\u6279\u5904\u7406\u9636\u6bb5

\u4e24\u4e2a\u5173\u952e\u8bcd\uff1a\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

\u80cc\u666f 2 \u2777 \u591a\u9053\u6279\u5904\u7406\u9636\u6bb5

\u5173\u952e\u8bcd\uff1a\u201c\u591a\u9053(Multiprogramming)\u201d\uff0c\u5373\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002

\u4e0d\u8ba9 CPU \u95f2\u4e0b\u6765 -> \u8ba9\u5b83\u5148\u53bb\u505a\u4e0b\u4e00\u4ef6\u4e8b\u3002

\u5b8f\u89c2\u5e76\u53d1\uff0c\u5fae\u89c2\u4e32\u884c\u3002\uff08\u533a\u5206\u5e76\u53d1\u548c\u5e76\u884c\uff01\uff09

\u6211\u4eec\u53ef\u4ee5\u7528\u7518\u7279\u56fe\u6765\u53ef\u89c6\u5316\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u7684\u7b56\u7565\uff08\u4e00\u79cd\u5e38\u89c1\u7684\u9898\u578b\uff09\u3002\u4ee5\u4e0b\u9762\u7684\u9898\u76ee\u4e3a\u4f8b\uff0c\u6211\u4eec\u6765\u5b9e\u8df5\u4e00\u4e0b\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e24\u4e2a\u7a0b\u5e8f A \u548c B\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5206\u522b\u72ec\u7acb\u7684\u8bbe\u5907 X \u548c Y\uff0c\u4e14\u6211\u4eec\u53ea\u6709\u4e00\u4e2a CPU\uff1a

\u8bf7\u8ba8\u8bba\uff1a

  1. \u5728\u5355\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\u5148\u6267\u884c A \u518d\u6267\u884c B\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f
  2. \u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f\u8bf7\u7ed9\u51fa\u7518\u7279\u56fe\u3002

\u5728\u5355\u9053\u7a0b\u5e8f\u4e0b\u6267\u884c\uff0c\u5373\u6309\u987a\u5e8f\u6267\u884c A \u548c B\uff0cCPU \u7684\u5229\u7528\u7387\u5373\u5b9e\u9645 CPU \u4f7f\u7528\u65f6\u95f4\u9664\u4ee5\u5b8c\u6210\u4efb\u52a1\u7684\u603b\u65f6\u95f4\uff0c\u56e0\u6b64\uff1a

\\[ U = \\frac{(10+5+10)+(10+5)}{(10+5+5+10+10)+(10+10+5+5+10)} = \\frac{40}{80} = 50\\% \\]

\u800c\u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0c\u6211\u4eec\u5f97\u5230\u5982\u4e0b\u7518\u7279\u56fe\uff1a

gantt\n    title Multiprogramming\n    dateFormat ss\n    axisFormat %S\n\n    section Program A\n    CPU :a,  00,  10\n    X   :b,  10,  15\n    CPU :c,  20,  25\n    Y   :d,  25,  35\n    CPU :e,  35,  45\n\n    section Program B\n    X   :g,  00,  10\n    CPU :h,  10,  20\n    Y   :i,  20,  25\n    CPU :j,  25,  30\n    Y   :k,  35,  45

\u7531\u4e8e Mermaid \u7684\u9650\u5236\uff0c\u6211\u73b0\u5728\u662f\u628a\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u4efb\u52a1\u9519\u5f00\u753b\u7684\uff0c\u5b9e\u9645\u4e0a\u505a\u9898\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u753b\u6210\u4e24\u884c\u3002

\u8981\u70b9\u5c31\u662f\u7eb5\u5411\u4e0d\u80fd\u540c\u65f6\u51fa\u73b0\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u4f8b\u5982 18s \u65f6\u4e0d\u80fd A \u548c B \u90fd\u7528 CPU\uff0c\u6240\u4ee5 A \u9700\u8981\u7b49 B \u7528\u5b8c CPU \u518d\u4f7f\u7528\u3002

\u73b0\u5728\u6211\u4eec\u518d\u6765\u7edf\u8ba1 CPU \u7684\u5229\u7528\u7387\uff1a

\\[ U = \\frac{10+10+5+5+10}{45} = \\frac{40}{45} = 88.89\\% \\]

\u7531\u4e8e\u5f15\u5165\u4e86\u591a\u9053\u6280\u672f\uff0c\u7cfb\u7edf\u590d\u6742\u7a0b\u5ea6\u4e0a\u5347\u3002

\u80cc\u666f 3

\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

\u2461 \u5206\u65f6\u7cfb\u7edf\u9636\u6bb5

\u300a\u5341\u4e07\u4e2a\u51b7\u7b11\u8bdd\u300b\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

\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1

\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

\u5b8f\u5185\u6838

\u5b8f\u5185\u6838(Monolithic-Kernels)\u4e5f\u53eb\u5355\u5185\u6838\u6216\u5927\u5185\u6838\u3002

\u4f18\u52bf\uff1a\u64cd\u4f5c\u7cfb\u7edf\u6548\u7387\u6781\u9ad8\u3002

\u52a3\u52bf\uff1a\u5927\u91cf\u590d\u6742\u7684\u529f\u80fd\u4e92\u76f8\u8026\u5408 -> \u7ef4\u62a4\u56f0\u96be\u3001\u4e00\u635f\u5177\u635f\uff1b

\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

\u7406\u60f3\uff1a\u4f4e\u8026\u5408\uff0c\u9636\u6bb5\u6027\u5f00\u53d1\u3002

\u73b0\u5b9e\uff1a\u6548\u7387\u4f4e\u3001\u96be\u8bbe\u8ba1\u3002

\u5fae\u5185\u6838

\u5fae\u5185\u6838(Micro-Kernels)\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

\u4f18\u52bf\uff1a\u89c4\u6a21\u51cf\u5c0f,\u8026\u5408\u964d\u4f4e -> \u66f4\u65b9\u4fbf\u7ef4\u62a4\uff0c\u53ef\u9760\u6027\u589e\u52a0\u3002

\u52a3\u52bf\uff1a\u6548\u7387\u4f4e\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

\u8fa8\u6790

\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\uff1a\u4f4e\u8026\u5408 -> \u5e76\u884c\u5f00\u53d1\uff0c\u597d\u7ef4\u62a4\u3002

\u73b0\u5b9e\uff1a\u8bbe\u8ba1\u5341\u5206\u56f0\u96be\uff0c\u96be\u4ee5\u9012\u8fdb\u5f0f\u5f00\u53d1\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

\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406 \u4e2d\u65ad

\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

\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e2d\u65ad\u4e00\u65e6\u53d1\u751f\u5c31\u7acb\u523b\u88ab\u89e3\u51b3\uff0c\u4f46\u662f\u4e2d\u65ad\u5904\u7406\u4e5f\u540c\u6837\u9700\u8981\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u65ad\u4e5f\u6709\u53ef\u80fd\u4ea7\u751f\u51b2\u7a81\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u9700\u8981\u4e00\u7cfb\u5217\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

  1. \u5206\u7ea7\u673a\u5236\uff1b
  2. \u5c4f\u853d\u673a\u5236\uff1b

\u4e00\u79cd\u6bd4\u8f83\u666e\u901a\u7684\u8bbe\u8ba1\uff1a\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\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\uff08\u4e0a\u4e0b\u6587\uff09\uff0c\u4ee5\u4fbf\u5b8c\u6210\u4e2d\u65ad\u5904\u7406\u540e\u6062\u590d\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\u3002

\u8ba1\u65f6\u5668

\u8ba1\u65f6\u5668(timer)\uff1a\u56fa\u5b9a\u9891\u7387\u7684\u65f6\u949f + \u8ba1\u6570\u5668\u3002

\u7279\u6743\u6a21\u5f0f \u9694\u79bb

\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\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

\u9694\u79bb\u800c\u975e\u9694\u7edd

\u8fd9\u4e9b\u9700\u6c42\u5f80\u5f80\u662f\u53ef\u4ee5\u88ab\u62bd\u8c61\u7684\u3001\u88ab\u5c01\u88c5\u7684\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.

\u7cfb\u7edf\u8c03\u7528

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 \u7531\u201c\u73af\u5883\u201d\u63d0\u4f9b\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u8fd0\u884c\u65f6\u73af\u5883(run-time environment, RTE)\u3002

\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

\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668

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

  1. \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
  2. \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)\uff1b

\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

\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/","title":"Unit 0: \u603b\u89c8 | Overview","text":"

\u7ea6 8917 \u4e2a\u5b57 23 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 30 \u5206\u949f

\u5bfc\u8bed

\u672c\u5355\u5143\u4e3b\u8981\u6709\u4e24\u4e2a\u4efb\u52a1\uff1a

  1. \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u4e00\u4e2a\u8f83\u4e3a\u62bd\u8c61\u7684\u4ecb\u7ecd\uff0c\u540c\u65f6\u5efa\u7acb\u8d77\u6574\u95e8\u8bfe\u7a0b\u7684\u6846\u67b6\uff0c\u65b9\u4fbf\u8bfb\u8005\u5728\u4e4b\u540e\u7684\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u80fd\u6709\u4e00\u4e2a\u6bd4\u8f83\u603b\u4f53\u7684\u8ba4\u8bc6\uff0c\u80fd\u5e26\u7740\u76ee\u7684\u53bb\u5b66\u4e60\u5177\u4f53\u7684\u77e5\u8bc6\uff1b
  2. \u4ecb\u7ecd\u4e00\u4e9b\u6bd4\u8f83\u57fa\u7840\u7684\u5185\u5bb9\uff0c\u6216\u662f\u4e00\u4e9b\u6bd4\u8f83\u7410\u788e\u3001\u4ec5\u9700\u4e86\u89e3\u7684\u5185\u5bb9\uff1b

\u7531\u4e8e\u8bfe\u672c\u7684 Overview \u5199\u5f97\u975e\u5e38\u4e00\u8a00\u96be\u5c3d\uff0c\u6240\u4ee5\u6211\u5728\u5543\u5b8c\u540e\u8fdb\u884c\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4f60\u53ef\u4ee5\u5728\u8fd9\u91cc\u627e\u5230\u6211\u6574\u7406\u8fc7\u7a0b\u4e2d\u5b8c\u6210\u7684\u601d\u7ef4\u5bfc\u56fe\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u601d\u7ef4\u5bfc\u56fe\u66f4\u591a\u7684\u662f\u63d0\u4f9b\u6846\u67b6\u6027\u7684\u8ba4\u77e5\uff0c\u5177\u4f53\u5230\u6bcf\u4e2a\u53f6\u5b50\u8282\u70b9\u7684\u5185\u5bb9\u5efa\u8bae\u8fd8\u662f\u4ee5\u672c\u6587\u4e3a\u4e3b\u3002\u6b64\u5916\uff0c\u672c\u6587\u5f88\u591a\u89c2\u70b9\u5177\u6709\u6bd4\u8f83\u5f3a\u70c8\u7684\u4e2a\u4eba\u7406\u89e3\u8272\u5f69\uff0c\u5982\u679c\u4f60\u5bf9\u5176\u4e2d\u7684\u8bba\u65ad\u62b1\u6709\u5f02\u8bae\uff0c\u6b22\u8fce\u8ba8\u8bba\uff01

\u5728\u6b63\u5f0f\u5f00\u59cb\u6838\u5fc3\u5185\u5bb9\u7684\u5b66\u4e60\u4e4b\u524d\uff0c\u6211\u60f3\u5148\u505a\u4e00\u70b9\u8bf4\u660e\uff0c\u4e5f\u7b97\u662f\u4e00\u70b9\u5173\u4e8e\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ecf\u9a8c\u4e4b\u8c08\u3002

\u201c\u5b9a\u4e49\u4e0d\u5b58\u5728\u4e86\u201d

\u533a\u522b\u4e8e\u81ea\u7136\u79d1\u5b66\u7684\u7814\u7a76\u5bf9\u8c61\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e00\u4e2a\u5f7b\u5f7b\u5e95\u5e95\u7684\u4eba\u9020\u7269\uff0c\u5176\u5f88\u591a\u6982\u5ff5\u90fd\u5f88\u96be\u754c\u5b9a\u4e00\u4e2a\u660e\u786e\u7684\u754c\u9650\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fc7\u7a0b\u4e2d\u9047\u5230\u7684\u6700\u9996\u8981\u7684\u95ee\u9898\u3002\u6211\u4f1a\u5c3d\u529b\u7ed9\u51fa\u6211\u8ba4\u4e3a\u66f4\u7cbe\u786e\u7684\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4ecd\u7136\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u4eec\u5c3d\u91cf\u53ea\u56f4\u7ed5\u5b9a\u4e49\u7684\u4e2d\u5fc3\u8fdb\u884c\u5b66\u4e60\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","title":"\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","text":"

\u672c\u8282\u4e3b\u8981\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5f53\u4f5c\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u5355\u4f4d\uff0c\u6765\u8ba8\u8bba\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","title":"\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","text":"

\u6574\u95e8\u8bfe\u7a0b\u6211\u4eec\u9700\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u663e\u7136\u662f\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf(Operating System, OS)\u3002\u63a5\u4e0b\u6765\u6211\u5c06\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u8ff0\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u3002

\u2460 \u4ece\u804c\u80fd\u4e0a\u770b

\u4ece\u5176\u804c\u80fd\u4e0a\u770b\uff0c\u6211\u8ba4\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u662f\u4e00\u4e2a\u8d44\u6e90\u7ba1\u7406\u7cfb\u7edf\u3002

\u53f3\u56fe\u63cf\u8ff0\u4e86\u8ba1\u7b97\u673a\u7cfb\u7edf\u7684\u62bd\u8c61\u5c42\u7ea7\uff1a\u81ea\u4e0a\u800c\u4e0b\uff0c\u7528\u6237\u901a\u8fc7\u5e94\u7528\u7a0b\u5e8f\u89e3\u51b3\u95ee\u9898\uff0c\u5e94\u7528\u7a0b\u5e8f\u5411\u64cd\u4f5c\u7cfb\u7edf\u8bf7\u6c42\u8ba1\u7b97\u673a\u8d44\u6e90\uff1b\u81ea\u4e0b\u800c\u4e0a\uff0c\u8ba1\u7b97\u673a\u786c\u4ef6\u4e3a\u8f6f\u4ef6\uff08\u5305\u62ec OS\uff09\u63d0\u4f9b\u4e86\u7269\u8d28\u57fa\u7840\uff0c\u672c\u8d28\u4e0a\uff0c\u786c\u4ef6\u63d0\u4f9b\u4e86\u8ba1\u7b97\u673a\u8d44\u6e90\u3002

\u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e2d\u95f4\u5c42\uff0c\u5411\u4e0a\u4e3a\u7528\u6237\u7a0b\u5e8f\u5206\u914d\u6613\u7528\u7684\u8d44\u6e90\uff0c\u5411\u4e0b\u76f4\u63a5\u64cd\u4f5c\u786c\u4ef6\u8d44\u6e90\u7684\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u8fd8\u9700\u8981\u516c\u5e73\u3001\u9ad8\u6548\u5730\u89e3\u51b3\u8d44\u6e90\u4e4b\u95f4\u7684\u51b2\u7a81\u95ee\u9898\u7b49\u7b49\u3002

\u5b83\u5c31\u597d\u50cf\u836f\u623f\u67dc\u53f0\uff0c\u5404\u79cd\u836f\u54c1\u5c31\u597d\u50cf\u8ba1\u7b97\u673a\u8d44\u6e90\uff0c\u75c5\u4eba\u63d0\u4f9b\u5904\u65b9\uff0c\u67dc\u53f0\u6536\u5230\u8bf7\u6c42\uff08\u7cfb\u7edf\u8c03\u7528\uff09\u540e\u5904\u7406\u8bf7\u6c42\uff0c\u5e76\u5343\u8f9b\u4e07\u82e6\uff08\u5177\u4f53\u4f1a\u9047\u5230\u4ec0\u4e48\u95ee\u9898\u6211\u4eec\u4f1a\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u5b66\u5230\uff09\u66ff\u4f60\u51c6\u5907\u597d\u4f60\u9700\u8981\u7684\u8d44\u6e90\uff0c\u5b8c\u6210\u4f60\u7684\u8bf7\u6c42\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7ba1\u7406\u7684\u8d44\u6e90\u6709\u8fd9\u4e9b\uff1a\u2460 CPU\uff0c\u7531\u4e8e CPU \u7684\u4e00\u4e2a\u6838(core)\u5728\u7279\u5b9a\u65f6\u523b\u53ea\u80fd\u5904\u7406\u4e00\u4ef6\u4e8b\uff0c\u6240\u4ee5\u201cCPU \u80fd\u591f\u4e3a\u6211\u6240\u7528\u201d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u8d44\u6e90\uff1b\u2461 \u5185\u5b58\uff0c\u6267\u884c\u7a0b\u5e8f\u79bb\u4e0d\u5f00\u5185\u5b58\uff0c\u7528\u6237\u7a0b\u5e8f\u81ea\u7136\u4e5f\u9700\u8981\u5360\u7528\u4e00\u5b9a\u7684\u5185\u5b58\u6765\u89e3\u51b3\u95ee\u9898\uff1b\u2462 I/O \u8bbe\u5907\uff0c\u6253\u5370\u673a\u4e0d\u80fd\u540c\u65f6\u6253\u5370\u6bdb\u6982\u5386\u5e74\u5377\u548c\u8f6c\u4e13\u4e1a\u7533\u8bf7\u8868\uff1b\u2463\u2026\u2026

\u7c97\u7565\u7684\u6765\u8bf4\uff0c\u672c\u8bfe\u7a0b\u4e4b\u540e\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u90fd\u662f\u56f4\u7ed5\u8981\u5982\u4f55\u7ef4\u62a4\u548c\u64cd\u4f5c\u5404\u79cd\u8d44\u6e90\u800c\u5c55\u5f00\u7684\u3002

\u2461 \u4ece\u5b58\u5728\u4e0a\u770b

\u4ece\u5176\u5b58\u5728\u6765\u770b\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u8fd8\u662f\u4e00\u4e2a\u8f6f\u4ef6\u7a0b\u5e8f\uff0c\u662f\u4e00\u4e2a\u4e0d\u505c\u8fd0\u884c\u7740\u7684\uff0c\u7528\u6765\u6267\u884c\u7528\u6237\u7a0b\u5e8f\u7684\u8f6f\u4ef6\u3002\u8fd9\u4e2a\u89d2\u5ea6\u7684\u672c\u8d28\u540c\u65f6\u53cd\u5e94\u4e86\u64cd\u4f5c\u7cfb\u7edf\u6700\u521d\u5b58\u5728\u7684\u76ee\u7684\uff0c\u4e3a\u4e86\u63d0\u9ad8\u8ba1\u7b97\u673a\u8d44\u6e90\u7684\u5229\u7528\u6548\u7387\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u7a0b\u5e8f\u6765\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u8fd9\u4ef6\u4e8b\uff0c\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u81ea\u52a8\u5316\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u4e5f\u9700\u8981\u6210\u4e3a\u8ba1\u7b97\u673a\u786c\u4ef6\u7684\u201c\u4ee3\u7406\u4eba\u201d\uff0c\u638c\u63e1\u786c\u4ef6\u7684\u6240\u6709\u8d44\u6e90\uff0c\u5e76\u4e14\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8fd8\u5f97\u60f3\u65b9\u6cd5\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002

\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u57fa\u7840\u6700\u4e2d\u592e\u7684\u90e8\u5206\u662f\u5185\u6838(kernel)\uff0c\u8981\u7ed9\u51fa kernel \u7684\u7cbe\u786e\u5b9a\u4e49\u5f88\u96be\uff0c\u8fd9\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u8ba1\u7684\u7ed3\u6784\u6709\u5173\uff08\u53c2\u8003\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\uff09\uff0c\u5b83\u6700\u660e\u663e\u7684\u4e00\u4e2a\u7279\u70b9\u5c31\u662f\u81ea\u8ba1\u7b97\u673a\u5f00\u673a\u540e\u5c31\u4e0d\u505c\u5728\u8fd0\u884c\u3002OS \u548c kernel \u7684\u5173\u7cfb\u5c31\u597d\u50cf\u7b14\u8bb0\u672c\u7535\u8111\u548c\u5b83\u7684\u4e3b\u677f\uff0c\u5982\u679c\u5c06 OS \u4e2d\u7684\u5176\u4ed6\u90e8\u5206\u9664\u53bb\uff0ckernel \u4ecd\u7136\u81ea\u6d3d\uff0c\u4ecd\u7136\u5177\u5907\u5b83\u5e94\u6709\u7684\u5185\u5728\u7684\u529f\u80fd\uff0c\u6bd4\u5982\u5b83\u4ecd\u7136\u5177\u5907\u5bf9\u8d44\u6e90\u8fdb\u884c\u8c03\u5ea6\u7684\u80fd\u529b\uff0c\u53ea\u4e0d\u8fc7\u5b83\u53ef\u80fd\u62ff\u4e0d\u5230\u80fd\u8ba9\u5b83\u8c03\u5ea6\u7684\u8d44\u6e90\u3002\u6211\u5728\u8fd9\u91cc\u907f\u514d\u8c08\u5230 OS \u548c kernel \u7684\u533a\u522b\uff0c\u56e0\u4e3a\u8fd9\u5b9e\u5728\u96be\u4ee5\u8bf4\u6e05\uff0c\u751a\u81f3\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u90fd\u4f1a\u7528 OS \u6765\u4ee3\u66ff kernel \u7684\u6982\u5ff5\u3002

\u81f3\u6b64\uff0c\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u4e86\u89e3\u4e86\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\uff0c\u73b0\u5728\u7528\u4e00\u53e5\u8bfe\u672c\u4e0a\u7684\u8bdd\u6765\u505a\u603b\u7ed3\u3002

The common functions of controlling and allocating resources are then brought together into one piece of software: the operating system. --Operating System Concepts (10th edition)

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","text":"

\u73b0\u5728\u6211\u4eec\u77e5\u9053\u64cd\u4f5c\u7cfb\u7edf\u662f\u4ec0\u4e48\u4e1c\u897f\u4e86\uff0c\u90a3\u4e48\u5728\u6b64\u57fa\u7840\u4e0a\u6211\u4eec\u6316\u6398\u4e00\u4e0b\uff0c\u600e\u6837\u624d\u7b97\u4e00\u4e2a\u597d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u4e5f\u5c31\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u65b9\u5411\uff0c\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4e5f\u4f1a\u7b80\u5355\u63d0\u53ca\u4e00\u4e9b\u6211\u4eec\u4e4b\u540e\u4f1a\u8bbe\u8ba1\u7684\u5185\u5bb9\uff0c\u4ee5\u4f9b\u53c2\u8003\u3002

\u9996\u5148\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u9700\u8981\u6709\u8f83\u597d\u7684\u53ef\u9760\u6027\u548c\u5b89\u5168\u6027\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8981\u5c3d\u53ef\u80fd\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u826f\u597d\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236\uff08\u901a\u8fc7#\u4e2d\u65ad\u673a\u5236\u5b9e\u73b0\uff09\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u9700\u8981\u6709\u5f3a\u5065\u7684\u4f53\u9b44\uff0c\u4e0d\u80fd\u4e00\u522e\u98ce\u5b83\u5c31\u75c5\u5012\u4e86\uff1b\u53e6\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u6743\u9650\u7ba1\u7406\u7cfb\u7edf\uff08#\u7279\u6743\u6a21\u5f0f\uff09\uff0c\u4ee5\u5c4f\u853d\u6765\u81ea\u7528\u6237\u7a0b\u5e8f\u7684\u5371\u9669\u884c\u4e3a\uff0c\u7528\u6237\u53ef\u4ee5\u5411\u201c\u67dc\u53f0\u201d\u7d22\u53d6\u6297\u751f\u7d20\uff0c\u4f46\u662f\u7528\u6237\u7d22\u53d6\u5e93\u623f\u94a5\u5319\u65f6\uff0c\u5408\u683c\u7684\u201c\u67dc\u53f0\u201d\u663e\u7136\u4e0d\u80fd\u7b54\u5e94\u8fd9\u4e2a\u8bf7\u6c42\u3002

\u5176\u6b21\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u6709\u8f83\u597d\u7684\u6613\u7528\u6027\uff0c\u5b83\u9700\u8981\u5411\u7528\u6237\u63d0\u4f9b\u7b80\u4fbf\u7684\u670d\u52a1\u4ee5\u8bf7\u6c42\u7cfb\u7edf\u8d44\u6e90\uff0c\u6bd5\u7adf\u64cd\u4f5c\u7cfb\u7edf\u7684\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u65b9\u4fbf\u7528\u6237\u4f7f\u7528\u7cfb\u7edf\u8d44\u6e90\u2014\u2014\u8fd9\u610f\u5473\u7740\u6211\u4eec\u7684\u201c\u4ee3\u7406\u4eba\u201d\u5f97\u662f\u4e2a\u597d\u4ea4\u6d41\u7684\u4eba\uff0c\u800c\u7528\u6237\u7a0b\u5e8f\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u8d44\u6e90\u7684\u9014\u5f84\u662f\u7cfb\u7edf\u8c03\u7528\u3002

\u5bbd\u6cdb\u4e00\u70b9\u6765\u8bb2\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u547d\u4ee4\u63a5\u53e3\u548c\u7a0b\u5e8f\u63a5\u53e3\uff0c\u6709\u4e9b\u5730\u65b9\u4e5f\u4f1a\u63d0\u5230\u56fe\u5f62\u7528\u6237\u63a5\u53e3(Graphical User Interface, GUI)\uff0c\u4ee5\u53ca\u547d\u4ee4\u884c\u63a5\u53e3(Command Line Interface, CLI)\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u4e0d\u662f\u5f88\u559c\u6b22\u8fd9\u4e2a\u5206\u7c7b\u3002

\u5f53\u7136\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u662f\u9ad8\u6548\u7684\uff0c\u4ece\u6700\u65e9\u7684\u6279\u5904\u7406\u7cfb\u7edf\u5230\u73b0\u5728\u7684\u5206\u65f6\u7cfb\u7edf\uff08#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1\uff09\uff0cCPU \u7684\u5229\u7528\u7387\u5728\u4e0d\u65ad\u63d0\u5347\uff0c\u5468\u8f6c\u65f6\u95f4\u4e5f\u5728\u4e0d\u65ad\u7f29\u77ed\uff0c\u5982\u4eca\u7684\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u5206\u65f6\u6280\u672f\u4e5f\u5b9e\u73b0\u4e86\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u63d0\u9ad8\u6548\u7387\u7684\u540c\u65f6\u4e5f\u63d0\u9ad8\u4e86\u7528\u6237\u4f53\u9a8c\u3002

\u8fd8\u6709\u4e00\u70b9\u4e0d\u5bb9\u5ffd\u89c6\u7684\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\uff08\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7684\uff09\u516c\u5e73\u6027\uff0c\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406\u4e2d\u6211\u4eec\u4f1a\u4e86\u89e3\u5230\uff0c\u591a\u8fdb\u7a0b\u8bed\u5883\u4e0b\u6709\u5927\u91cf\u7684\u51b2\u7a81\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff0c\u800c\u6211\u4eec\u5728\u5904\u7406\u8fd9\u4e9b\u51b2\u7a81\u95ee\u9898\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u9965\u997f(Starvation)\uff08\u5177\u4f53\u662f\u4ec0\u4e48\u8bf7\u53c2\u8003\u4e0b\u4e00\u5355\u5143\uff09\uff0c\u800c\u64cd\u4f5c\u7cfb\u7edf\u8981\u505a\u7684\u5c31\u662f\u907f\u514d\u9965\u997f\u7684\u51fa\u73b0\uff0c\u5c31\u597d\u50cf\u7e41\u5fd9\u65f6\u6bb5\u7684\u7535\u68af\uff0c\u6211\u4eec\u4e0d\u80fd\u56e0\u4e3a\u4e8c\u697c\u6d41\u91cf\u5f88\u5927\u5c31\u4e0d\u7ba1\u4e09\u697c\u4ee5\u4e0a\u7684\u4eba\u3002

\u4e0a\u8ff0\u76ee\u6807\u5927\u591a\u662f\u9488\u5bf9\u4f7f\u7528\u8005\u800c\u8a00\u7684\uff0c\u90a3\u4e48\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u53ef\u6269\u5c55\u6027\u3001\u6613\u7ef4\u62a4\u6027\u7b49\u4e5f\u662f\u975e\u5e38\u91cd\u8981\u7684\u3002\u4e0d\u540c\u7684\u8bbe\u8ba1\u601d\u8def\u9020\u5c31\u4e86\u4e0d\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u7ed3\u6784\uff0c\u5404\u79cd\u8bbe\u8ba1\u4e5f\u5404\u81ea\u6709\u5404\u81ea\u7684\u4e3b\u6218\u573a\uff0c\u5173\u4e8e\u8fd9\u4e9b\u5185\u5bb9\uff0c\u6211\u4eec\u4f1a\u5728#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1\u8fd9\u4e00\u90e8\u5206\u66f4\u8be6\u7ec6\u5730\u4ecb\u7ecd\u3002

\u8fd8\u6709\u8bb8\u591a\uff0c\u4f8b\u5982\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u8981\u5c3d\u53ef\u80fd\u5229\u7528\u786c\u4ef6\u8d44\u6e90\u7b49\uff0c\u4f46\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u8282\u60f3\u8981\u8ba8\u8bba\u7684\u91cd\u70b9\uff0c\u6240\u6709\u5c31\u63a0\u8fc7\u4e86\u3002\u4e0a\u8ff0\u89c2\u70b9\u5e76\u4e0d\u5168\u9762\u4e5f\u4e0d\u4e00\u5b9a\u5b8c\u5168\u6b63\u786e\uff0c\u6709\u4e00\u5927\u90e8\u5206\u90fd\u662f\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0c\u8bf7\u8bfb\u8005\u8fa8\u8bc1\u5730\u770b\u5f85\uff0c\u5982\u679c\u6709\u9519\u8bef\u8bf7\u52a1\u5fc5\u544a\u8bc9\u6211\uff01

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","text":"

\u672c\u8282\u4e3b\u8981\u5c31\u4e00\u4e9b\u5173\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6574\u4f53\u8bbe\u8ba1\u7684\u95ee\u9898\u505a\u4e00\u4e9b\u8ba8\u8bba\uff0c\u4ece\u4e00\u4e2a\u76f8\u5bf9\u6bd4\u8f83\u9ad8\u7684\u89d2\u5ea6\u8c08\u4e00\u8c08\u4e00\u4e9b\u9876\u5c42\u8bbe\u8ba1\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","text":"

\u867d\u7136\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u662f\u8f6f\u4ef6\uff0c\u4f46\u662f\u5b83\u6bd5\u7adf\u662f\u4e0e\u786c\u4ef6\u7d27\u5bc6\u5173\u8054\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4f1a\u6d89\u53ca\u5230\u4e00\u4e9b\u5173\u4e8e\u786c\u4ef6\u7684\u5185\u5bb9\uff0c\u8fd9\u91cc\u7b80\u5355\u6d89\u53ca\u4e00\u4e9b\u5173\u4e8e\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\u7684\u5185\u5bb9\u3002

\u6982\u5ff5\u8fa8\u6790

\u540d\u8bcd \u5b9a\u4f4d CPU \u6267\u884c\u6307\u4ee4\u7684\u786c\u4ef6 Core CPU \u7684\u57fa\u7840\u8ba1\u7b97\u5355\u5143 Multi-core \u4e00\u4e2a CPU \u4e0a\u6709\u591a\u4e2a core Processor \u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a CPU \u7684\u82af\u7247 Multi-processor \u591a\u4e2a processor

\u6839\u636e\u5904\u7406\u5668\u7684\u6570\u91cf\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u4e09\u79cd\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\uff1a\u5355\u5904\u7406\u5668\u7cfb\u7edf\u3001\u591a\u5904\u7406\u5668\u7cfb\u7edf\u3001\u96c6\u7fa4\u7cfb\u7edf\u3002

\u2460 \u5355\u5904\u7406\u5668\u7cfb\u7edf(Single-Processor System)

\u4e66\u4e2d\u7ed9\u51fa\u7684\u5173\u4e8e\u5355\u5904\u7406\u5668\u7cfb\u7edf\u7684\u5b9a\u4e49\u662f\uff0c\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u901a\u7528\u5904\u7406\u5668(general-purpose processor)\uff0c\u5e76\u4e14\u8fd9\u4e2a processor \u53ea\u6709\u4e00\u4e2a\u6838(core)\u3002\u4f46\u5b83\u53ef\u4ee5\u6709\u82e5\u5e72\u4e13\u7528\u5904\u7406\u5668(special-purpose processor)\uff0c\u7528\u6765\u6267\u884c\u4e00\u4e9b\u7279\u5b9a\u7684\u6307\u4ee4\uff0c\u800c\u8fd9\u4e9b\u4e13\u7528\u5904\u7406\u5668\u5e76\u4e0d\u8fd0\u884c\u7ebf\u7a0b\u3002

\u2461 \u591a\u5904\u7406\u5668\u7cfb\u7edf(Multiprocessor System)

\u591a\u5904\u7406\u5668\u7cfb\u7edf\u662f\u6307\u6709\u591a\u4e2a\u5355\u6838\u901a\u7528\u5904\u7406\u5668\u7684\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5904\u7406\u5668\u5171\u4eab\u4e00\u5757\u4e3b\u5185\u5b58\uff0c\u5b83\u4eec\u901a\u8fc7\u603b\u7ebf\u6216\u4ea4\u6362\u7f51\u7edc\u8fde\u63a5\u5728\u4e00\u8d77\u3002

\u663e\u800c\u6613\u89c1\u7684\u662f\uff0c\u589e\u52a0\u4e86\u5904\u7406\u5668\u7684\u6570\u91cf\u80fd\u591f\u589e\u52a0\u541e\u5410\u91cf(throughput)\uff0c\u5373\u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u7684\u4efb\u52a1\u6570\u91cf\uff0c\u4f46\u662f\u8fd9\u4e2a\u589e\u52a0\u5e76\u4e0d\u662f\u7ebf\u6027\u7684\uff0c\u56e0\u4e3a\u5904\u7406\u5668\u4e4b\u95f4\u7684\u901a\u4fe1\u4e5f\u9700\u8981\u65f6\u95f4\uff0c\u800c\u4e14\u8fd8\u4f1a\u6709\u4e00\u4e9b\u989d\u5916\u7684\u5f00\u9500\u3002

\u76f8\u5173\u9605\u8bfb

\u4f46\u662f multi-core \u7684\u8bbe\u8ba1\u5728\u901f\u5ea6\u548c\u6548\u80fd\u4e0a\u90fd\u66f4\u80dc\u4e00\u7b79\uff0c\u56e0\u4e3a on-chip \u7684\u901a\u4fe1\u6bd4 between-chip \u7684\u901a\u4fe1\u66f4\u5feb\uff0c\u800c\u4e14\u66f4\u7701\u7535\u3002

\u2462 \u96c6\u7fa4\u7cfb\u7edf(Cluster System)

\u96c6\u7fa4\u7cfb\u7edf\u901a\u8fc7\u5197\u4f59\u5b9e\u73b0\u9ad8\u53ef\u7528\u670d\u52a1\uff0c\u901a\u8fc7\u5e76\u884c\u5b9e\u73b0\u9ad8\u6027\u80fd\u8ba1\u7b97\uff0c\u5b83\u662f\u7531\u591a\u4e2a\u5404\u81ea\u72ec\u7acb\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4f5c\u4e3a\u8282\u70b9(node)\uff0c\u901a\u8fc7\u9ad8\u901f\u901a\u4fe1\u7f51\u7edc\u4e92\u76f8\u8fde\u63a5\u5f62\u6210\u7684\u3002

\u96c6\u7fa4\u4e5f\u5206\u5bf9\u79f0\u548c\u4e0d\u5bf9\u79f0\u4e24\u79cd\uff0c\u5bf9\u79f0\u96c6\u7fa4\u7684\u5404\u4e2a\u8282\u70b9\u4e92\u76f8\u76d1\u7763\uff0c\u800c\u4e0d\u5bf9\u79f0\u7684\u96c6\u7fa4\u5219\u5b58\u5728\u4e00\u79cd\u7c7b\u4f3c\u201c\u66ff\u8865\u201d\u7684\u4e1c\u897f\uff0c\u7531\u201c\u66ff\u8865\u201d\u53bb\u76d1\u7763\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\uff0c\u5f53\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u5c31\u7531\u201c\u66ff\u8865\u201d\u6765\u63a5\u66ff\u5b83\u7684\u5de5\u4f5c\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","text":"

\u524d\u9762\u6211\u4eec\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u88ab\u7528\u6765\u300c\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u300d\u7684\u3002\u4e00\u5f00\u59cb\u8fd9\u4ef6\u4e8b\u6bd4\u8f83\u7b80\u5355\uff0c\u53ea\u9700\u8981\u50cf\u961f\u5217\u4e00\u6837\uff0c\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\u5c31\u884c\uff0c\u4f46\u662f\u6162\u6162\u7684\u968f\u7740\u8ba1\u7b97\u673a\u5e94\u7528\u8303\u56f4\u7684\u6269\u5927\u4ee5\u53ca\u5404\u79cd\u9700\u6c42\u7684\u51fa\u73b0\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4e0d\u592a\u5408\u7406\u4e86\u3002\u6309\u7167\u53d1\u5c55\u9636\u6bb5\u6f14\u8fdb\uff0c\u6211\u4eec\u5212\u5206\u51fa\u4e24\u4e2a\u9636\u6bb5\u4e09\u4e2a\u8bbe\u8ba1\uff1a\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing System)\u3001\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u548c\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

\u2460 \u6279\u5904\u7406\u7cfb\u7edf\u9636\u6bb5

\u6700\u65e9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u4efb\u52a1\u90fd\u9700\u8981\u4eba\u5de5\u624b\u52a8\u5e72\u9884\uff0c\u4f46\u662f\u8ba1\u7b97\u673a\u6267\u884c\u4efb\u52a1\u7684\u901f\u5ea6\u4e0e\u4eba\u5de5\u5e72\u9884\u7684\u901f\u5ea6\u76f8\u5dee\u592a\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4eba\u5de5\u901f\u5ea6\u4e25\u91cd\u9650\u5236\u4e86\u8ba1\u7b97\u673a\u7684\u5de5\u4f5c\u6548\u7387\uff0c\u4e8e\u662f\u64cd\u4f5c\u7cfb\u7edf\u5f00\u59cb\u51fa\u73b0\uff0c\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u539f\u59cb\u7684\u5b9e\u73b0\u5c31\u662f\u6279\u5904\u7406\u7cfb\u7edf\u3002\uff08\u4f46\u4e0d\u662f\u6700\u65e9\uff0c\u4e4b\u524d\u8fd8\u6709\u8131\u673a\u5904\u7406\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\uff09

\u2776 \u5355\u9053\u6279\u5904\u7406\u9636\u6bb5

\u6309\u7167\u64cd\u4f5c\u7cfb\u7edf\u53d1\u5c55\u8fdb\u7a0b\uff0c\u6211\u4eec\u9996\u5148\u4ecb\u7ecd\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing)\u3002

\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u6709\u4e24\u4e2a\u5173\u952e\u8bcd\uff0c\u201c\u6279\u5904\u7406\u201d\u548c\u201c\u5355\u9053\u201d\u3002

\u201c\u6279\u5904\u7406\u201d\u6307\u7684\u662f\uff0c\u7cfb\u7edf\u6267\u884c\u7684\u4efb\u52a1\u662f\u6210\u6279\u7684\uff0c\u82e5\u5e72\u4efb\u52a1\u88ab\u4f5c\u4e3a\u4e00\u6574\u6279\u4ea4\u4ed8\u7ed9\u64cd\u4f5c\u7cfb\u7edf\u3002\u5728\u5177\u4f53\u6267\u884c\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u81ea\u52a8\u6309\u987a\u5e8f\u4e32\u884c(serial)\u6267\u884c\u8fd9\u4e9b\u4efb\u52a1\u3002

\u800c\u201c\u5355\u9053\u201d\u6307\u7684\u662f\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u53ea\u6709\u4e00\u9053\u7a0b\u5e8f\u5728\u8fd0\u884c\uff0c\u7cfb\u7edf\u53ea\u5904\u7406\u4e00\u9879\u4efb\u52a1\uff0c\u5728\u8fd9\u4e2a\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\uff0c\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u4ed6\u4efb\u52a1\u3002

\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u521d\u6b65\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u81ea\u52a8\u5316\u201d\uff0c\u6781\u5927\u51cf\u5c11\u4e86\u4eba\u5de5\u64cd\u4f5c\u901f\u5ea6\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u7684\u5f71\u54cd\u3002\u4f46\u5b83\u5b58\u5728\u4e00\u4e2a\u975e\u5e38\u660e\u663e\u7684\u95ee\u9898\uff1a\u7531\u4e8e\u5f53\u524d\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u5b83\u4efb\u52a1\uff0c\u6240\u4ee5\u5f53\u5f53\u524d\u4efb\u52a1\u51fa\u73b0 I/O \u8bf7\u6c42\u65f6\uff0cCPU \u5c31\u9700\u8981\u7b49\u5f85 I/O \u5b8c\u6210\u3002\u6211\u4eec\u77e5\u9053 I/O \u64cd\u4f5c\u662f\u975e\u5e38\u8017\u65f6\u7684\uff0c\u66f4\u4e25\u91cd\u7684\u662f\u4f8b\u5982\u7b49\u5f85\u952e\u76d8\u8f93\u5165\u8fd9\u79cd\u9700\u8981\u4eba\u5de5\u53c2\u4e0e\u7684 I/O\uff0c\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u6ca1\u6cd5\u907f\u514d\u8fd9\u79cd\u4eba\u5de5\u64cd\u4f5c\u5bf9\u8ba1\u7b97\u673a\u6267\u884c\u6548\u7387\u7684\u5f71\u54cd\uff0c\u8fd9\u5c31\u5bfc\u81f4 CPU \u4f1a\u957f\u65f6\u95f4\u5904\u4e8e\u7a7a\u95f2\u72b6\u6001\uff0c\u800c\u8ba9 CPU \u957f\u65f6\u95f4\u7a7a\u95f2\u8fd9\u4ef6\u4e8b\uff0c\u662f\u4e0d\u88ab\u63a5\u53d7\u7684\u3002

\u2777 \u591a\u9053\u6279\u5904\u7406\u9636\u6bb5

\u56e0\u6b64\uff0c\u4e3a\u4e86\u4e0d\u8ba9 CPU \u95f2\u4e0b\u6765\uff0c\u4e00\u4e2a\u7b26\u5408\u76f4\u89c9\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9\u5b83\u5148\u53bb\u505a\u4e0b\u4e00\u4ef6\u4e8b\uff0c\u5c31\u597d\u50cf\u4ed3\u5e93\u6b63\u5728\u6536\u96c6\u4e0a\u4e00\u4e2a\u75c5\u4eba\u6240\u9700\u8981\u7684\u836f\u54c1\u7684\u65f6\u5019\uff0c\u67dc\u53f0\u53ef\u4ee5\u5148\u53bb\u5904\u7406\u4e0b\u4e00\u4e2a\u75c5\u4eba\u7684\u8bf7\u6c42\u3002\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u5e94\u8fd0\u800c\u751f\u3002

\u4ece\u540d\u5b57\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5389\u5bb3\u5728\u8fd9\u4e2a\u201c\u591a\u9053(Multiprogramming)\u201d\uff0c\u5373\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5728\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4e2d\uff0c\u5f53\u524d\u4efb\u52a1\u53d1\u751f IO \u8bf7\u6c42\u65f6\uff0cCPU \u8f6c\u800c\u53bb\u6267\u884c\u5176\u5b83\u4efb\u52a1\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u5c3d\u91cf\u8ba9 CPU \u59cb\u7ec8\u5728\u5de5\u4f5c\u72b6\u6001\u3002\u56e0\u6b64\uff0c\u5b8f\u89c2\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u540c\u65f6\u6267\u884c\u82e5\u5e72\u4efb\u52a1\uff08\u5728\u4efb\u52a1 A \u5b8c\u6210\u4e4b\u524d\u4efb\u52a1 B \u4e5f\u53ef\u80fd\u5f00\u59cb\u4e86\uff09\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u5e76\u53d1(concurrency)\uff08\u6ce8\u610f\uff0c\u5e76\u53d1\u4e0e\u5e76\u884c\u7684\u6982\u5ff5\u5e76\u4e0d\u4e00\u81f41\uff09\uff1b\u4f46\u5728\u5fae\u89c2\u4e0a\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u662f\u987a\u5e8f\u4e32\u884c\u7684\uff0c\u53ea\u4e0d\u8fc7\u533a\u522b\u4e8e\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ee5\u5b8c\u6574\u7684\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u662f\u5c06\u5b8c\u6574\u4efb\u52a1\u6309\u7167 I/O \u7684\u53d1\u751f\u505a\u5212\u5206\uff0c\u4ee5\u8fd9\u4e9b\u5212\u5206\u540e\u7684\u90e8\u5206\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\u8fdb\u884c\u987a\u5e8f\u4e32\u884c(serial)\u3002

\u6211\u4eec\u53ef\u4ee5\u7528\u7518\u7279\u56fe\u6765\u53ef\u89c6\u5316\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u7684\u7b56\u7565\uff08\u4e00\u79cd\u5e38\u89c1\u7684\u9898\u578b\uff09\u3002\u4ee5\u4e0b\u9762\u7684\u9898\u76ee\u4e3a\u4f8b\uff0c\u6211\u4eec\u6765\u5b9e\u8df5\u4e00\u4e0b\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e24\u4e2a\u7a0b\u5e8f A \u548c B\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5206\u522b\u72ec\u7acb\u7684\u8bbe\u5907 X \u548c Y\uff0c\u4e14\u6211\u4eec\u53ea\u6709\u4e00\u4e2a CPU\uff1a

\u8bf7\u8ba8\u8bba\uff1a

  1. \u5728\u5355\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\u5148\u6267\u884c A \u518d\u6267\u884c B\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f
  2. \u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f\u8bf7\u7ed9\u51fa\u7518\u7279\u56fe\u3002

\u5728\u5355\u9053\u7a0b\u5e8f\u4e0b\u6267\u884c\uff0c\u5373\u6309\u987a\u5e8f\u6267\u884c A \u548c B\uff0cCPU \u7684\u5229\u7528\u7387\u5373\u5b9e\u9645 CPU \u4f7f\u7528\u65f6\u95f4\u9664\u4ee5\u5b8c\u6210\u4efb\u52a1\u7684\u603b\u65f6\u95f4\uff0c\u56e0\u6b64\uff1a

\\[ U = \\frac{(10+5+10)+(10+5)}{(10+5+5+10+10)+(10+10+5+5+10)} = \\frac{40}{80} = 50\\% \\]

\u800c\u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0c\u6211\u4eec\u5f97\u5230\u5982\u4e0b\u7518\u7279\u56fe\uff1a

gantt\n    title Multiprogramming\n    dateFormat ss\n    axisFormat %S\n\n    section Program A\n    CPU :a,  00,  10\n    X   :b,  10,  15\n    CPU :c,  20,  25\n    Y   :d,  25,  35\n    CPU :e,  35,  45\n\n    section Program B\n    X   :g,  00,  10\n    CPU :h,  10,  20\n    Y   :i,  20,  25\n    CPU :j,  25,  30\n    Y   :k,  35,  45

\u7531\u4e8e Mermaid \u7684\u9650\u5236\uff0c\u6211\u73b0\u5728\u662f\u628a\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u4efb\u52a1\u9519\u5f00\u753b\u7684\uff0c\u5b9e\u9645\u4e0a\u505a\u9898\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u753b\u6210\u4e24\u884c\u3002

\u8981\u70b9\u5c31\u662f\u7eb5\u5411\u4e0d\u80fd\u540c\u65f6\u51fa\u73b0\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u4f8b\u5982 18s \u65f6\u4e0d\u80fd A \u548c B \u90fd\u7528 CPU\uff0c\u6240\u4ee5 A \u9700\u8981\u7b49 B \u7528\u5b8c CPU \u518d\u4f7f\u7528\u3002

\u73b0\u5728\u6211\u4eec\u518d\u6765\u7edf\u8ba1 CPU \u7684\u5229\u7528\u7387\uff1a

\\[ U = \\frac{10+10+5+5+10}{45} = \\frac{40}{45} = 88.89\\% \\]

\u901a\u8fc7\u8fd9\u9053\u9898\u6211\u4eec\u4e5f\u53ef\u4ee5\u53d1\u73b0\uff0c\u591a\u9053\u7a0b\u5e8f\u8bbe\u8ba1\u6280\u672f\u5bf9 CPU \u5229\u7528\u7387\u7684\u63d0\u5347\u6709\u591a\u9ad8\uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u4ece\u8ba1\u7b97\u8fc7\u7a0b\u4e2d\u7684\u5206\u6bcd\u770b\u51fa\u5176\u5bf9\u7a0b\u5e8f\u541e\u5410\u91cf\u7684\u63d0\u5347\u6709\u591a\u9ad8\u3002

\u591a\u9053\u6279\u5904\u7406\u89e3\u51b3\u4e86\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u53ef\u80fd\u8ba9 CPU \u95f2\u7f6e\u4e0b\u6765\u7684\u95ee\u9898\uff08\u5f53\u7136\u524d\u63d0\u662f\u6709\u4efb\u52a1\u8ba9\u5b83\u505a\uff09\uff0c\u63d0\u9ad8\u4e86 CPU \u7b49\u8d44\u6e90\u7684\u5229\u7528\u7387\uff0c\u589e\u52a0\u4e86\u541e\u5410\u91cf\uff0c\u4f46\u662f\u7531\u4e8e\u6d89\u53ca\u5230\u4e86\u8fdb\u7a0b\u7684\u5207\u6362\u95ee\u9898\uff0c\u6240\u4ee5\u5b9e\u9645\u5b9e\u73b0\u4f1a\u590d\u6742\u5f88\u591a\u3002\u5177\u4f53\u7684\u5185\u5bb9\u6211\u4eec\u4f1a\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406 \u4e2d\u8be6\u7ec6\u4ecb\u7ecd\u3002

\u4f46\u662f\u65e0\u8bba\u5355\u9053\u8fd8\u662f\u591a\u9053\uff0c\u6279\u5904\u7406\u7cfb\u7edf\u5e76\u4e0d\u9002\u5408\u4f5c\u4e3a\u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\uff0c\u5176\u4e2d\u4e00\u4e2a\u6700\u5927\u7684\u95ee\u9898\u5c31\u662f\u5b83\u7684\u4ea4\u4e92\u6027\u975e\u5e38\u5dee\u3002\u7528\u6237\u7ed9\u5b9a\u4e00\u5b9a\u6279\u6b21\u7684\u4efb\u52a1\uff0c\u7136\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u8c03\u6574\u8fd9\u4e00\u6279\u4efb\u52a1\u7684\u6267\u884c\u987a\u5e8f\uff0c\u6700\u7ec8\u5b8c\u6210\u8fd9\u6279\u4efb\u52a1\uff0c\u7136\u800c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7528\u6237\u5c31\u6ca1\u6cd5\u518d\u7528\u8ba1\u7b97\u673a\u505a\u5176\u5b83\u4e8b\u60c5\u4e86\uff0c\u540c\u65f6\u4f60\u4e5f\u6ca1\u6cd5\u63a7\u5236\u6b63\u5728\u6267\u884c\u7684\u4efb\u52a1\uff0c\u8fd9\u5bf9\u73b0\u4ee3\u8ba1\u7b97\u673a\u6765\u8bf4\u662f\u4e0d\u53ef\u60f3\u8c61\u7684\u3002

\uff08\u5047\u8bbe\u6211\u4eec\u5ffd\u7565\u5173\u4e8e\u5c4f\u5e55\u663e\u793a\u7684 I/O\uff09\u8bd5\u60f3\uff0c\u4f60\u5e0c\u671b\u5728\u8dd1\u7a0b\u5e8f\u7684\u65f6\u5019\u653e\u4e00\u4e2a\u89c6\u9891\uff0c\u4f46\u662f\u7531\u4e8e\u4f60\u7684\u7a0b\u5e8f\u8fd8\u6ca1\u8dd1\u5b8c\uff0c\u4f60\u7684\u89c6\u9891\u5c31\u6ca1\u6cd5\u64ad\u653e\uff0c\u7a81\u7136\u4f60\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u4e00\u6b21 I/O\uff0cCPU \u8f6c\u800c\u64ad\u653e\u5df2\u7ecf\u5b8c\u6210 I/O \u540e\u7684\u90a3\u90e8\u5206\u89c6\u9891\uff0c\u4f46\u662f\u8fd9\u4e2a\u65f6\u5019\u4f60\u7684\u7a0b\u5e8f I/O \u5f88\u5feb\u4e5f\u5b8c\u6210\u4e86\uff0c\u5374\u9700\u8981\u7b49\u5f85\u7f13\u5b58\u4e2d\u7684\u89c6\u9891\u653e\u5b8c\u624d\u80fd\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u79cd\u7528\u6237\u4f53\u9a8c\u51e0\u4e4e\u65e0\u6cd5\u63a5\u53d7\u3002

\u5bf9\u4e8e\u7528\u6237\u6765\u8bf4\uff0c\u6700\u597d\u80fd\u540c\u65f6\u5b9e\u73b0\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u4e5f\u5c31\u662f\u51e0\u4ef6\u4e8b\u60c5\u81f3\u5c11\u770b\u8d77\u6765\u8981\u50cf\u662f\u540c\u65f6\u53d1\u751f\u7684\uff0c\u4e8e\u662f\u51fa\u73b0\u4e86\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

\u2461 \u5206\u65f6\u7cfb\u7edf\u9636\u6bb5

\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u662f\u591a\u4efb\u52a1(Multitasking)\u7684\u4e00\u4e2a\u5177\u4f53\u5b9e\u73b0\uff0c\u800c Multitasking \u662f Multiprogramming \u7684\u4e00\u4e2a\u903b\u8f91\u6269\u5c55\uff0c\u5373 Multitasking \u4e5f\u662f Multiprogramming \u7684\u4e00\u79cd\uff0c\u5b83\u7b26\u5408\u5185\u5b58\u4e2d\u6709\u591a\u4e2a\u8fdb\u7a0b\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u6709\u591a\u4e2a\u4efb\u52a1\u4e00\u8d77\u6267\u884c\u7684\u7279\u70b9\u3002

\u5206\u65f6\u7cfb\u7edf\u901a\u8fc7\u9891\u7e41\u5730\u5728\u591a\u4e2a\u8fdb\u7a0b\u95f4\u5207\u6362\u6765\u8fd1\u4f3c\u5b9e\u73b0\u5e76\u884c\uff08\u5e76\u4e0d\u662f\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\uff0c\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\u9700\u8981\u901a\u8fc7\u591a\u6838/\u591a\u5904\u7406\u5668\u5b9e\u73b0\uff09\u3002\u5177\u4f53\u6765\u8bf4\u662f\u6309\u7167\u65f6\u95f4\u7247(time slice)\uff0c\u8f6e\u6d41\u5c06 CPU \u5206\u914d\u7ed9\u5404\u4e2a\u8fdb\u7a0b\uff0c\u8fd9\u6837\u53ea\u8981\u65f6\u95f4\u7247\u8db3\u591f\u77ed\uff0c\u7528\u6237\u4f53\u611f\u4e0a\u5c31\u50cf\u662f\u591a\u4e2a\u4efb\u52a1\u5e76\u884c\u6267\u884c\u3002

\u611f\u89c9\u6bd4\u8f83\u50cf\u300a\u5341\u4e07\u4e2a\u51b7\u7b11\u8bdd\u300b\u8d85\u4eba\u8fd9\u4e00\u96c6\u7684 4:09 - 4:48\u3002

\u5206\u65f6\u7528\u6237\u5141\u8bb8\u591a\u4e2a\u7528\u6237\u540c\u65f6\u4f7f\u7528\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6240\u6709\u4efb\u52a1\u4e4b\u95f4\u4e92\u76f8\u72ec\u7acb\uff0c\u4e92\u4e0d\u5e72\u6270\u3001\u4e92\u4e0d\u963b\u585e\uff0c\u56e0\u6b64\u4efb\u52a1\u7684\u6700\u957f\u5468\u8f6c\u65f6\u95f4\u51cf\u5c11\uff0c\u7528\u6237\u7684\u64cd\u4f5c\u4e5f\u4f1a\u88ab\u53ca\u65f6\u54cd\u5e94\uff0c\u5b9e\u73b0\u4e86\u66f4\u65b9\u4fbf\u8fdb\u884c\u4eba\u673a\u5bf9\u8bdd\u3002

\u76f8\u5173\u9605\u8bfb

\u5173\u4e8e\u8fd9\u4e09\u4e2a\u6280\u672f\u7684\u8bf4\u660e\u4e5f\u53ef\u4ee5\u770b\u770b xyx \u662f\u600e\u4e48\u5199\u7684\uff1a\ud83d\udd17

\u9664\u4e86\u8fd9\u51e0\u79cd\u7cfb\u7edf\u5916\uff0c\u738b\u9053\u91cc\u4e5f\u63d0\u5230\u4e86\u8fd9\u4e9b\u7cfb\u7edf\uff1a

\u591a\u9053\u6280\u672f\u51fa\u73b0\u4e4b\u540e\uff0c\u867d\u7136\u8ba1\u7b97\u673a\u7684\u8868\u73b0\u4e0d\u65ad\u63d0\u5347\uff0c\u4f46\u662f\u591a\u9053\u6280\u672f\u672c\u8eab\u7684\u6280\u672f\u7279\u70b9\uff0c\u5404\u4e2a\u8fdb\u7a0b\u5728\u672a\u5b8c\u6210\u7684\u60c5\u51b5\u4e0b\u9700\u8981\u4e92\u76f8\u5207\u6362\uff0c\u4e00\u7cfb\u5217\u95ee\u9898\u63a5\u8e35\u800c\u6765\uff0c\u8fd9\u4e9b\u90fd\u662f\u6211\u4eec\u5728\u4e4b\u540e\u7684\u5355\u5143\u91cc\u8be6\u7ec6\u8ba8\u8bba\u7684\u5185\u5bb9\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","text":"

\u968f\u7740\u64cd\u4f5c\u7cfb\u7edf\u7684\u529f\u80fd\u4e0d\u65ad\u6269\u5c55\u3001\u4f53\u91cf\u9010\u6e10\u53d8\u5927\uff0c\u6574\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u7684\u7ed3\u6784\u8bbe\u8ba1\u5c31\u8d8a\u53d1\u91cd\u8981\u4e86\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u8bbe\u8ba1\u601d\u8def\u3002

\u5b8f\u5185\u6838

\u5b8f\u5185\u6838(Monolithic-Kernels)\u4e5f\u53eb\u5355\u5185\u6838\u6216\u5927\u5185\u6838\uff0c\u5b83\u7684\u6838\u5fc3\u601d\u60f3\u5341\u5206\u7b80\u5355\u7c97\u66b4\uff0c\u5c06\u6240\u6709\u4e3b\u8981\u529f\u80fd\u90fd\u7d27\u5bc6\u8026\u5408\u5728\u4e00\u8d77\u4f5c\u4e3a\u4e00\u4e2a\u5b8c\u6574\u7684\u6574\u4f53\u3002

\u5b8f\u5185\u6838\u5e26\u6765\u7684\u597d\u5904\u662f\u64cd\u4f5c\u7cfb\u7edf\u6548\u7387\u6781\u9ad8\uff0c\u4ece\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u5386\u7a0b\u6765\u770b\uff0c\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u90fd\u662f\u4ece\u5b8f\u5185\u6838\u53d1\u5c55\u8fc7\u6765\u7684\uff08\u4e0d\u8fc7\u5982\u4eca\u7684\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u66f4\u504f\u5411\u6df7\u5408\u7cfb\u7edf\uff09\u3002

\u4f46\u662f\u5b8f\u5185\u6838\u7684\u7f3a\u70b9\u4e5f\u662f\u5341\u5206\u660e\u663e\u7684\uff0c\u5927\u91cf\u590d\u6742\u7684\u529f\u80fd\u4e92\u76f8\u8026\u5408\uff0c\u5bfc\u81f4\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ef4\u62a4\u5341\u5206\u56f0\u96be\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u4e00\u65e6\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u4e25\u91cd\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u90fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff0c\u5728\u8fd9\u65b9\u9762\uff0c\u5b8f\u5185\u6838\u7684\u8868\u73b0\u90fd\u4e0d\u5982\u5fae\u5185\u6838\u3002

\u5206\u5c42\u8bbe\u8ba1

\u5206\u5c42\u8bbe\u8ba1(layer approach)\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u7cfb\u7edf\u5206\u4e3a\u82e5\u5e72\u5c42\uff0c\u5e95\u5c42\u4e3a\u786c\u4ef6\uff0c\u9876\u5c42\u4e3a\u7528\u6237\u63a5\u53e3\uff0c\u7b2c \\(i\\) \u5c42\u53ea\u8c03\u7528 \\(i-1\\) \u5c42\u63d0\u4f9b\u7684\u63a5\u53e3\u3002\u6bcf\u4e00\u5c42\u90fd\u5b9e\u73b0\u826f\u597d\u7684\u5c01\u88c5\uff0c\u4e8e\u662f\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u53ea\u9700\u8981\u9010\u6b65\u5b9e\u73b0\u5e76\u8c03\u8bd5\u9a8c\u8bc1\u6bcf\u4e00\u5c42\uff0c\u518d\u9010\u7ea7\u5411\u4e0a\u5f00\u53d1\u5373\u53ef\uff1b\u5728\u7ef4\u62a4\u6216\u6269\u5c55\u8fc7\u7a0b\u4e2d\uff0c\u53ea\u8981\u4fee\u6539\u6bcf\u4e00\u5c42\u7684\u5185\u90e8\u5b9e\u73b0\uff0c\u800c\u4e0d\u9700\u8981\u4fee\u6539\u5176\u5b83\u5c42\u7684\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u5927\u5927\u964d\u4f4e\u4e86\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u96be\u5ea6\u3002

\u7136\u800c\uff0c\u7531\u4e8e\u6bcf\u6b21\u6267\u884c\u4e00\u4e2a\u529f\u80fd\u90fd\u9700\u8981\u4e0a\u4e0b\u8de8\u8d8a\u591a\u5c42\uff0c\u53d1\u751f\u591a\u6b21\u63a5\u53e3\u8c03\u7528\uff0c\u5206\u5c42\u8bbe\u8ba1\u4e0b\u7684\u7cfb\u7edf\u6548\u7387\u5f80\u5f80\u90fd\u53d7\u5230\u9650\u5236\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8981\u60f3\u771f\u6b63\u610f\u4e49\u4e0a\u5b9e\u73b0\u826f\u597d\u7684\u5206\u5c42\u8bbe\u8ba1\uff0c\u5c31\u9700\u8981\u5bf9\u5404\u5c42\u6709\u826f\u597d\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u96be\u5ea6\u662f\u4e0d\u5c0f\u7684\u3002

\u5fae\u5185\u6838

\u5fae\u5185\u6838(Micro-Kernels)\u7684\u8bbe\u8ba1\u601d\u8def\u4e0e\u5b8f\u5185\u6838\u76f8\u53cd\uff0c\u4e3b\u5f20\u5c06\u4e0d\u662f\u5fc5\u8981\u7684\u4e1c\u897f\u90fd\u4ece\u5185\u6838\u91cc\u62ff\u51fa\u53bb\uff0c\u653e\u5230\u7528\u6237\u7a7a\u95f4\uff0c\u4ee5\u7528\u6237\u6001\u6267\u884c\u3002\u6574\u4f53\u5f62\u6210\u4e00\u79cd\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\uff0c\u6b64\u65f6\u5185\u6838\u53ea\u63d0\u4f9b\u901a\u8baf\u3001\u5185\u5b58\u7ba1\u7406\u3001\u8fdb\u7a0b\u7ba1\u7406\u7b49\u57fa\u672c\u529f\u80fd\uff0c\u4e5f\u53ea\u6709\u8fd9\u4e9b\u90e8\u5206\u76f4\u63a5\u8fd0\u884c\u5728\u5185\u6838\u6001\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\u7684\u5176\u5b83\u529f\u80fd\u90e8\u4ef6\u5219\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u673a\u5236\u4e0e\u5185\u6838\u4e92\u52a8\u3002

\u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u4f53\u79ef\u4f1a\u5927\u5927\u51cf\u5c0f\uff0c\u5185\u6838\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u4e5f\u4f1a\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\uff0c\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\u4e5f\u4f7f\u529f\u80fd\u6269\u5c55\u66f4\u52a0\u5bb9\u6613\uff1b\u53e6\u5916\uff0c\u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u6548\u7387\u4e5f\u4f1a\u5927\u5927\u63d0\u5347\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u5404\u4e2a\u529f\u80fd\u4e4b\u95f4\u7684\u8026\u5408\u964d\u4f4e\uff0c\u4e14\u90fd\u8fd0\u884c\u5728\u7528\u6237\u6001\uff0c\u529f\u80fd\u4e4b\u95f4\u4ec5\u4f7f\u7528\u901a\u4fe1\u5efa\u7acb\u94fe\u63a5\uff0c\u5373\u4f7f\u67d0\u4e2a\u529f\u80fd\u90e8\u4ef6\u51fa\u73b0\u95ee\u9898\uff0c\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5d29\u6e83\uff0c\u76f8\u6bd4\u4e8e\u5b8f\u5185\u6838\uff0c\u7cfb\u7edf\u53ef\u9760\u6027\u5927\u5927\u63d0\u5347\u3002

\u6a21\u5757\u5316\u8bbe\u8ba1

\u6a21\u5757\u5316\u8bbe\u8ba1(Modules Approach)\u6307\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5212\u5206\u4e3a\u82e5\u5e72\u5206\u7acb\u6a21\u5757\uff0c\u5e76\u89c4\u5b9a\u6a21\u5757\u4e4b\u95f4\u7684\u63a5\u53e3\uff0c\u751a\u81f3\u5355\u4e2a\u6a21\u5757\u4e0b\u4e5f\u53ef\u80fd\u662f\u7531\u591a\u4e2a\u6a21\u5757\u901a\u8fc7\u540c\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\u800c\u6210\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u65b9\u6cd5\u4e5f\u88ab\u79f0\u4e3a\u6a21\u5757-\u63a5\u53e3\u6cd5\u3002

\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u4e0e\u5fae\u5185\u6838\u662f\u4e0d\u540c\u7684\uff0c\u9700\u8981\u6ce8\u610f\u533a\u5206\u3002\u5fae\u5185\u6838\u8bbe\u8ba1\u4ecd\u7136\u662f\u6709\u4e2d\u5fc3\uff08\u5fae\u5185\u6838\uff09\u7684\uff0c\u4f46\u662f\u6a21\u5757\u5316\u8bbe\u8ba1\u6574\u4f53\u662f\u5206\u5c42\u7f51\u72b6\u7684\u3002

\u7406\u60f3\u7684\u6a21\u5757\u5316\u8bbe\u8ba1\u4f1a\u8ba9\u7cfb\u7edf\u8bbe\u8ba1\u53ef\u4ee5\u591a\u7ebf\u5e76\u884c\uff0c\u53ea\u9700\u8981\u4e8b\u5148\u5546\u91cf\u597d\u63a5\u53e3\uff0c\u5404\u4e2a\u5de5\u7a0b\u5e08\u5c31\u53ef\u4ee5\u72ec\u7acb\u5730\u5b9e\u73b0\u3001\u586b\u5145\u6a21\u5757\u5185\u5bb9\uff1b\u9ad8\u5185\u805a\u4f4e\u8026\u5408\u7684\u8bbe\u8ba1\u4e5f\u80fd\u8ba9\u7cfb\u7edf\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\u3002

\u7136\u800c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5341\u5206\u56f0\u96be\uff0c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5e76\u6ca1\u6709\u4e00\u4e2a\u6e05\u6670\u7684\u5355\u5411\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u65e0\u6cd5\u9012\u8fdb\u5f0f\u7684\u63a8\u8fdb\u4efb\u52a1\uff0c\u6574\u4e2a\u5f00\u53d1\u8fc7\u7a0b\u5c31\u597d\u50cf\u59cb\u7ec8\u60ac\u5728\u534a\u7a7a\uff1b\u9664\u6b64\u4e4b\u5916\uff0c\u5982\u4f55\u8bbe\u8ba1\u63a5\u53e3\u4f7f\u5f97\u6240\u6709\u9700\u6c42\u90fd\u80fd\u88ab\u5f88\u597d\u6ee1\u8db3\u4e5f\u662f\u4e2a\u96be\u4ee5\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u6df7\u5408\u7cfb\u7edf

\u6df7\u5408\u7cfb\u7edf(Hybrid Systems)\u662f\u6307\u5c06\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\u7684\u8bbe\u8ba1\u601d\u8def\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u66f4\u73b0\u4ee3\uff0c\u4e5f\u662f\u76ee\u524d\u4e3b\u6d41\u7684\u64cd\u4f5c\u7cfb\u7edf\u7684\u6a21\u5f0f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","text":"

\u672c\u8282\u6211\u4eec\u6df1\u5165\u5230\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e9b\u5177\u4f53\u8fd0\u884c\u8fc7\u7a0b\uff0c\u63a2\u7a76\u4e00\u4e9b\u6b65\u9aa4\u7684\u5177\u4f53\u5b9e\u73b0\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4e2d\u65ad","title":"\u4e2d\u65ad","text":"

\u4e2d\u65ad\uff08\u5e7f\u4e49\uff09\u662f\u8d2f\u7a7f\u73b0\u4ee3\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e2a\u91cd\u8981\u6280\u672f\uff0c\u5b83\u4f7f\u5f97\u201c\u8ba1\u5212\u4e4b\u5916\u201d\u7684\u4e8b\u60c5\u53ef\u4ee5\u53ca\u65f6\u7684\u88ab\u544a\u77e5\u5e76\u5904\u7406\u3002\u4f8b\u5982\uff0c\u7a0b\u5e8f\u7a81\u7136\u51fa\u73b0\u4e86\u81f4\u547d\u9519\u8bef\uff0c\u8fd9\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5e94\u8be5\u53ca\u65f6\u5bdf\u89c9\u5e76\u5904\u7406\uff1b\u53c8\u6bd4\u5982\uff0c\u7528\u6237\u5728\u547d\u4ee4\u884c\u8f93\u5165\u4e86\u6307\u4ee4\uff0c\u6309\u4e0b\u4e86\u56de\u8f66\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5e94\u5f53\u5bdf\u89c9\u5230 I/O \u5df2\u7ecf\u51c6\u5907\u597d\u4e86\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e0d\u538c\u5176\u70e6\u5730\u8be2\u95ee\u4f60\u6709\u6ca1\u6709\u53d1\u751f\u9519\u8bef\uff0c\u53c8\u6216\u8005\u8fd9\u4e2a I/O \u662f\u5426\u5c31\u7eea\uff0c\u8fd9\u5f88\u4e0d\u5408\u7406\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e8b\u65e0\u5de8\u7ec6\u5730\u53bb\u8d1f\u8d23\u68c0\u67e5\u610f\u5916\u662f\u5426\u53d1\u751f\uff0c\u800c\u662f\u5e94\u5f53\u63d0\u4f9b\u4e00\u4e2a\u4e0a\u62a5\u610f\u5916\u7684\u63a5\u53e3\uff0c\u8ba9\u4ea7\u751f\u610f\u5916\u7684\u4eba\u81ea\u884c\u4e0a\u62a5\u8fd9\u4e9b\u610f\u5916\u3002\u5728\u5177\u4f53\u786c\u4ef6\u7684\u5b9e\u73b0\u4e0a\uff0c\u4f1a\u6709\u4e24\u6761\u4e13\u95e8\u8868\u793a\u4e2d\u65ad\u4fe1\u53f7\u7684\u7ebf\uff08\u7a0d\u5019\u4f1a\u5728\u4e2d\u65ad\u5c4f\u853d\u4e2d\u8bb2\u5230\uff09\uff0cCPU \u4f1a\u5728\u6bcf\u4e00\u6761\u6307\u4ee4\u7ed3\u675f\u540e\u68c0\u6d4b\u662f\u5426\u6709\u4e2d\u65ad\u53d1\u751f\uff0c\u800c\u5728\u8f6f\u4ef6\u4e0a\u5c31\u4f53\u73b0\u4e3a\u6bcf\u5f53\u6709\u4e2d\u65ad\u53d1\u751f\u65f6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5c31\u9700\u8981\u53bb\u5904\u7406\u3002\u7531\u4e8e\u4e2d\u65ad\u7684\u5f3a\u5927\u7279\u6027\uff0c\u4ece\u6700\u65e9\u4ec5\u7684\u5904\u7406\u786c\u4ef6\u72b6\u6001\uff0c\u5230\u5904\u7406\u8f6f\u4ef6\u9519\u8bef\u548c\u4f5c\u4e3a\u4e00\u79cd\u7c7b\u4f3c\u51fd\u6570\u7684\u624b\u6bb5\uff0c\u4e2d\u65ad\u7684\u5e94\u7528\u8303\u56f4\u8d8a\u6765\u8d8a\u5e7f\uff0c\u5b83\u7684\u6982\u5ff5\u968f\u7740\u5e94\u7528\u8303\u56f4\u4e5f\u4e0d\u65ad\u6269\u5927\u3002

\u4e2d\u65ad\u5411\u91cf\u8868

\u7531\u4e8e\u4e2d\u65ad\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u9891\u7e41\u7684\u5904\u7406\u5404\u79cd\u4e2d\u65ad\uff0c\u5904\u7406\u6bcf\u4e00\u79cd\u4e2d\u65ad\u90fd\u9700\u8981\u4e00\u4e2a\u7279\u5b9a\u7684\u65b9\u6cd5\uff0c\u56e0\u6b64\uff0c\u4e00\u79cd\u5feb\u901f\u5b9a\u4f4d\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\u7684\u624b\u6bb5\u5c31\u663e\u5f97\u5c24\u4e3a\u91cd\u8981\u3002

\u4e2d\u65ad\u5411\u91cf\u8868(Interrupt Vector Table)\u901a\u8fc7\u4e2d\u65ad\u53f7\u6765\u7d22\u5f15\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\uff0c\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u968f\u673a\u8bbf\u95ee\u201d\uff0c\u5927\u5927\u52a0\u901f\u4e86\u4e2d\u65ad\u5904\u7406\u7684\u901f\u5ea6\u3002

\u6839\u636e\u4e2d\u65ad\u662f\u5426\u7531\u7a0b\u5e8f\u4ea7\u751f\uff0c\u4e2d\u65ad\u53ef\u4ee5\u5206\u4e3a\u5916\u4e2d\u65ad\uff08\u72ed\u4e49\u7684\u4e2d\u65ad\uff0c\u7531\u786c\u4ef6\u4ea7\u751f\uff09\u548c\u5185\u4e2d\u65ad\uff08\u5f02\u5e38...\uff0c\u4e3b\u8981\u7531\u7a0b\u5e8f\u4ea7\u751f\uff09\u3002\u8fd9\u91cc\u6709\u5f88\u591a\u6982\u5ff5\uff1ainstruction, exception, trap, abort, ...\uff0c\u8fd9\u90e8\u5206\u533a\u5206\u8bf7\u5927\u5bb6\u81ea\u884c\u5bfb\u627e\u8d44\u6599\u53c2\u8003\uff0c\u6211\u5728\u8fd9\u91cc\u653e\u51e0\u4e2a\u53c2\u8003\u94fe\u63a5\u3002

\u76f8\u5173\u9605\u8bfb

\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e2d\u65ad\u4e00\u65e6\u53d1\u751f\u5c31\u7acb\u523b\u88ab\u89e3\u51b3\uff0c\u4f46\u662f\u4e2d\u65ad\u5904\u7406\u4e5f\u540c\u6837\u9700\u8981\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u65ad\u4e5f\u6709\u53ef\u80fd\u4ea7\u751f\u51b2\u7a81\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u9700\u8981\u4e00\u7cfb\u5217\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

  1. \u663e\u7136\uff0c\u4e2d\u65ad\u4e4b\u95f4\u4ea6\u6709\u533a\u522b\uff0c\u6709\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u201c\u81f4\u547d\u9519\u8bef\u201d\u8fd9\u4ef6\u4e8b\uff0c\u663e\u7136\u6bd4\u6253\u5370\u673a\u5c31\u7eea\u66f4\u91cd\u8981\uff0c\u56e0\u6b64\uff0c\u4e2d\u65ad\u9700\u8981\u5206\u7ea7\u673a\u5236\uff0c\u4ee5\u533a\u5206\u4e2d\u65ad\u7684\u4f18\u5148\u7ea7\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728\u5904\u7406\u4e2d\u65ad\u65f6\uff0c\u4f18\u5148\u5904\u7406\u4f18\u5148\u7ea7\u9ad8\u7684\u4e2d\u65ad\uff1b
  2. \u4e2d\u65ad\u5e76\u4e0d\u662f\u968f\u65f6\u968f\u5730\u90fd\u80fd\u53d1\u751f\u7684\uff0c\u201c\u4ee3\u7406\u4eba\u201d\u5728\u8d70\u72ec\u6728\u6865\u65f6\u4e0d\u5e94\u5f53\u6682\u505c\u53bb\u5904\u7406\u836f\u54c1\u7f3a\u8d27\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6765\u8bf4\uff0c\u6709\u8bb8\u591a\u539f\u5b50\u6027\u7684\u884c\u4e3a\u662f\u4e0d\u53ef\u88ab\u4e2d\u65ad\u7684\uff0c\u4e5f\u6709\u4e00\u4e9b\u91cd\u8981\u7684\u4efb\u52a1\u662f\u4e0d\u5e94\u5f53\u88ab\u666e\u901a\u7684\u4e2d\u65ad\u6253\u6270\u7684\uff0c\u8fd9\u5c31\u6d89\u53ca\u5230\u4e2d\u65ad\u5c4f\u853d\u95ee\u9898\uff1b

\u5b58\u7591

\u8fd9\u5c31\u9700\u8981\u6211\u4eec\u8c08\u5230\u4e2d\u65ad\u7684\u786c\u4ef6\u8bbe\u8ba1\uff0c\u4e00\u79cd\u6bd4\u8f83\u666e\u901a\u7684\u8bbe\u8ba1\u662f\uff0c\u51c6\u5907 maskable interrupt-request line \u548c non-maskable interrupt-request line \u4e24\u6761\u4e2d\u65ad\u8bf7\u6c42\u7ebf\uff0c\u524d\u8005\u7528\u4e8e\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u540e\u8005\u7528\u4e8e\u4e0d\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5728\u6bcf\u4e2a\u6307\u4ee4\u540e\u68c0\u67e5\u8fd9\u4e2d\u65ad\u7ebf\u4e0a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\uff0c\u800c\u5982\u679c\u6b64\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5c4f\u853d\u4e86\u4e2d\u65ad\uff0c\u90a3\u4e48\u5c31\u4e0d\u4f1a\u68c0\u67e5 maskable interrupt-request line \u4e0a\u7684\u4e2d\u65ad\u8bf7\u6c42\u3002

\u9700\u8981\u6ce8\u610f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u53d1\u73b0\u4e2d\u65ad\u540e\u5e76\u4e0d\u662f\u4e8c\u8bdd\u4e0d\u8bf4\u9a6c\u4e0a\u53bb\u5904\u7406\u4e2d\u65ad\u7684\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u4e2d\u65ad\u5904\u7406\u5b8c\u6210\u540e\u4ecd\u80fd\u7ee7\u7eed\u5f53\u524d\u4efb\u52a1\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u4fdd\u5b58\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\uff0c\u4ee5\u4fbf\u5b8c\u6210\u4e2d\u65ad\u5904\u7406\u540e\u6062\u590d\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u65f6\u5668","title":"\u8ba1\u65f6\u5668","text":"

\u867d\u7136\u770b\u8d77\u6765\u5f88\u4e0d\u8d77\u773c\uff0c\u4f46\u8ba1\u65f6\u5668(timer)\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u4e1c\u897f\u3002\u8ba1\u65f6\u5668\u9700\u8981\u4e00\u4e2a\u56fa\u5b9a\u9891\u7387\u7684\u65f6\u949f\u4ee5\u53ca\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u5728\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u4ee4\u8ba1\u6570\u5668\u51cf 1\uff0c\u5f53\u8ba1\u6570\u5668\u5f52\u96f6\u65f6\u4ea7\u751f\u4e2d\u65ad\uff0c\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u5b9a\u7684\u65f6\u5df2\u7ecf\u5230\u4e86\u3002

\u5b83\u7684\u529f\u80fd\u867d\u7136\u57fa\u7840\u4f46\u662f\u5341\u5206\u91cd\u8981\uff0c\u4f8b\u5982\u5206\u65f6\u7cfb\u7edf\u4e2d\u5c31\u9700\u8981\u8ba1\u6570\u5668\u6765\u63a7\u5236\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u53c8\u6bd4\u5982\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u5b9a\u671f\u68c0\u67e5\u5185\u5b58\u4e2d\u7684\u8fdb\u7a0b\uff0c\u4ee5\u9632\u6b62\u8fdb\u7a0b\u4e00\u76f4\u5360\u7528\u7cfb\u7edf\u8d44\u6e90\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u8ba1\u65f6\u5668\u7684\u5e2e\u52a9\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7279\u6743\u6a21\u5f0f","title":"\u7279\u6743\u6a21\u5f0f","text":"

\u6211\u4eec\u524d\u9762\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u67d0\u4e9b\u64cd\u4f5c\u662f\u5371\u9669\u7684\uff0c\u6709\u53ef\u80fd\u5a01\u80c1\u5230\u81ea\u8eab\u6b63\u5e38\u8fd0\u4f5c\u7684\uff08\u5982\u4e0e\u786c\u4ef6\u76f4\u63a5\u76f8\u5173\u7684\u884c\u4e3a\u3001\u63a7\u5236 CPU \u8fd0\u884c\u89c4\u5219\u7684\u884c\u4e3a\u7b49\uff09\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u4e0d\u5e94\u5f53\u88ab\u7528\u6237\u7a0b\u5e8f\u76f4\u63a5\u6267\u884c\u3002\u4e00\u79cd\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u5212\u5206\u5e38\u89c4\u64cd\u4f5c\u548c\u5371\u9669\u64cd\u4f5c\uff0c\u5141\u8bb8\u7528\u6237\u7a0b\u5e8f\u6267\u884c\u5e38\u89c4\u64cd\u4f5c\uff0c\u800c\u5371\u9669\u64cd\u4f5c\u5219\u9700\u8981\u59d4\u6258\u4e13\u4e1a\u4eba\u58eb\u4ee3\u4e3a\u6267\u884c\u3002\u800c\u8fd9\u5c31\u662f\u7279\u6743\u6a21\u5f0f(Privileged Mode)\u7684\u57fa\u672c\u601d\u8def\u3002

\u5de5\u4e1a\u4e0a\u7684\u7279\u6743\u6a21\u5f0f\u53ef\u80fd\u4f1a\u6709\u591a\u79cd\u590d\u6742\u7684\u5b9e\u73b0\u5f62\u5f0f\uff0c\u4f46\u662f\u6211\u4eec\u8fd9\u91cc\u53ea\u8bb2\u6700\u7b80\u5355\u7684\u4e00\u79cd\uff0c\u5373\u53cc\u6a21\u5f0f(Dual-Mode)\u3002\u53cc\u6a21\u5f0f\u4e0b\uff0cCPU \u6709\u4e24\u79cd\u8fd0\u884c\u6a21\u5f0f\uff0c\u4e00\u79cd\u662f\u7528\u6237\u6001(User Mode)\uff08\u76ee\u6001\uff09\uff0c\u4e00\u79cd\u662f\u5185\u6838\u6001(Kernel Mode)\uff08\u7ba1\u6001\uff0c\u6838\u5fc3\u6001\uff09\u3002Mode Bit \u4e3a 0\uff0c\u8868\u793a CPU \u5de5\u4f5c\u5728\u5185\u6838\u6001\uff0cMode Bit \u4e3a 1 \u65f6\uff0cCPU \u5de5\u4f5c\u5728\u7528\u6237\u6001\u3002

\u540c\u65f6\uff0c\u6211\u4eec\u5c06\u90a3\u4e9b\u201c\u5371\u9669\u201d\u7684\u6307\u4ee4\u79f0\u4e3a\u7279\u6743\u6307\u4ee4(privileged instruction)\uff0c\u4f8b\u5982 I/O \u63a7\u5236\uff0c\u8ba1\u65f6\u5668\u7ba1\u7406\uff0c\u4e2d\u65ad\u7ba1\u7406\u7b49\u3002\u8fd9\u4e9b\u6307\u4ee4\u53ea\u80fd\u5728\u5185\u6838\u6001\u4e0b\u6267\u884c\uff0c\u800c\u7528\u6237\u6001\u4e0b\u6267\u884c\u8fd9\u4e9b\u6307\u4ee4\u65f6\u4f1a\u8ba4\u4e3a\u8fd9\u6761\u6307\u4ee4\u4e0d\u5b58\u5728\u3002

\u95ee\u9898\u5c1a\u672a\u89e3\u51b3

\u73b0\u5728\u6211\u4eec\u5c06\u5371\u9669\u64cd\u4f5c\u548c\u76f8\u5bf9\u5b89\u5168\u7684\u64cd\u4f5c\u9694\u79bb\u5f00\u6765\u4e86\uff0c\u4f46\u662f\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u7528\u6237\u7a0b\u5e8f\u5c31\u4e0d\u9700\u8981\u4f7f\u7528\u90a3\u4e9b\u5371\u9669\u64cd\u4f5c\u4e86\uff0c\u5355\u7eaf\u7684\u9694\u79bb\u5e76\u4e0d\u80fd\u89e3\u51b3\u95ee\u9898\uff0c\u7528\u6237\u7a0b\u5e8f\u4ecd\u7136\u5b58\u5728\u9700\u8981\u4f7f\u7528\u7279\u6743\u6307\u4ee4\u7684\u9700\u6c42\u3002

\u8fd9\u4e9b\u9700\u6c42\u5f80\u5f80\u662f\u53ef\u4ee5\u88ab\u62bd\u8c61\u7684\u3001\u88ab\u5c01\u88c5\u7684\u3002\u5c31\u597d\u50cf\u300c\u201c\u7528\u6237\u201d\u5411\u201c\u67dc\u53f0\u201d\u7d22\u8981\u5e93\u623f\u94a5\u5319\uff0c\u4ee5\u4fbf ta \u80fd\u53bb\u5e93\u623f\u62ff\u7f3a\u8d27\u7684\u8d27\u7269\u300d\u8fd9\u4ef6\u4e8b\u662f\u4e0d\u5408\u7406\u7684\uff0c\u6211\u4eec\u65e0\u6cd5\u63a7\u5236\u201c\u7528\u6237\u201d\u5b9e\u9645\u62ff\u201c\u94a5\u5319\u201d\u505a\u4e86\u4ec0\u4e48\uff0c\u800c\u201c\u94a5\u5319\u201d\u7684\u6ee5\u7528\u53c8\u4f1a\u5bfc\u81f4\u201c\u67dc\u53f0\u201d\u9677\u5165\u5371\u9669\u4e2d\uff1b\u4f46\u662f\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u662f\u5408\u7406\u7684\u3002

\u53cd\u8fc7\u6765\u8bb2\uff0c\u867d\u7136\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u8fd9\u4e2a\u4efb\u52a1\u5fc5\u987b\u4f7f\u7528\u5e93\u623f\u201c\u94a5\u5319\u201d\u624d\u80fd\u8fdb\u884c\uff0c\u4f46\u662f\u65e0\u8bba\u5982\u4f55\u8fd9\u4e2a\u201c\u94a5\u5319\u201d\u4e5f\u53ea\u4f1a\u88ab\u201c\u67dc\u53f0\u201d\u7528\u6765\u83b7\u53d6\u5e93\u623f\u91cc\u7684\u7279\u5b9a\u8d27\u7269\uff0c\u800c\u4e0d\u4f1a\u53d1\u751f\u8bf8\u5982\u201c\u7528\u6237\u201d\u5e26\u7740\u5341\u516b\u8f66\u9762\u5305\u4eba\u628a\u5e93\u623f\u6d17\u52ab\u4e00\u7a7a\u7684\u60c5\u51b5\u3002

\u64cd\u4f5c\u7cfb\u7edf\u53ea\u9700\u8981\u5c01\u88c5\u597d\u4e00\u7cfb\u5217\u7c7b\u4f3c\u8fd9\u79cd\u7684\u9700\u6c42-\u7ed3\u679c\u7684\u5904\u7406\u65b9\u6848\uff0c\u8ba9\u7528\u6237\u5728\u6709\u9700\u8981\u7684\u65f6\u5019\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u8fd9\u4e9b\u65b9\u6848\uff0c\u5728\u6267\u884c\u5f53\u524d\u4efb\u52a1\u7684\u65f6\u5019\u5c06\u63a7\u5236\u6743\u8ba9\u6e21\u7ed9\u64cd\u4f5c\u7cfb\u7edf\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5b8c\u6210\u540e\u518d\u8fd8\u56de\u63a7\u5236\u6743\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5c06\u7279\u6743\u6307\u4ee4\u9694\u79bb\u5728\u5185\u6838\u6001\uff0c\u540c\u65f6\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u5b8c\u6210\u9700\u6c42\u3002

\u800c\u90a3\u4e48\u5728\u5177\u4f53\u5b9e\u73b0\u4e0a\uff0c\u8fd9\u4e00\u6b65\u662f\u901a\u8fc7 trap \u5b9e\u73b0\u7684\u3002

Transition from user to kernel mode.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7cfb\u7edf\u8c03\u7528","title":"\u7cfb\u7edf\u8c03\u7528","text":"

Examples of W&U system calls.

\u7cfb\u7edf\u8c03\u7528(System Call)\u662f\u7cfb\u7edf\u5411\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u670d\u52a1\u7684\u4e00\u4e2a\u63a5\u53e3\uff0c\u5b83\u4eec\u7ecf\u5e38\u4ee5 C/C++ \u51fd\u6570\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u5bf9\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u63a5\u8fd1\u5e95\u5c42\u7684\u4efb\u52a1\uff0c\u4e5f\u53ef\u80fd\u662f\u901a\u8fc7\u6c47\u7f16\u7f16\u5199\u7684\u3002

\u4f46\u8bf4\u5230\u5e95\uff0c\u7cfb\u7edf\u8c03\u7528\u8fd8\u662f\u76f8\u5bf9\u5e95\u5c42\u7684\u8bbe\u8ba1\uff0c\u901a\u5e38\u7684\u5f00\u53d1\u5e76\u4e0d\u57fa\u4e8e\u5982\u6b64\u5e95\u5c42\u7684\u8bbe\u8ba1\u5c55\u5f00\u3002\u66f4\u5e38\u89c1\u7684\u662f\u5229\u7528\u5404\u79cd\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\u7684 Application Programming Interface, API \u8fdb\u884c\u5f00\u53d1\u3002

API \u662f\u4e00\u4e2a\u975e\u5e38\u5e38\u89c1\u7684\u6982\u5ff5\uff0c\u5728\u6211\u770b\u6765\u7cfb\u7edf\u8c03\u7528\u672c\u8eab\u4e5f\u662f\u4e00\u79cd API\u3002API \u7684\u6838\u5fc3\u601d\u60f3\u662f\u8ba9\u8c03\u7528\u8005\u53ea\u9700\u8981\u77e5\u9053\u5982\u4f55\u4e0e\u88ab\u8c03\u7528\u8005\u4ea4\u6d41\u4ee5\u5b9e\u73b0\u76ee\u7684\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u5177\u4f53\u5b9e\u73b0\u3002\u8fd9\u540c\u65f6\u4e5f\u6697\u793a\u7740\uff0c\u53ea\u8981 API \u4e00\u81f4\uff0c\u540c\u6837\u7684\u7a0b\u5e8f\u5728\u4e0d\u540c\u7684\u5e73\u53f0\u4e0a\u4e5f\u80fd\u76f4\u63a5\u7f16\u8bd1\u540e\u8fd0\u884c\u3002

\u663e\u7136\uff0cAPI \u4e0e\u7f16\u7a0b\u8bed\u8a00\u5f80\u5f80\u662f\u5f3a\u76f8\u5173\u7684\uff0c\u7279\u5b9a\u7f16\u7a0b\u8bed\u8a00\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u8fd0\u884c\u4e5f\u662f\u9700\u8981\u4e00\u5b9a\u7684\u201c\u73af\u5883\u201d\u7684\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u8fd0\u884c\u65f6\u73af\u5883(run-time environment, RTE)\u3002RTE \u901a\u5e38\u5305\u62ec\u4e86\u7f16\u8bd1\u5668(compilers)\u3001\u89e3\u91ca\u5668(interpreters)\u3001\u5e93(libraries)\u548c\u88c5\u8f7d\u5668(loaders)\u7b49\uff0c\u5b83\u4eec\u5171\u540c\u7ec4\u6210\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684\u8fd0\u884c\u65f6\u73af\u5883\u3002

\u76f8\u5173\u9605\u8bfb \u601d\u8003\u9898 \u9898\u9762\u89e3\u6790

\u8fa8\u6790\u5e93\u51fd\u6570\u4e0e\u7cfb\u7edf\u8c03\u7528\uff1f

\u5e93\u51fd\u6570\u8fd0\u884c\u5728\u7528\u6237\u7a7a\u95f4\u800c\u7cfb\u7edf\u8c03\u7528\u8fd0\u884c\u5728\u5185\u6838\u7a7a\u95f4\u3002\u5927\u90e8\u5206\u5e93\u51fd\u6570\u53ef\u80fd\u4f7f\u7528\u7cfb\u7edf\u8c03\u7528\u6765\u5b9e\u73b0\u76ee\u7684\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","title":"\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","text":"

The role of the linker and loader.

\u8bf4\u4e86\u8fd9\u4e48\u591a\uff0c\u90a3\u4e48\u64cd\u4f5c\u7cfb\u7edf\u5230\u5e95\u662f\u5982\u4f55\u6267\u884c\u4e00\u4e2a\u7a0b\u5e8f\u7684\u5462\uff1f\u4ee5 C \u4e3a\u4f8b\uff0c\u4e00\u4e2a\u5199\u5b8c\u7684\u4ee3\u7801\u9700\u8981\u7ecf\u8fc7\u7f16\u8bd1\u3001\u94fe\u63a5\u3001\u88c5\u8f7d\u4e09\u4e2a\u6b65\u9aa4\uff0c\u624d\u80fd\u6210\u4e3a\u4e00\u4e2a\u5728\u5185\u5b58\u4e2d\u7684\uff0c\u53ef\u4ee5\u88ab\u6267\u884c\u7684\u7a0b\u5e8f\u3002

\u7b80\u5355\u6765\u8bf4\uff0c\u7f16\u8bd1\u5668\u9996\u5148\u5c06\u82e5\u5e72 .c \u6e90\u6587\u4ef6\u7f16\u8bd1\u4e3a\u82e5\u5e72 .o \u6587\u4ef6\uff08\u8fd9\u91cc\u5408\u5e76\u4e86\u9884\u5904\u7406\u3001\u7f16\u8bd1\u3001\u6c47\u7f16\u6b65\u9aa4\uff09\uff0c\u8fd9\u4e9b .o \u6587\u4ef6\u88ab\u79f0\u4e3a\u53ef\u91cd\u5b9a\u4f4d\u76ee\u6807\u6587\u4ef6(relocatable object file)\uff0c\u5176\u5b58\u5728\u5f62\u5f0f\u4e3a\u673a\u5668\u7801\uff1b\u968f\u540e\u94fe\u63a5\u5668\u5c06\u82e5\u5e72 .o \u6587\u4ef6\u8fde\u5e26\u6240\u9700\u8981\u7684\u4e00\u4e9b\u5e93\u6587\u4ef6\uff08\u5982 .a \u6587\u4ef6\uff09\u94fe\u63a5\u4e3a\u4e00\u4e2a\u53ef\u6267\u884c\u76ee\u6807\u6587\u4ef6(executable object file)\u3002

\u7279\u522b\u7684\uff0c\u94fe\u63a5\u5206\u4e3a\u9759\u6001\u94fe\u63a5\u548c\u52a8\u6001\u94fe\u63a5\u4e24\u79cd\u3002\u9759\u6001\u94fe\u63a5\u5c06\u5e93\u6587\u4ef6\u7684\u4ee3\u7801\u76f4\u63a5\u5408\u5e76\u8fdb\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u52a8\u6001\u94fe\u63a5\u4ec5\u4ec5\u5c06\u5e93\u6587\u4ef6\u7684\u5f15\u7528\u4fe1\u606f\u5199\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u518d\u53bb\u5bfb\u627e\u8fd9\u4e9b\u5e93\u6587\u4ef6\u3002

gcc -E main.c -o main.i # pre-process\ngcc -S main.i -o main.s # compile to assembly code\ngcc -c main.s -o main.o # assemble to object file\ngcc main.o -o main      # link\n./main                  # (load and) execute\n
\u4e00\u4e9b\u64cd\u4f5c

\u53ef\u4ee5\u53d1\u73b0\uff0c\u52a8\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u6bd4\u9759\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u8981\u5c0f\u4e0d\u5c11\u3002

  1. \u5e76\u53d1\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u95f4\u95f4\u9694\u5185\u53d1\u751f\uff0c\u800c\u5e76\u884c\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u523b\u53d1\u751f\u3002\u903b\u8f91\u4e0a\uff0c\u5e76\u884c\u662f\u5e76\u53d1\u7684\u5b50\u96c6\u3002\u00a0\u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/","title":"Unit 1: \u8fdb\u7a0b\u7ba1\u7406 | Process Management","text":"

\u7ea6 6600 \u4e2a\u5b57 78 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \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

\u4e0b\u56fe\u662f\u8fdb\u7a0b\u5728\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7528\u6237\u90e8\u5206\u7684\u7ec4\u6210\uff1a

\u7528\u6237\u90e8\u5206

\u53ef\u4ee5\u53d1\u73b0\uff0cText \u548c Data \u90e8\u5206\u6240\u9700\u8981\u7684\u7a7a\u95f4\u5728\u4e00\u5f00\u59cb\u5c31\u88ab\u786e\u5b9a\uff0c\u800c Heap \u548c Stack \u90fd\u53ef\u80fd\u52a8\u6001\u7684\u6269\u5c55\u548c\u6536\u7f29\u3002\u89c2\u5bdf\u53f3\u56fe\uff0cHeap \u548c Stack \u662f\u76f8\u5411\u6269\u5c55\u7684\uff0c\u4e8e\u662f\u6574\u4e00\u5757\u7684\u5927\u5c0f\u80fd\u591f\u56fa\u5b9a\u4e0b\u6765\uff0c\u800c\u5728\u5185\u90e8\u8fdb\u884c\u6709\u9650\u5236\u7684\u52a8\u6001\u5206\u914d\u3002\u5f53\u7136\uff0cHeap \u548c Stack \u7684\u533a\u57df\u5e76\u4e0d\u4f1a\u4ea4\u53c9\u3002

memory layout of a C program

\u4e4b\u6240\u4ee5\u628a\u6709\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u548c\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u5206\u5f00\u6765\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u5728\u4e00\u5f00\u59cb\u53ea\u5b58\u50a8\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u7684\u5927\u5c0f\uff0c\u800c\u5728\u771f\u6b63\u7b2c\u4e00\u6b21\u8bbf\u95ee\u7684\u65f6\u5019\u624d\u5206\u914d\u5185\u5b58\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u51cf\u5c11\u5185\u5b58\u5360\u7528\u3002

\u901a\u5e38\u6765\u8bf4\uff0c\u672a\u521d\u59cb\u5316\u7684\u9759\u6001\u53d8\u91cf\u4e00\u822c\u90fd\u88ab\u653e\u5728 .bss \u6bb5\uff0c\u800c\u5728\u88ab\u521d\u59cb\u5316\u7684\u65f6\u5019\u79fb\u52a8\u5230 .data \u6bb5\u30021

\u800c\u653e\u5728\u5185\u6838\u90e8\u5206\u7684\u5185\u5bb9\uff0c\u5219\u66f4\u4fa7\u91cd\u4e8e\u8fdb\u7a0b\u7684\u63a7\u5236\u4fe1\u606f\uff0c\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u3002

\u5185\u6838\u90e8\u5206

\u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7528\u6765\u63cf\u8ff0\u8fdb\u7a0b\u7684\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u5305\u542b\u4e86\u8fdb\u7a0b\u7684\u6240\u6709\u4fe1\u606f\uff0c\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u91cd\u8981\u7684\u6570\u636e\u7ed3\u6784\u4e4b\u4e00\u3002\u53ef\u4ee5\u8bf4\uff0cPCB \u662f\u8fdb\u7a0b\u5b58\u5728\u7684\u552f\u4e00\u6807\u5fd7\u3002

\u901a\u5e38\u6765\u8bf4\uff0cPCB \u53ef\u80fd\u5305\u542b\u8fd9\u4e9b\u5185\u5bb9\uff1a

\u4e24\u4e2a\u90e8\u5206\u5728\u903b\u8f91\u4e0a\u7684\u5173\u7cfb\u662f\uff0c\u7528\u6237\u90e8\u5206\u5212\u5206\u5e76\u5b9e\u9645\u5b58\u50a8\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u6570\u636e\u8d44\u6e90\uff08\u5305\u62ec\u7a0b\u5e8f\u8fd0\u884c\u7684\u4ee3\u7801\uff09\uff0c\u800c\u5185\u6838\u90e8\u5206\u5b58\u50a8\u8fdb\u7a0b\u7684\u5143\u6570\u636e\uff0c\u5305\u62ec\u63a7\u5236\u4fe1\u606f\u4e0e\u7528\u6237\u90e8\u5206\u4e2d\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u7684\u5206\u914d\u548c\u4f7f\u7528\u60c5\u51b5\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u72b6\u6001","title":"\u8fdb\u7a0b\u7684\u72b6\u6001","text":"

\u5728\u5355\u673a\u8bed\u5883\u4e0b\uff0c\u8fdb\u7a0b\u8c03\u5ea6\u4e00\u4e2a\u6bd4\u8f83\u6838\u5fc3\u7684\u90e8\u5206\u5c31\u662f\u5c06 CPU \u8d44\u6e90\u7ed9\u54ea\u4e2a\u4efb\u52a1\u7528\u3002\u800c\u5e76\u4e0d\u662f\u4efb\u4f55\u8fdb\u7a0b\u5728\u4efb\u4f55\u65f6\u523b\u90fd\u53ef\u4ee5\u76f4\u63a5\u83b7\u5f97 CPU \u8d44\u6e90\u5e76\u76f4\u63a5\u5f00\u59cb\u4f7f\u7528\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u5bf9\u8fdb\u7a0b\u7684\u72b6\u6001\u8fdb\u884c\u5efa\u6a21\u3002

\u8fdb\u7a0b\u5728\u5c31\u7eea\u6001\u9700\u8981\u7b49\u5f85 CPU \u8d44\u6e90\u7684\u6d3e\u53d1(dispatch)\uff0c\u63a5\u53d7\u8c03\u5ea6\uff1b\u5728\u963b\u585e\u6001\u9700\u8981\u7b49\u5f85\u5bf9\u5e94\u7684 I/O \u5b8c\u6210\u6216\u4e8b\u4ef6\u5b8c\u6210\uff0c\u56e0\u800c\u5b58\u5728\u4e00\u79cd\u7ed3\u6784\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u4e9b\u201c\u76f8\u5bf9\u9759\u6b62\u201d\u7684\u8fdb\u7a0b\u3002\u901a\u5e38\u4f7f\u7528\u5c31\u7eea\u961f\u5217(ready queue)\u548c\u7b49\u5f85\u961f\u5217(wait queue)\u6765\u5b9e\u73b0\uff0c\u5176\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

\u5b9e\u9645\u5b9e\u73b0\u4e2d\uff0c\u7531\u4e8e\u7b49\u5f85\u7684 I/O \u6216\u4e8b\u4ef6\u4e0d\u540c\uff0c\u53ef\u80fd\u7ef4\u62a4\u591a\u4e2a\u7b49\u5f85\u961f\u5217\uff0c\u4e8e\u662f\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u7684\u60c5\u51b5\u53ef\u80fd\u5982\u4e0b\uff1a

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7ba1\u7406","title":"\u8fdb\u7a0b\u7ba1\u7406","text":"

\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u8ba8\u8bba\u4e86\u8fdb\u7a0b\u7684\u5f62\u5f0f\u548c\u4e00\u4e2a\u4e2a\u79bb\u6563\u7684\u72b6\u6001\uff0c\u73b0\u5728\u6211\u4eec\u6765\u8bb2\u8bb2\u8fdb\u7a0b\u5728\u51e0\u4e2a\u9636\u6bb5\u7684\u52a8\u6001\u8fc7\u7a0b\u3002

\u7528\u6237\u8fdb\u7a0b\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u603b\u4f53\u4e0a\u6765\u8bb2\u9075\u5faa\u4e00\u4e2a\u6811\u72b6\u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u552f\u4e00\u6807\u8bc6\u7b26\u8fdb\u7a0b\u53f7\uff08\u901a\u5e38\u88ab\u79f0\u4e3a pid\uff0c\u4f46\u5728\u7279\u5b9a\u8bed\u5883\u4e0b\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u542b\u4e49\uff09\u3002\u5982\u4e0b\u56fe\u662f Linux \u7684\u4e00\u4e2a\u8fdb\u7a0b\u6811\u3002

\u4f60\u4e5f\u53ef\u4ee5\u5728 Linux \u4e2d\u4f7f\u7528 pstree \u6765\u67e5\u770b\u8fdb\u7a0b\u6811\u3002 \u8a00\u4e0b\u4e4b\u610f\u5c31\u662f\u8fdb\u7a0b\u4e4b\u95f4\u5b58\u5728\u4e00\u79cd\u7236\u5b50\u5173\u7cfb\uff0c\u5373 child \u8fdb\u7a0b\u662f\u7531 parent \u8fdb\u7a0b\u521b\u5efa\u7684\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9664\u4e86\u81ea\u5df1\u7684 pid \u8fd8\u6709 ppid \u6765\u6807\u8bc6\u5b83\u7684 parent \u8fdb\u7a0b\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u521b\u5efa","title":"\u8fdb\u7a0b\u7684\u521b\u5efa","text":"

child \u8fdb\u7a0b\u7684\u8d44\u6e90\u53ef\u80fd\u76f4\u63a5\u6765\u81ea\u64cd\u4f5c\u7cfb\u7edf\u7684\u5206\u914d\uff0c\u4e5f\u53ef\u80fd\u6765\u81ea parent \u8fdb\u7a0b\u7684\u5206\u914d\uff0c\u9650\u5236\u4f7f\u7528\u540e\u8005\u7684\u597d\u5904\u662f\u80fd\u591f\u907f\u514d\u56e0\u4e3a\u521b\u5efa\u592a\u591a\u5b50\u8fdb\u7a0b\u800c\u5bfc\u81f4\u8d44\u6e90\u4e0d\u591f\u7528\u3002\u7279\u522b\u7684\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u8fd9\u68f5\u6811\u7684\u6839\u662f systemd\uff0c\u5386\u53f2\u4e0a\u4e5f\u66fe\u53eb\u8fc7 init\uff0c\u5b83\u662f\u64cd\u4f5c\u7cfb\u7edf\u542f\u52a8\u540e\u8fd0\u884c\u7684\u7b2c\u4e00\u4e2a\u7528\u6237\u8fdb\u7a0b\uff0c\u81f3\u5c11\u5728 Linux \u4e2d\uff0c\u5b83\u7684 pid \u88ab\u5206\u914d\u4e3a 1\uff0c\u800c\u5b83\u7684 ppid \u662f 0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u4e2a\u8fdb\u7a0b\u7684 parent \u662f scheduler \u800c\u975e\u4e00\u4e2a\u8fdb\u7a0b2\u3002

\u5728 Linux \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 fork \u6765\u521b\u5efa\u4e00\u4e2a child \u8fdb\u7a0b\uff0c\u5728\u8fd9\u91cc\u5148\u5f15\u5165\u5982\u4f55\u5b9e\u73b0\u662f\u4e3a\u4e86\u5f15\u5165\u4e00\u4e2a\u53ef\u4ee5\u501f\u6765\u63cf\u8ff0\u8fc7\u7a0b\u7684\u8bed\u8a00\uff0c\u6211\u4eec\u4ee5\u4e0b\u9762\u7684 C \u7a0b\u5e8f\u4e3a\u4f8b\u5c55\u5f00\u4e4b\u540e\u7684\u8ba8\u8bba\u3002

#include <stdio.h>\n#include <unistd.h>\n#include <sys/wait.h>\n#include <sys/types.h>\n\nint main() {\nprintf(\"A process starts!\\n\");\n\npid_t pid;\npid = fork();\nif (pid < 0) {\nprintf(\"Fork failed!\\n\");\n} else if (pid == 0) {\n// sleep(1);\nprintf(\"pid is zero, so it's child process!\\n\");\n} else {\n// wait(NULL);\n// sleep(1);\nprintf(\"pid is nonzero thus it's parent process!\\n\");\n}\n}\n

\u7b2c 10 \u884c\u9ad8\u4eae\u7684 fork() \u8bed\u53e5\u521b\u5efa\u4e86\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u8be5\u8fdb\u7a0b\u53ea\u6709\u8fdb\u7a0b\u53f7\u4e0e parent \u8fdb\u7a0b\u4e0d\u4e00\u6837\uff0c\u540c\u65f6\u901a\u8fc7\u68c0\u67e5\u8fd4\u56de\u503c pid \u6765\u5224\u65ad\u5c5e\u4e8e parent \u8fd8\u662f child\u3002

\u5982\u679c\u7b2c 18 \u884c\u4ecd\u7136\u88ab\u6ce8\u91ca\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u8bf6 child \u8fdb\u7a0b\u5c06\u5e76\u53d1\u6267\u884c\uff0c\u5373\u5b8c\u6210 fork() \u540e\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u4ece 11 \u884c\u5f00\u59cb\u7ee7\u7eed\u5411\u4e0b\u5e76\u53d1\u7684\u6267\u884c\uff0c\u4e92\u4e0d\u963b\u585e\uff1b\u5982\u679c 18 \u884c\u7684\u6ce8\u91ca\u88ab\u53d6\u6d88\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u5c06\u7b49\u5f85 child \u8fdb\u7a0b\u7ed3\u675f\u540e\u518d\u7ee7\u7eed\u3002\u8bfb\u8005\u53ef\u4ee5\u5c1d\u8bd5\u6392\u5217\u7ec4\u5408\u4e24\u4e2a\u6ce8\u91ca\u6765\u89c2\u5bdf\u7a0b\u5e8f\u8fd0\u884c\u7684\u7ed3\u679c\u4f1a\u5982\u4f55\u53d8\u5316\u3002

\u903b\u8f91\u4e0a\u521b\u5efa\u7684\u65b0\u8fdb\u7a0b\u6709\u4e24\u79cd\u60c5\u51b5\uff1a

  1. \u590d\u5236 parent \u8fdb\u7a0b\u7684\u4ee3\u7801\u6570\u636e\uff1b
  2. \u8f7d\u5165\u65b0\u7684\u7a0b\u5e8f\u5e76\u7ee7\u7eed\u6267\u884c\uff1b

\u800c\u5b9e\u9645\u5728 Linux \u4e2d\uff0c\u7b2c\u4e00\u79cd\u901a\u8fc7 fork() \u5b9e\u73b0\uff0c\u7b2c\u4e8c\u79cd\u901a\u8fc7 fork() \u540e execXX() \u5b9e\u73b0\uff0cexecXX() \u4f1a\u8986\u76d6\u90a3\u4e2a\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u6267\u884c\u5176\u4ed6\u7a0b\u5e8f\u30023 4

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u7ec8\u6b62","title":"\u8fdb\u7a0b\u7684\u7ec8\u6b62","text":"

\u5f53\u8fdb\u7a0b\u8c03\u7528 exit() \u8fd9\u4e2a\u7cfb\u7edf\u8c03\u7528\u65f6\uff0c\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u88ab\u7ec8\u6b62\uff0c\u8fd9\u610f\u5473\u7740\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u4e0d\u518d\u6267\u884c\uff0c\u5176\u8d44\u6e90\u5c06\u88ab\u91ca\u653e\uff0c\u540c\u65f6\u2014\u2014\u8fd4\u56de\u72b6\u6001\u503c\uff0c\u800c\u8fd9\u4e2a\u72b6\u6001\u503c\u5c06\u88ab parent \u8fdb\u7a0b\u7684 wait() \u63a5\u6536\u3002\u7279\u522b\u7684\uff0c\u5982\u679c parent \u8fdb\u7a0b\u5c1a\u672a\u8c03\u7528 wait()\uff0c\u5219\u8fd9\u4e2a child \u8fdb\u7a0b\u8fd8\u4e0d\u4f1a\u5b8c\u5168\u6d88\u5931\uff0c\u56e0\u4e3a\u8981\u8fd4\u56de\u7684\u4e1c\u897f\u8fd8\u6ca1\u8fd4\u56de\uff0c\u8fd9\u79cd\u903b\u8f91\u4e0a\u5df2\u7ecf\u7ec8\u6b62\uff0c\u4f46\u4ecd\u7136\u5360\u6709\u4e00\u90e8\u5206\u8d44\u6e90\uff0c\u7b49\u5f85 parent \u8fdb\u7a0b\u8c03\u7528 wait() \u7684\u8fdb\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u50f5\u5c38\u8fdb\u7a0b(zombie)\u3002\u4e00\u4e2a\u8fdb\u7a0b\u53d8\u6210\u50f5\u5c38\u8fdb\u7a0b\u662f\u5f88\u666e\u901a\u7684\uff0c\u5173\u952e\u5728\u4e8e\uff0c\u5982\u679c parent \u8fdb\u7a0b\u4e0d\u8c03\u7528 wait()\uff0c\u90a3\u7b49 parent \u7ec8\u6b62\u540e\uff0c\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u53ef\u80fd\u4ecd\u7136\u4e00\u76f4\u5b58\u5728\uff0c\u6b64\u65f6\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u540c\u65f6\u662f\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b(orphan)\u2014\u2014\u5373\u6ca1\u6709 parent \u8fdb\u7a0b\u7684\u8fdb\u7a0b\uff0c\u8fd9\u663e\u7136\u662f\u4e0d\u5408\u7406\u7684\uff0cUNIX \u7684\u89e3\u51b3\u529e\u6cd5\u662f\uff0c\u8ba9\u6240\u6709\u5b64\u513f\u8fdb\u7a0b\u90fd\u6210\u4e3a init/systemd \u7684 child \u8fdb\u7a0b\uff0c\u7531 init/systemd \u6765 wait() \u5b83\u4eec\u3002

\u5728\u67d0\u4e9b\u7cfb\u7edf\u91cc\uff0c\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u7ea7\u8054\u7ec8\u6b62(cascading termination)\u6765\u907f\u514d\u5b64\u513f\u8fdb\u7a0b\u7684\u51fa\u73b0\uff0c\u5373\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u7ec8\u6b62\u65f6\uff0c\u5b83\u7684 child \u4e5f\u5e94\u5f53\u88ab\u9012\u5f52\u5730\u7ec8\u6b62\u3002

daemon

\u5b88\u62a4\u8fdb\u7a0b\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5728\u201c\u540e\u53f0\u201d\u957f\u671f\u8fd0\u884c\uff0c\u4f8b\u5982\u67d0\u4e9b\u6570\u636e\u5e93\u670d\u52a1\u3001\u53cd\u4ee3\u7406\u670d\u52a1\u7b49\uff0c\u800c\u975e\u50cf\u666e\u901a\u7684\u7528\u6237\u7a0b\u5e8f\u4e00\u6837\u4f9d\u8d56\u4e8e\u7528\u6237\u4ea4\u4e92\u3002

\u4e3a\u4e86\u5b9e\u73b0\u201c\u957f\u671f\u8fd0\u884c\u201d\uff0c\u6211\u4eec\u9700\u8981\u8ba9\u5b83\u4ee5 init/systemd \u4e3a parent\uff0c\u56e0\u4e3a\u4efb\u4f55\u5176\u5b83\u8fdb\u7a0b\u90fd\u6709\u53ef\u80fd\u5728\u64cd\u4f5c\u7cfb\u7edf\u8fd0\u884c\u7684\u65f6\u5019\u7ec8\u6b62\u3002

\u90a3\u4e48\u4e00\u79cd\u529e\u6cd5\u5c31\u662f\u6211\u4eec\u9012\u5f52\u5730 fork() \u4e24\u6b21\uff0c\u7136\u540e\u7ec8\u6b62\u7b2c\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u5373\u7ec8\u6b62\u7b2c\u4e8c\u4e2a\u8fdb\u7a0b\u7684 parent\uff0c\u8fd9\u6837\u5b83\u5c31\u80fd\u6210\u4e3a\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b\uff0c\u8fdb\u800c\u88ab init/systemd \u63a5\u7ba1\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u95f4\u901a\u4fe1","title":"\u8fdb\u7a0b\u95f4\u901a\u4fe1","text":"

\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u53d7\u5230\u5176\u5b83\u8fdb\u7a0b\u7684\u5f71\u54cd\uff0c\u6216\u4f1a\u5f71\u54cd\u5176\u5b83\u8fdb\u7a0b\uff0c\u90a3\u4e48\u6211\u4eec\u79f0\u4e4b\u4e3a\u534f\u4f5c\u8fdb\u7a0b(cooperation process)\uff0c\u800c\u8fdb\u7a0b\u95f4\u901a\u4fe1(Inter-Process Communication, IPC)\u652f\u6301\u4e86\u8fdb\u7a0b\u534f\u4f5c\uff0c\u4ee5\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u7684\u6570\u636e\u4ea4\u6362\u3002

Communications models. (a) Shared memory. (b) Message passing.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u8c03\u5ea6","title":"\u8fdb\u7a0b\u8c03\u5ea6","text":"

\u591a\u9053\u6280\u672f\u5f15\u5165\u540e\uff0c\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\uff0c\u8fdb\u7a0b\u7684\u6570\u91cf\u6211\u4eec\u79f0\u4e4b\u4e3a\u591a\u9053\u7684\u5ea6(degree of multiprogramming)\u3002\u4e00\u6bb5\u65f6\u95f4\u5185\u82e5\u5e72\u8fdb\u7a0b\u5e76\u53d1\u6267\u884c\uff0c\u56e0\u6b64\u8c03\u5ea6\u95ee\u9898(scheduling)\u2014\u2014CPU scheduler \u5c06\u51b3\u5b9a\u5728\u4f55\u65f6\u5c06 CPU \u8d44\u6e90\u5206\u914d\u7ed9\u54ea\u4e00\u4e2a\u5c31\u7eea\u8fdb\u7a0b\uff0c\u4f7f\u4e4b\u8fdb\u5165\u8fd0\u884c\u6001\u2014\u2014\u8fd9\u4e2a\u95ee\u9898\u5c31\u5f88\u91cd\u8981\u4e86\u3002\u603b\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u9ad8\u6548\u3001\u516c\u5e73\u7684\u7684\u8c03\u5ea6\uff0c\u4ee5\u6b64\u4fdd\u8bc1 CPU \u5229\u7528\u7387\u8db3\u591f\u9ad8\uff0c\u540c\u65f6\u53c8\u4fdd\u8bc1\u8ba1\u7b97\u673a\u529f\u80fd\u6b63\u5e38\u8fd0\u4f5c\u3002

Diagram of process state.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u65f6\u673a","title":"\u8c03\u5ea6\u7684\u65f6\u673a","text":"

\u6211\u4eec\u518d\u6b21\u5ba1\u89c6\u8fdb\u7a0b\u72b6\u6001\u7684 FSM\uff0c\u53d1\u73b0\u6240\u6709\u72b6\u6001\u90fd\u662f\u56f4\u7ed5\u7740 ready/running \u5c55\u5f00\u7684\uff0c\u800c CPU \u5177\u4f53\u8d44\u6e90\u5206\u914d\u7684\u8fc7\u7a0b\u4e5f\u6b63\u662f\u901a\u8fc7\u8fd9\u4e24\u4e2a\u72b6\u6001\u7684\u8f6c\u5316\u4f53\u73b0\u7684\u3002\u800c \u2776 \u5f53\u8fd0\u884c\u6001\u7684\u8fdb\u7a0b\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u4e3b\u52a8\u79bb\u5f00\u8fd0\u884c\u6001\u65f6\uff0c\u6216 \u2777 \u5f53\u5c31\u7eea\u6001\u7684\u67d0\u4e2a\u8fdb\u7a0b\u9700\u8981\u7acb\u523b\u5f97\u5230 CPU \u8d44\u6e90\u65f6\uff0cscheduler \u4f1a\u8fdb\u884c\u8c03\u5ea6\u3002\u4e0a\u9762\u8fd9\u53e5\u8bdd\u53cd\u5e94\u5728\u3000FSM \u4e0a\uff0c\u5c31\u662f \u2776 \u8fdb\u7a0b\u4ece\u8fd0\u884c\u6001\u8f6c\u5316\u4e3a\u5176\u5b83\u72b6\u6001\uff0c\u5373\u7bad\u5934\u4ece running \u51fa\u53d1\u5411\u5916\uff1b\u2777 \u8fdb\u7a0b\u4ece\u5176\u5b83\u72b6\u6001\u8f6c\u5316\u4e3a\u5c31\u7eea\u6001\uff0c\u5373\u7bad\u5934\u4ece\u5916\u6307\u5411 ready\uff0c\u8fd9\u91cc\u5176\u5b9e\u8fd8\u6697\u542b\u4e86\u4e00\u4e2a ready \u6307\u5411 ready \u7684\u7bad\u5934\uff0c\u5728\u4f8b\u5982 priority aging \u7684\u60c5\u51b5\u4e0b\uff0cready \u4e2d\u53ef\u80fd\u7a81\u7136\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\u8db3\u591f\u5927\u4e86\u5c31\u4f1a\u53d1\u751f\u62a2\u5360\u5f0f\u8c03\u5ea6\u3002\u4e0a\u9762\u63cf\u8ff0\u7684\u8fd9\u4e24\u79cd\u65f6\u673a\u4e0b\u4ea7\u751f\u7684\u8c03\u5ea6\uff0c\u5c31\u5206\u522b\u5b9a\u4e49\u4e3a\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6(non-preemptive scheduling)\u548c\u62a2\u5360\u5f0f\u8c03\u5ea6(preemptive scheduling)\u3002

Diagram of process state.

\u4e24\u8005\u672c\u8d28\u4e0a\u7684\u533a\u522b\u5c31\u662f\uff0c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u662f\u7531\u5df2\u7ecf\u62e5\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u4e3b\u52a8\u91ca\u653e CPU \u8d44\u6e90\u5f15\u8d77\u7684\uff0c\u800c\u62a2\u5360\u5f0f\u8c03\u5ea6\u5219\u662f\u4e0d\u5360\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u7d22\u53d6 CPU \u8d44\u6e90\u6210\u529f\u5f15\u8d77\u7684\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u8fc7\u7a0b","title":"\u8c03\u5ea6\u7684\u8fc7\u7a0b","text":"

\u7531 CPU scheduler \u9009\u62e9\u54ea\u4e00\u4e2a\u5c31\u7eea\u6001\u7684\u5c06\u8981\u88ab\u6267\u884c\u540e\uff0c\u7531 dispatcher \u6765\u5b8c\u6210\u5177\u4f53\u7684\u5207\u6362\u5de5\u4f5c\u5305\u62ec\uff1a

  1. \u5728\u4e24\u4e2a\u8fdb\u7a0b\u95f4\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362\uff1b
  2. \u5207\u6362\u5230\u7528\u6237\u6001\uff1b
  3. \u8df3\u8f6c\u5230\u7528\u6237\u7a0b\u5e8f\u4e2d\u5408\u9002\u7684\u4f4d\u7f6e\u4ee5\u7ee7\u7eed\u8fdb\u7a0b\u6267\u884c\uff1b

\u800c\u4ece dispatcher \u505c\u6b62\u4e0a\u4e00\u4e2a\u8fd0\u884c\u65f6\u7684\u8fdb\u7a0b\uff0c\u5b8c\u6210\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u5e76\u542f\u52a8\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5ef6\u65f6\uff0c\u79f0\u4e3a dispatch latency\u3002

\u4e0a\u4e0b\u6587\u5207\u6362

\u5207\u6362\u8fdb\u7a0b\u7684\u65f6\u5019\u9700\u8981\u4fdd\u5b58\u201c\u73b0\u573a\u201d\uff0c\u5e76\u5728\u4e0b\u4e00\u6b21\u62ff\u51fa\u8fd9\u4e2a\u8fdb\u7a0b\u51c6\u5907\u6267\u884c\u4e4b\u524d\u6062\u590d\u201c\u73b0\u573a\u201d\uff0c\u4ee5\u6b64\u6765\u4fdd\u8bc1\u8fdb\u7a0b\u6267\u884c\u7684\u4e00\u81f4\u6027\u3002\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u73b0\u573a\u201d\u88ab\u79f0\u4e3a\u4e0a\u4e0b\u6587(context)\uff0c\u8868\u793a\u4e00\u79cd\u201c\u8bed\u5883\u201d\uff1b\u800c\u4fdd\u62a4-\u6062\u590d\u7684\u8fc7\u7a0b\uff0c\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u4e0a\u4e0b\u6587\u5207\u6362(context switch)\u3002

\u5176\u4e2d\uff0c\u4e0a\u4e0b\u6587\u53ef\u80fd\u5305\u62ec \u2460 CPU \u5bc4\u5b58\u5668\u4e2d\u7684\u503c\uff0c\u2461 \u8fdb\u7a0b\u72b6\u6001\uff0c\u2462 \u5185\u5b58\u7684\u7ba1\u7406\u4fe1\u606f\u7b49\u3002

\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u76f8\u5173\u5185\u5bb9\u5728 Lab2 \u91cc\u6709\u6240\u6d89\u53ca\uff0c\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u3002

(a) Diagram showing context switch from process to process. (b) Role of dispatcher.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7b97\u6cd5","title":"\u8c03\u5ea6\u7b97\u6cd5","text":"

\u5728\u8ba8\u8bba\u6709\u54ea\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u77e5\u9053\u600e\u6837\u7b97\u4e00\u4e2a\u597d\u7684\u8c03\u5ea6\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bc4\u4ef7\uff0c\u8c03\u5ea6\u7b97\u6cd5\u7684\u8bc4\u4ef7\u6807\u51c6\u4e5f\u4e0d\u662f\u5355\u4e00\u7684\uff1b\u5bf9\u5e94\u7684\uff0c\u4e0d\u540c\u8c03\u5ea6\u7b97\u6cd5\u6709\u5404\u81ea\u7684\u4f18\u7f3a\u70b9\uff0c\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u548c\u9700\u6c42\u6709\u6240\u9009\u62e9\u3002\u901a\u5e38\u6765\u8bf4\u6709\u8fd9\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u7684\u6307\u6807(scheduling criteria)\uff1a

\u4e0a\u9762\u4e94\u4e2a\u524d\u4e24\u4e2a\u8d8a\u5927\u8d8a\u597d\uff0c\u540e\u4e09\u4e2a\u8d8a\u5c0f\u8d8a\u597d\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u5f00\u59cb\u4ecb\u7ecd\u5404\u79cd\u8c03\u5ea6\u7b97\u6cd5\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u4e0b\u8c03\u5ea6\u7b97\u6cd5\u4e2d\u5b58\u5728\u4e00\u4e9b\u7406\u60f3\u5316\u7684\u5efa\u6a21\uff08\u4f8b\u5982\u5047\u8bbe\u6211\u4eec\u77e5\u9053\u8fdb\u7a0b\u9700\u8981\u4f7f\u7528\u591a\u4e45 CPU\uff09\uff0c\u800c\u6211\u4eec\u91cd\u70b9\u9700\u8981\u638c\u63e1\u5b83\u7684\u601d\u8def\uff0c\u505a\u5230\u80fd\u753b\u7518\u7279\u56fe\u3001\u80fd\u7b97\u65f6\u95f4\u3002\u6b64\u5916\uff0c\u8fd9\u91cc\u6211\u4eec\u4ee5\u201c\u591a\u9053\u201d\u4e3a\u8bed\u5883\uff0c\u5373\u5982\u679c\u4e0d\u662f\u7279\u522b\u8bf4\u660e\uff0c\u4e0d\u8003\u8651\u5206\u65f6\u6280\u672f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--first-come-first-serve-fcfs","title":"\u7b97\u6cd5 | First-Come, First-Serve (FCFS)","text":"

FCFS \u662f\u6700\u57fa\u672c\u7684\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65b9\u6cd5\u5c31\u662f\u6309\u7167\u8fdb\u7a0b\u5148\u6765\u540e\u5230\u7684\u987a\u5e8f\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u901a\u8fc7\u4e00\u4e2a FIFO \u7684\u961f\u5217\u5b9e\u73b0\u3002FCFS \u6700\u5927\u7684\u4f18\u70b9\u5c31\u662f\u5b9e\u73b0\u7b80\u5355\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--shortest-job-first-sjf--shortest-remaining-time-first-srtf","title":"\u7b97\u6cd5 | Shortest-Job-First (SJF) / Shortest-Remaining-Time-First (SRTF)","text":"

SJF \u7684\u601d\u8def\u662f\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u5c0f\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u5f88\u957f\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fdb\u7a0b\u8fd0\u884c\u65f6\u95f4\u6709\u591a\u4e45\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

\u73b0\u5728\u5b83\u4eec\u6309\u7167\u987a\u5e8f\u8fdb\u5165 ready queue\uff0c\u8bf7\u5206\u522b\u8ba1\u7b97 FCFS \u4e0b\u548c SJF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

\u9996\u5148\u770b FCFS\uff0c\u5373\u6309\u7167\u987a\u5e8f\u6267\u884c\uff0c\u753b\u51fa\u7518\u7279\u56fe\uff1a

gantt\n    title FCFS\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P1: a, 00, 24\n    P2: b, 24, 27\n    P3: c, 27, 30

\u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 24 + 27) / 3 = 17\\)\u3002

\u73b0\u5728\u6309\u7167 SJF \u6765\uff0c\u987a\u5e8f\u53d8\u4e3a P2 \u548c P3 \u5148\u6267\u884c\uff1a

gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P2: a, 00, 03\n    P3: b, 03, 06\n    P1: c, 06, 30

\u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 3 + 6) / 3 = 3\\)\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4f7f\u7528 SJF \u4ee5\u540e\u5bf9\u4e8e\u8fd9\u79cd\u524d\u9762\u653e\u4e86\u4e2a\u5927\u4efb\u52a1\u7684\u60c5\u51b5\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u5927\u5927\u51cf\u5c11\u3002

\u8fd9\u79cd\u505a\u6cd5\u53c8\u88ab\u79f0\u4e3a Shortest-Next-CPU-Burst\uff0c\u5b83\u662f\u4e00\u79cd\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u7b97\u6cd5\uff0c\u4f46\u5047\u8bbe\u6211\u4eec\u5728\u6267\u884c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6709\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b\u52a0\u5165\u4e86 ready queue\uff0c\u800c\u4e14\u8fd9\u4e2a\u8fdb\u7a0b\u7684\u6267\u884c\u65f6\u95f4\u6bd4\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u7684\u5269\u4f59\u65f6\u95f4\u8fd8\u8981\u77ed\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u7ee7\u7eed\u6267\u884c\u5b8c\u5f53\u524d\u7684\u8fdb\u7a0b\u624d\u884c\u2014\u2014\u56e0\u4e3a\u5b83\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u800c\u663e\u7136\u8fd9\u4e2a\u8fc7\u7a0b\u662f\u53ef\u4ee5\u901a\u8fc7\u62a2\u5360\u5f0f\u8c03\u5ea6\u6765\u4f18\u5316\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86 Shortest-Remaining-Time-First (SRTF)\uff0c\u5176\u8868\u8ff0\u662f\uff1a\u603b\u662f\u6267\u884c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u3002\u5176\u4f18\u7f3a\u70b9\u4e0e SJF \u4e00\u81f4\u3002

\u6211\u4eec\u53ea\u9700\u8981\u8003\u8651\u6240\u6709\u62a2\u5360\u5f0f\u8c03\u5ea6\u548c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65f6\u673a\uff0c\u5e76\u9009\u62e9\u6b64\u65f6\u7684\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u8fdb\u884c\u8c03\u5ea6\u5373\u53ef\u3002

\u5982\u4f55\u5f97\u5230\u5269\u4f59\u65f6\u95f4

\u6211\u4eec\u77e5\u9053\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u6240\u9700\u8981\u7684\u65f6\u95f4\u662f\u4e00\u4e2a\u65e0\u6cd5\u5728\u8fd0\u884c\u7ed3\u675f\u524d\u5f97\u5230\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4f7f\u7528\u8fd9\u4e2a\u4e1c\u897f\u8fdb\u884c\u8c03\u5ea6\u5c31\u663e\u5f97\u5341\u5206\u4e0d\u5408\u7406\u3002\u4f46\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u9884\u6d4b\u7684\u65b9\u6cd5\u4f30\u8ba1\u8fd0\u884c\u7684\u5269\u4f59\u65f6\u95f4\uff0c\u4f46\u662f\u65e2\u7136\u662f\u9884\u6d4b\u5c31\u4f1a\u6709\u4e0d\u51c6\u786e\uff0c\u6240\u4ee5 SJF/SRTF \u5e76\u4e0d\u80fd\u5b9e\u73b0\u7406\u8bba\u4e0a\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u4f18\u3002\u81f3\u4e8e\u5982\u4f55\u9884\u6d4b\uff0c\u4e66\u4e0a\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53eb exponential average \u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u4e0d\u5c55\u5f00\u3002

\ud83c\udf30 \u9898\u9762\u89e3\u6790

\u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

\u5b83\u4eec\u5230\u8fbe ready queue \u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

\u8bf7\u5206\u522b\u8ba1\u7b97 SJF \u4e0b\u548c SRTF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

\u5bf9\u4e8e SJF \u6765\u8bf4\uff0c\u5728\u7b2c 0 \u65f6\u523b\uff0c\u53ea\u6709 P1 \u53ef\u7528\uff0c\u6240\u4ee5\u53ea\u80fd\u6267\u884c P1\uff1bP1 \u6267\u884c\u7ed3\u675f\u540e\u6240\u6709\u5176\u5b83\u8fdb\u7a0b\u90fd\u53ef\u7528\u4e86\uff0c\u6b64\u65f6\u6309\u7167\u6b63\u5e38\u7684 SJF \u5373\u53ef\u5f97\u5230\u7ed3\u679c\u3002

gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 08\n\n    section P2\n    ready: b, 01, 08\n    run: e, 08, 12\n\n    section P3\n    ready: c, 02, 17\n    run: 17, 26\n\n    section P4\n    ready: d, 03, 12\n    run: f, 12, 17

\u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 7 + 15 + 9) / 4 = 7.75\\)\u3002

\u5bf9\u4e8e SRFT \u6765\u8bf4\uff0c\u540c\u6837\u4ece P1 \u5f00\u59cb\u6267\u884c\uff0c\u4f46\u662f\u7b2c\u4e00\u79d2 P2 \u8fdb\u5165\uff0c\u53d1\u73b0\u6b64\u65f6 P1 \u8fd8\u5269\u4e0b 7\uff0c\u800c P2 \u53ea\u9700\u8981 4\uff0c\u4e8e\u662f P2 \u9700\u8981\u62a2\u5360 P1 \u7684\u8d44\u6e90\uff1b\u4e4b\u540e\u7684\u8fc7\u7a0b\u7c7b\u4f3c

gantt\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 01\n    ready(rest 7): e, 01, 10\n    run: g, 10, 17\n\n    section P2\n    run: b, 01, 05\n\n    section P3\n    ready(rest 9): c, 02, 17\n    run: h, 17, 26\n\n    section P4\n    ready(rest 5): d, 03, 05\n    run: f, 05, 10

\u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\(((0+9) + 0 + 15 + 2) / 4 = 6.5\\)\u3002

\u53ef\u4ee5\u53d1\u73b0 SRTF \u80fd\u591f\u63d0\u5347 SJF \u7684\u6548\u7387\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--round-robin-rr","title":"\u7b97\u6cd5 | Round-Robin (RR)","text":"

RR \u8c03\u5ea6\u5c31\u662f\u4f7f\u7528\u5206\u65f6\u6280\u672f\u540e\u7684 FCFS \u8c03\u5ea6\uff0c\u56e0\u6b64\u5b83\u4e5f\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u6700\u591a\u8fde\u7eed\u6267\u884c\u4e00\u4e2a\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u5b8c\u6210\u540e\u88ab\u63d2\u5165\u5230 FIFO ready queue \u7684\u672b\u5c3e\uff0c\u5e76\u53d6\u51fa FIFO ready queue \u7684\u961f\u9996\u8fdb\u884c\u6267\u884c\u3002

\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u5206\u65f6\u7684\u65f6\u5019\u4e5f\u8bf4\u8fc7\uff0c\u5206\u65f6\u6280\u672f\u901a\u8fc7\u4f18\u5316\u54cd\u5e94\u65f6\u95f4\u89e3\u51b3\u4e86\u7528\u6237\u4ea4\u4e92\u95ee\u9898\uff0cRR \u8c03\u5ea6\u867d\u7136\u76f8\u6bd4 SJF \u6709\u4e86\u66f4\u957f\u7684\u7b49\u5f85\u65f6\u95f4\uff0c\u4f46\u662f\u6709\u4e86\u66f4\u77ed\u7684\u54cd\u5e94\u65f6\u95f4\uff0c\u800c\u5b9e\u9645\u76f4\u63a5\u5f71\u54cd\u7528\u6237\u4ea4\u4e92\u95ee\u9898\u7684\u5e94\u8be5\u662f\u54cd\u5e94\u65f6\u95f4\u3002

\u4e00\u4e2a\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cRR \u8c03\u5ea6\u6709\u4e00\u4e2a\u201c\u8d85\u53c2\u6570\u201d\uff0c\u5373\u65f6\u95f4\u7247\u7684\u957f\u5ea6\u3002\u7406\u8bba\u4e0a\uff0c\u65f6\u95f4\u7247\u7ea6\u77ed\uff0c\u54cd\u5e94\u65f6\u95f4\u8d8a\u77ed\uff1b\u4f46\u66f4\u77ed\u7684\u65f6\u95f4\u7247\u5c06\u5e26\u6765\u66f4\u9891\u7e41\u7684\u8fdb\u7a0b\u5207\u6362\uff0c\u4ece\u800c\u5e26\u6765\u66f4\u591a\u7684 dispatch latency\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--priority-scheduling","title":"\u7b97\u6cd5 | Priority Scheduling","text":"

\u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u601d\u8def\u662f\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u4f18\u5148\u7ea7\u9ad8\u7684\u8fdb\u7a0b\u4f18\u5148\u8fd0\u884c\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u5f88\u9ad8\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\u3002

\u4f60\u53ef\u80fd\u53d1\u73b0\u4e86\uff0c\u5982\u679c\u628a\u4e0a\u9762\u8fd9\u53e5\u8bdd\u7684\u201c\u4f18\u5148\u7ea7\u6700\u9ad8\u201d\u6539\u6210\u201c\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d/\u201c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d\uff0c\u90a3\u5c31\u548c SJF/SRTF \u4e00\u6a21\u4e00\u6837\u4e86\uff0cSJF/SRTF \u5b9e\u9645\u4e0a\u5c31\u662f\u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u56e0\u800c\u4f18\u5148\u7ea7\u8c03\u5ea6\u5f53\u7136\u662f\u53ef\u4ee5\u5b9e\u73b0\u62a2\u5360\u5f0f\u548c\u975e\u62a2\u5360\u5f0f\u4e24\u79cd\u7684\u3002

\u6b64\u5916\uff0c\u4f18\u5148\u7ea7\u7684\u5206\u914d\u53ef\u4ee5\u6839\u636e\u4f7f\u7528\u9700\u6c42\u8fdb\u884c\u8bbe\u8ba1\uff0c\u5b83\u53ef\u80fd\u662f\u4e00\u4e9b\u6d4b\u91cf\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u5177\u6709\u4e00\u4e9b\u88ab\u8d4b\u4e88\u7684\u610f\u4e49\uff0c\u751a\u81f3\u53ef\u4ee5\u662f\u4e00\u4e9b\u590d\u5408\u7684\u503c\uff1b\u4f18\u5148\u7ea7\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u662f\u9759\u6001\u7684\uff0c\u5148\u524d\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u9965\u997f\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u52a8\u6001\u7684\u4f18\u5148\u7ea7\u6765\u89e3\u51b3\uff1a\u4f18\u5148\u7ea7\u968f\u7740\u7b49\u5f85\u65f6\u95f4\u589e\u52a0\u4e0d\u65ad\u589e\u957f\uff0c\u7b49\u5f85\u8fc7\u4e45\u7684\u4efb\u52a1\u5c31\u4f1a\u88ab\u8d4b\u4e88\u8f83\u9ad8\u7684\u4f18\u5148\u7ea7\uff0c\u4ee5\u6b64\u907f\u514d\u9965\u997f\u7684\u53d1\u751f\uff0c\u8fd9\u79cd\u7b56\u7565\u53eb priority aging\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Queue Scheduling","text":"

\u65e2\u7136\u8c03\u5ea6\u7b97\u6cd5\u591a\u79cd\u591a\u6837\uff0c\u4ed6\u4eec\u9002\u914d\u4e0d\u540c\u7684\u9700\u6c42\uff0c\u90a3\u80fd\u5426\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u4f7f\u7528\u7279\u5b9a\u7b97\u6cd5\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 ready queue \u5206\u6210\u591a\u4e2a\u961f\u5217\uff0c\u6bcf\u4e2a\u961f\u5217\u4f7f\u7528\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\uff0c\u7136\u540e\u518d\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u8fd9\u79cd\u65b9\u6cd5\u88ab\u79f0\u4e3a\u591a\u7ea7\u961f\u5217\u8c03\u5ea6(multilevel queue scheduling)\u3002

\ud83c\udf30

\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u6309\u7167\u4f18\u5148\u7ea7\u5148\u540e\uff0c\u53ef\u80fd\u6709\u8fd9\u4e48\u4e9b\u961f\u5217\uff1a

  1. Real-time processes
  2. System processes
  3. Interactive processes
  4. Batch processes

\u5b83\u4eec\u7684\u4f18\u5148\u7ea7\u968f\u7740 1 -> 4 \u9012\u51cf\uff0c\u800c\u5f53\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u4e2d\u5b58\u5728\u4efb\u52a1\u65f6\uff0c\u4f18\u5148\u7ea7\u4f4e\u7684\u961f\u5217\u4fbf\u4e0d\u4f1a\u53c2\u4e0e\u8c03\u5ea6\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u9ad8\u4f18\u5148\u7ea7\u7684\u961f\u5217\u4e2d\u51fa\u73b0\u65b0\u7684\u4efb\u52a1\u65f6\uff0c\u4e5f\u4f1a\u62a2\u5360\u6b63\u5728\u8fd0\u884c\u7684\u4f4e\u4f18\u5148\u7ea7\u961f\u5217\u7684\u4efb\u52a1\u3002

\ud83c\udf30

\u53c8\u6bd4\u5982\uff0c\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u53ef\u80fd\u5206\u524d\u53f0(foreground)\u7a0b\u5e8f\u961f\u5217\u548c\u540e\u53f0(background)\u7a0b\u5e8f\u961f\u5217\uff0c\u800c\u6211\u4eec\u4f7f\u7528\u65f6\u95f4\u7247\u6765\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u4f46\u524d\u53f0\u5360\u7528 80% \u7684\u65f6\u95f4\uff0c\u800c\u540e\u53f0\u5360\u7528 20% \u7684\u65f6\u95f4\u3002

\u800c\u5728\u961f\u5217\u5185\u90e8\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u4f7f\u7528\u4e0d\u540c\u7684\u961f\u5217\u5185\u8c03\u5ea6\u7b97\u6cd5\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u7531\u4e8e\u524d\u53f0\u7a0b\u5e8f\u5f80\u5f80\u8981\u6c42\u66f4\u597d\u7684\u54cd\u5e94\u65f6\u95f4\u8868\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 RR \u8c03\u5ea6\uff1b\u800c\u5728\u540e\u53f0\u4f7f\u7528 FCFS \u8c03\u5ea6\u3002

Windows XP Scheduling

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-feedback-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Feedback Queue Scheduling","text":"

\u66f4\u8fdb\u4e00\u6b65\uff0cMultilevel Feedback Queue Scheduling \u5728 Multilevel Queue Scheduling \u7684\u57fa\u7840\u4e0a\uff0c\u5141\u8bb8\u8fdb\u7a0b\u5728\u961f\u5217\u95f4\u8f6c\u79fb\uff0c\u4ee5\u6b64\u5b9e\u73b0\u66f4\u7075\u6d3b\u66f4\u79d1\u5b66\u7684\u8c03\u5ea6\u3002\u4f8b\u5982\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5982\u679c\u4f7f\u7528\u4e86\u8fc7\u957f\u7684 CPU \u65f6\u95f4\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u4f4e\u7684\u961f\u5217\uff1b\u76f8\u53cd\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u7b49\u5f85\u4e86\u592a\u4e45\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u3002

\u5f53\u7136\uff0c\u76f8\u5bf9\u5e94\u7684\uff0c\u7b97\u6cd5\u590d\u6742\u5ea6\u4e5f\u4f1a\u63d0\u9ad8\u4e0d\u5c11\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7ebf\u7a0b","title":"\u7ebf\u7a0b","text":"

\u7ebf\u7a0b\u662f\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u8fdb\u7a0b\uff0c\u5b83\u5728\u8fdb\u7a0b\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u5212\u5206\uff0c\u662f\u8fdb\u7a0b\u5185\u7684\u4e00\u4e2a\u53ef\u8c03\u5ea6\u7684\u6267\u884c\u5355\u5143\uff0c\u4ee5\u51cf\u5c0f\u8fdb\u7a0b folk \u548c\u5207\u6362\u7684\u5f00\u9500\u4e3a\u76ee\u7684\u3002

\u540c\u4e00\u8fdb\u7a0b\u7684\u82e5\u5e72\u7ebf\u7a0b\u5171\u4eab\u4ee3\u7801\u3001\u6570\u636e\u7b49\u201c\u76f8\u5bf9\u9759\u6001\u201d\u7684\u8d44\u6e90\uff0c\u800c\u5404\u81ea\u7ef4\u62a4\u5bc4\u5b58\u5668\u3001\u6808\u3001PC \u7b49\u201c\u76f8\u5bf9\u52a8\u6001\u201d\u7684\u8d44\u6e90\uff1b\u6216\u8005\u8bf4\u7ebf\u7a0b\u53ea\u62e5\u6709\u4e00\u4e9b\u8fd0\u884c\u4e2d\u5fc5\u4e0d\u53ef\u7701\u7684\u8d44\u6e90\uff0c\u800c\u6240\u6709\u5176\u5b83\u8d44\u6e90\u90fd\u5c5e\u4e8e\u8fdb\u7a0b\uff0c\u7ebf\u7a0b\u4e0e\u8fdb\u7a0b\u4e2d\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8fd9\u4e9b\u8d44\u6e90\uff0c\u4ee5\u6b64\u6765\u51cf\u5c11\u8fdb\u7a0b\u521b\u5efa\u8fc7\u7a0b\u4e2d\u590d\u5236\u4ee3\u7801\u6bb5\u7b49\u8d44\u6e90\u65f6\u5e26\u6765\u7684\u4e0d\u5c0f\u5f00\u9500\u3002

\u7ebf\u7a0b\u5929\u751f\u548c\u540c\u4e00\u8fdb\u7a0b\u5185\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8d44\u6e90\uff0c\u56e0\u6b64\u540c\u8fdb\u7a0b\u5185\u7ebf\u7a0b\u5929\u751f\u5c31\u6709\u7ebf\u7a0b\u95f4\u901a\u4fe1\u7684\u80fd\u529b\u3002\u540c\u65f6\uff0c\u7531\u4e8e\u5c06\u8fdb\u7a0b\u8fdb\u884c\u4e86\u518d\u5212\u5206\uff0c\u4e00\u65b9\u9762\u5728\u786c\u4ef6\u652f\u6301\u7684\u60c5\u51b5\u4e0b\u80fd\u66f4\u597d\u5730\u9002\u914d\u5e76\u884c\uff0c\u53e6\u4e00\u65b9\u9762\u4e5f\u80fd\uff08\u4ee3\u4ef7\u66f4\u5c0f\u5730\uff09\u8ba9\u4efb\u52a1\u7684\u7c92\u5ea6\u53d8\u5c0f\uff0c\u6b64\u65f6\u53ef\u4ee5\u5c06\u6574\u4e2a\u8fdb\u7a0b\u7684\u963b\u585e\u8f6c\u79fb\u5230\u5355\u4e2a\u7ebf\u7a0b\u7684\u963b\u585e\u4e0a\uff0c\u8fdb\u4e00\u6b65\u51cf\u5c11\u54cd\u5e94\u65f6\u95f4\u3002

\u5f53\u7136\uff0c\u7531\u4e8e\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u90e8\u5206\u6574\u4f53\u7684\u5173\u7cfb\uff0c\u5373\u5b58\u5728\u4e00\u4e2a\u201c\u5c06\u82e5\u5e72\u9e21\u86cb\u653e\u5728\u540c\u4e00\u4e2a\u7bee\u5b50\u91cc\u201d\u7684\u95ee\u9898\uff0c\u867d\u7136\u5c06\u82e5\u5e72\u4efb\u52a1\u90fd\u653e\u5230\u4e00\u4e2a\u8fdb\u7a0b\u7684\u591a\u7ebf\u7a0b\u53ef\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u662f\u4e00\u65e6\u201c\u7bee\u5b50\u201d\u574f\u4e86\uff0c\u90a3\u6240\u6709\u201c\u9e21\u86cb\u201d\u90fd\u65e0\u6cd5\u5e78\u514d\uff1b\u5176\u6b21\uff0c\u867d\u7136\u5929\u7136\u7684\u5171\u4eab\u5c5e\u6027\u8ba9\u7ebf\u7a0b\u80fd\u66f4\u65b9\u4fbf\u5730\u8fdb\u884c\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff0c\u4f46\u4e5f\u5e26\u6765\u4e86\u5185\u5b58\u4fdd\u62a4\u7684\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u591a\u7ebf\u7a0b\u6a21\u578b","title":"\u591a\u7ebf\u7a0b\u6a21\u578b","text":"

\u6309\u7167\u7ebf\u7a0b\u5212\u5206\u7684\u5b9e\u73b0\u4f4d\u7f6e\uff0c\u591a\u7ebf\u7a0b\u6a21\u578b\u5206\u4e3a\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b(user threads)\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b(kernel threads)\u3002

\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u5728\u7528\u6237\u7a7a\u95f4\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff0c\u5373\u4f7f\u7528\u7ebf\u7a0b\u5e93(thread library)\u5229\u7528\u5355\u4e2a\u8fdb\u7a0b\u7684\u8d44\u6e90\uff0c\u5728\u7528\u6237\u7a7a\u95f4\u7ef4\u62a4\u591a\u4e2a\u7ebf\u7a0b\uff1b\u800c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5219\u662f\u7531\u5185\u6838\u652f\u6301\u591a\u7ebf\u7a0b\u64cd\u4f5c\u3002\u4e24\u8005\u5404\u6709\u4f18\u7f3a\u70b9\uff1a

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5e76\u4e0d\u51b2\u7a81\uff0c\u56e0\u800c\u6392\u5217\u7ec4\u5408\u540e\u5f97\u5230\u591a\u7ebf\u7a0b\u4e3b\u8981\u6709\u5982\u4e0b\u4e09\u79cd\u6a21\u578b\uff1a

(a) Many-to-many model. (b) One-to-one model. (c) Many-to-one model.

Linux \u7ebf\u7a0b

  1. Where memory will be allocated to \"Uninitialized Static variable\" upon initialization? \u21a9

  2. What process is the parent of the init process in Linux? \u21a9

  3. Linux CreateProcess? \u21a9

  4. Differences between fork and exec? \u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/","title":"U2 Part 1: \u540c\u6b65\u5de5\u5177 | Synchronization Tools","text":"

\u7ea6 7970 \u4e2a\u5b57 216 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 29 \u5206\u949f

\u5f15\u5165

\u9996\u5148\u6211\u4eec\u7b80\u5355\u63cf\u8ff0\u4ec0\u4e48\u662f\u540c\u6b65\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u62b1\u7740\u5bf9\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u7684\u7591\u95ee\u53bb\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u3002

\u4e0d\u5fc5\u5c1d\u8bd5\u7acb\u523b\u7406\u89e3\u8fd9\u6bb5\u8bdd\uff0c\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u591f\u5728\u770b\u7684\u8fc7\u7a0b\u4e2d\u4ee5\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u4e3a\u4e3b\u7ebf\uff0c\u731c\u6d4b\u63a5\u4e0b\u6765\u5c06\u8981\u5c55\u5f00\u7684\u5185\u5bb9\uff0c\u53bb\u53d1\u73b0\u95ee\u9898\u3001\u601d\u8003\u89e3\u51b3\u529e\u6cd5\u3002

\u5728\u652f\u6301\u5e76\u53d1\u751a\u81f3\u5e76\u884c\u7684\u7cfb\u7edf\u4e2d\uff0c\u867d\u7136\u8fdb\u7a0b\u4e4b\u95f4\u76f8\u5bf9\u9694\u79bb\uff0c\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\u4e92\u4e0d\u76f4\u63a5\u5e72\u6270\uff0c\u81ea\u987e\u81ea\u8dd1\u2014\u2014\u5373\u662f\u5f02\u6b65\u7684\uff1b\u4f46\u7531\u4e8e\u5404\u4e9b\u539f\u56e0\uff08\u4f8b\u5982\u90fd\u9700\u8981\u5bf9\u4e00\u5171\u4eab\u8d44\u6e90\u7684\u4fee\u6539\uff09\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u9700\u8981\u4e92\u76f8\u5236\u7ea6\uff0c\u9075\u5faa\u7279\u5b9a\u7684\u5148\u540e\u987a\u5e8f\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9700\u8981\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff0c\u8ba9\u534f\u4f5c\u8fdb\u7a0b\u80fd\u591f\u76f4\u63a5\u6216\u95f4\u63a5\u4e86\u89e3\u5230\u5176\u5b83\u76f8\u5173\u8fdb\u7a0b\u7684\u72b6\u6001\uff0c\u4ee5\u5b9e\u73b0\u5bf9\u5f53\u524d\u8fdb\u7a0b\u6267\u884c\u7684\u63a7\u5236\uff0c\u6700\u7ec8\u5728\u5b8f\u89c2\u4e0a\u5b9e\u73b0\u540c\u6b65\u63a7\u5236\u3002

\u800c\u4e0a\u9762\u63d0\u5230\u7684\u201c\u5404\u79cd\u539f\u56e0\u201d\u548c\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6211\u4eec\u7a0d\u540e\u5c06\u8ba8\u8bba\u7684\u4e1c\u897f\uff0c\u5176\u4e2d\uff0c\u8fd9\u91cc\u7684\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6307\u6211\u4eec\u7684\u5404\u79cd\u540c\u6b65\u5de5\u5177\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u540c\u6b65\u5e76\u4e0d\u662f\u67d0\u79cd\u4e2d\u592e\u8c03\u63a7\u673a\u5236\uff0c\u800c\u66f4\u50cf\u662f\u4e00\u79cd\u201c\u534f\u8bae\u201d\uff0c\u5f53\u5404\u4e2a\u8fdb\u7a0b\u53d1\u73b0\u6709\u522b\u7684\u8fdb\u7a0b\u4e0e\u81ea\u5df1\u4ea7\u751f\u7ade\u4e89\u65f6\uff0c\u5e94\u5f53\u6709\u67d0\u79cd\u624b\u6bb5\u5141\u8bb8\u5b83\u4eec\u8fbe\u6210\u534f\u5546\uff0c\u4ee5\u51b3\u5b9a\u8c01\u5148\u8c01\u540e\u3002

\u6211\u4eec\u6309\u7167\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u7531\u6d45\u5165\u6df1\u5730\u8ba8\u8bba\u8fd9\u4e9b\u4e1c\u897f\u3002

\u8bed\u5883\u95ee\u9898

\u4e00\u4e2a\u6bd4\u8f83\u5c34\u5c2c\u7684\u95ee\u9898\u662f\uff0c\u4e66\u672c\u4e0a\u4ee5\u534f\u4f5c\u8fdb\u7a0b\u7684\u8bed\u5883\u4e3a\u5f00\u7bc7\uff0c\u4f46\u63a5\u4e0b\u6765\u8bb2\u7684\u6709\u4e9b\u5185\u5bb9\u662f\u4ee5\u7ebf\u7a0b\u540c\u6b65\u4e3a\u8bed\u5883\uff08\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\u6211\u5df2\u7ecf\u653e\u5f03\u53bb\u68b3\u7406\u548c\u7ea0\u6b63\u4e66\u4e2d\u7684\u63aa\u8f9e\u4e86\uff0c\u7d2f\u4e86\uff09\uff0c\u5982\u679c\u5728\u7528\u8bcd\u4e0a\u90fd\u533a\u5206\u7ebf\u7a0b\u548c\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4f1a\u53d8\u5f97\u5f88\u7e41\u6742\uff0c\u6240\u4ee5\u6211\u63a5\u4e0b\u6765\u4e00\u5f8b\u7528\u8fdb\u7a0b\u8868\u793a\uff0c\u4f46\u8bfb\u8005\u5fc3\u4e2d\u5e94\u5f53\u5bf9\u8fd9\u4e2a\u8bed\u5883\u66f4\u9002\u4e8e\u7ebf\u7a0b\u8fd8\u662f\u8fdb\u7a0b\u6709\u6240\u611f\u53d7\u3002

\u5173\u4e8e\u8fd9\u4e9b\u65b9\u6cd5\u66f4\u9002\u5408\u5728 process \u8fd8\u662f thread \u4e0a\u88ab\u5e94\u7528\uff0c\u53ef\u4ee5\u770b\u8fd9\u4e2a\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7ade\u6001\u6761\u4ef6","title":"\u7ade\u6001\u6761\u4ef6","text":"

Links

\u6211\u4eec\u9700\u8981\u610f\u8bc6\u5230\uff0c\u6211\u4eec\u65e0\u6cd5\u4e00\u6b65\u5230\u4f4d\u5730\u3001in-place \u5730\u53bb\u4fee\u6539\u4e00\u4e2a\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6362\u8a00\u4e4b\uff0c\u8981\u60f3\u4fee\u6539 mem[x]\uff0c\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u6b65\u9aa4\uff1a

  1. reg <- mem[x]\uff1b
  2. reg <- update(reg)\uff1b
  3. mem[x] <- reg\uff1b

\u800c\u5982\u679c\u73b0\u5728\u4e0d\u6b62\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x]\uff0c\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u5b83\u4eec\u90fd\u60f3\u8981\u66f4\u65b0 mem[x]\uff0c\u53c8\u597d\u5de7\u4e0d\u5de7\u7684\u5b83\u4eec\u51e0\u4e4e\u540c\u65f6\u53d1\u751f\u8bfb\u53d6\u4e86 mem[x]\uff0c\u90a3\u4e48\u5c31\u4f1a\u51fa\u73b0\u95ee\u9898\uff1a\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8bfb\u53d6 mem[x]\uff0c\u7136\u540e\u5404\u81ea\u8ba1\u7b97\u66f4\u65b0\u540e\u7684\u503c\uff0c\u7136\u540e\u5404\u81ea\u5199\u56de mem[x]\uff1b\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6700\u7ec8\u7684 mem[x] \u4f1a\u6bd4\u539f\u6765\u5927 3\uff1b\u4f46\u73b0\u5728\u7684 mem[x] \u53ea\u6bd4\u539f\u6765\u5927 2\uff0c\u5176\u4e2d process A \u5bf9\u5b83\u7684\u4fee\u6539\u5728\u7b2c 7 \u884c\u88ab\u8986\u76d6\u4e86\u3002

\u7a76\u5176\u6839\u672c\uff0c\u7531\u4e8e\u6211\u4eec\u5904\u5728\u5e76\u53d1\u8bed\u5883\u4e0b\uff0c\u6240\u4ee5\u4f1a\u51fa\u73b0\u82e5\u5e72\u7528\u6237\u540c\u65f6\u6301\u6709\u4e00\u4efd\u6570\u636e\u8d44\u6e90\u7684\u60c5\u51b5\uff08\u4e3a\u4e86\u53d1\u6325\u5e76\u53d1\u7684\u4f18\u52bf\uff0c\u6211\u4eec\u4e5f\u5e94\u5f53\u5c3d\u53ef\u80fd\u7684\u6ee1\u8db3\u8fd9\u79cd\u9700\u6c42\uff09\uff0c\u903b\u8f91\u4e0a\u6570\u636e\u4fee\u6539\u8fc7\u7a0b\u5e94\u5f53\u662f\u7b26\u53f7\u7684\u3001\u77ac\u95f4\u7684\u3001\u7acb\u5373\u751f\u6548\u7684\uff1b\u4f46\u5b9e\u9645\u4e0a\u6211\u4eec\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\u3002\u5728\u8fd9\u79cd\uff08\u540e\u8005\uff09\u8bed\u5883\u4e0b\uff0c\u5982\u679c\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8be5\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u4f7f\u7528\u8fc7\u65f6\u6570\u636e\u8fdb\u884c\u8ba1\u7b97\u3002

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u516d\u884c\u7684 t0 \u4ecd\u7136\u5728\u7528\u88ab process A \u66f4\u65b0\u4e4b\u524d\u7684 mem[x] \u505a\u8ba1\u7b97\uff0c\u56e0\u800c\u53ef\u4ee5\u8ba4\u4e3a\u6b64\u65f6 process B \u4e2d t0 \u53c2\u4e0e\u8fd0\u7b97\u7684\u3001\u6697\u542b\u7684 mem[x] \u7684\u6570\u636e\u5df2\u7ecf\u8fc7\u65f6\u3002

race condition

\u7c7b\u4f3c\u8fd9\u79cd\u7684\uff0c\u7531\u4e24\u4e2a\u4fe1\u53f7\u4ea7\u751f\u7ade\u4e89\uff0c\u5176\u7ade\u4e89\u60c5\u51b5\u5f71\u54cd\u6700\u7ec8\u7ed3\u679c\u7684\u60c5\u51b5\uff0c\u88ab\u79f0\u4e3a\u7ade\u6001\u6761\u4ef6(race condition)\u3002\u5728\u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u8c01\u540e\u6267\u884c\uff0c\u6700\u7ec8\u7ed3\u679c\u5c31\u662f\u8c01\u7684\u8f93\u51fa\uff0c\u800c\u53e6\u4e00\u4e2a\u7528\u6237\u7684\u8f93\u51fa\u5219\u4f1a\u88ab\u8986\u76d6\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u91cd\u70b9\u5e76\u4e0d\u662f\u201c\u5982\u4f55\u63a7\u5236\u7ade\u4e89\u7ed3\u679c\u201d\uff0c\u56e0\u4e3a\u65e0\u8bba\u7ade\u4e89\u7ed3\u679c\u5982\u4f55\uff08\u751a\u81f3\u8c01\u8d62\u4e86\u7ed3\u679c\u53ef\u80fd\u90fd\u4e00\u6837\uff09\uff0c\u53ea\u8981\u8fd9\u79cd\u201c\u7ade\u4e89\u201d\u51fa\u73b0\uff0c\u90a3\u4e48\u6700\u7ec8\u7ed3\u679c\u5c31\u6709\u53ef\u80fd\u4e0d\u7b26\u5408\u9884\u671f\u7684\u3002 \u771f\u6b63\u7684\u91cd\u70b9\u5e94\u8be5\u662f\u5982\u4f55\u907f\u514d\u8fd9\u79cd\u7ade\u4e89\u7684\u51fa\u73b0\u3002\u5c31\u6bd4\u5982\u4e0a\u9762\u7684\u4f8b\u5b50\uff0c\u65e0\u8bba\u6700\u7ec8 mem[x] \u662f 3 \u8fd8\u662f 2 \u90fd\u4e0d\u5bf9\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u5e94\u8be5\u662f 4\u2014\u2014\u65e0\u8bba\u662f\u5148\u8fdb\u884c +1 \u8fd8\u662f\u5148\u8fdb\u884c +2\u3002

\u6ce8\u610f

\u867d\u7136\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u6211\u4eec\u6a21\u62df\u7684\u4e24\u4e2a\u7a0b\u5e8f\u662f\u6309\u7167\u76f8\u540c\u901f\u5ea6\uff0c\u4e00\u884c\u4e00\u4e2a\u6307\u4ee4\u6267\u884c\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u5bf9\u6240\u6709\u8fdb\u7a0b\u6267\u884c\u7684\u901f\u5ea6\u4e0d\u5e94\u5f53\u6709\u6240\u5047\u8bbe\uff0c\u5373\u8fdb\u7a0b A \u4e0d\u77e5\u9053\u8fdb\u7a0b B \u7684\u901f\u5ea6\u3002

\u4e0d\u4ec5\u5982\u6b64\uff0c\u6211\u4eec\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u8981\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u5728\u591a\u9053\u8bed\u5883\u4e0b\u8fd9\u4e2a\u95ee\u9898\u90fd\u4f1a\u51fa\u73b0\uff0c\u4f8b\u5982\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502     \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524     \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502              \u2502     \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- mem[x] \u2502\u25c4\u2500\u2500\u2500\u2500\u2524 <ctx switch> \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502     \u2502              \u2502\n\u2502 mem[x] <- t0 \u2502     \u2502              \u2502 mem[x] = 2, B's t0 is out of date\n\u2502 <ctx switch> \u251c\u2500\u2500\u2500\u2500\u25ba\u2502 t0 <- t0 + 1 \u2502\n\u2502              \u2502     \u2502 t0 <- t0 + 1 \u2502 \n\u2502              \u2502     \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u95ee\u9898\u4f9d\u65e7\u3002

\u6839\u636e\u4e0a\u9762\u8fd9\u4e2a\u5177\u4f53\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u5982\u679c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u6709\u4e24\u79cd\u9009\u62e9\uff1a

  1. \u8fdb\u884c\u7b26\u53f7\u7684\u8fd0\u7b97\u800c\u975e\u6570\u503c\u7684\u8fd0\u7b97\uff0c\u8fd9\u6837\u8f93\u5165\u7684\u53d8\u5316\u80fd\u5728\u4efb\u610f\u65f6\u523b\u53cd\u6620\u5728\u8f93\u51fa\u4e0a\uff0c\u8fd9\u6837\u65f6\u65f6\u523b\u523b\u90fd\u662f\u201c\u6700\u65b0\u201d\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u201c\u8fc7\u65f6\u201d\uff1b
  2. \u4fdd\u8bc1\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u4fdd\u6301\u4e0d\u53d8\uff0c\u5373\u4e24\u4e2a\u53ef\u80fd\u7ade\u4e89\u7684\u64cd\u4f5c\uff0c\u5728\u65f6\u95f4\u4e0a\u4e0d\u5e94\u8be5\u6709\u4ea4\u96c6\uff1b

\u663e\u7136\uff0c\u6211\u4eec\u5e94\u5f53\u9009\u62e9\u7b2c\u4e8c\u79cd\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#the-critical-section-problem","title":"The Critical-Section Problem","text":"

\u4e3a\u4e86\u66f4\u597d\u5730\u5c55\u5f00\uff0c\u6211\u4eec\u5bf9\u4e0a\u9762\u7684\u8fd9\u79cd\u60c5\u51b5\u8fdb\u884c\u5efa\u6a21\uff0c\u5e76\u7ed9\u51fa\u89e3\u51b3 race condition \u95ee\u9898\u7684\u65b9\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u8303\u5f0f\uff1a

\u6211\u4eec\u5e94\u5f53\u4fdd\u8bc1\u5728\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x] \u7684\u65f6\u5019\uff0c\u5176\u5b83\u8fdb\u7a0b\u4e0d\u5e94\u8be5\u8bfb\u53d6 mem[x]\uff08\u81f3\u5c11\u4e0d\u5e94\u4ee5\u4fee\u6539 mem[x] \u4e3a\u76ee\u7684\u6765\u8bfb\u53d6\uff09\uff0c\u76f4\u5230\u8fd9\u4e2a\u8fdb\u7a0b\u5b8c\u6210\u5bf9 mem[x] \u7684\u4fee\u6539\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0cmem[x] \u8fd9\u4e2a\u5171\u4eab\u8d44\u6e90\u5e94\u5f53\u53ea\u80fd\u88ab\u4e00\u4e2a\u7528\u6237\u6301\u6709\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u53ea\u80fd\u88ab\u81f3\u591a\u4e00\u4e2a\u7528\u6237\u5360\u6709\u7684\u8d44\u6e90\u4e3a\u4e34\u754c\u8d44\u6e90\u3002\u800c\u7a0b\u5e8f\u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u4ee3\u7801\u6bb5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e34\u754c\u533a\u6bb5(critical section, CS)\ud83d\udd17\u3002

\u90a3\u4e48\uff0c\u5bf9\u4e8e\u4e4b\u524d\u63d0\u5230\u8fc7\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u62ff\u51fa\u6765\u5bf9\u6bd4\u6a21\u62df\u7684\u90e8\u5206\u5c31\u662f critical section\u3002

\u800c CS \u95ee\u9898\uff0c\u6307\u7684\u5c31\u662f\u5982\u4f55\u4fdd\u8bc1\u6700\u591a\u53ea\u6709\u4e00\u4e2a\u7528\u6237\u5728\u6267\u884c\u4e34\u754c\u533a\u6bb5\u7684\u4ee3\u78011\u3002

\u56f4\u7ed5\u4e34\u754c\u533a\u6bb5\uff0c\u6211\u4eec\u5b9a\u4e49\u80fd\u591f\u89e3\u51b3 CS \u95ee\u9898\u7684\u4ee3\u7801\u5e94\u5f53\u80fd\u591f\u505a\u5982\u4e0b\u5212\u5206\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Entry Section      \u2502 <-- ask for & wait for permission to enter CS\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Exit Section       \u2502 <-- release the critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u8fdb\u7a0b\u9700\u8981\u5728 entry section \u5224\u65ad\u662f\u5426\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u5373\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u5982\u679c\u4e0d\u884c\u5219\u7b49\u5f85\uff1b\u800c\u5728\u8fdb\u5165 critical section \u540e\uff0c\u8fdb\u7a0b\u9700\u8981\u5728 exit section \u91ca\u653e\u4e34\u754c\u8d44\u6e90\uff1b\u7136\u540e\u8131\u79bb CS \u95ee\u9898\u7684\u8bed\u5883\uff0c\u8fdb\u5165 remainder section \u7ee7\u7eed\u6267\u884c\u3002

Brainstorming

\u6574\u4e2a\u8fc7\u7a0b\u6709\u70b9\u50cf\u8c03\u5ea6\uff0c\u7b49\u5f85\u4e34\u754c\u8d44\u6e90\u7684\u8fc7\u7a0b\u5c31\u597d\u50cf ready \u6001\u7b49\u5f85\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u7684 CPU \u8d44\u6e90\uff08CPU \u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u79cd\u4e34\u754c\u8d44\u6e90\uff0c\u53ea\u4e0d\u8fc7\u5b83\u4e0d\u662f\u7531\u8fdb\u7a0b\u4e3b\u52a8\u5904\u7406\u548c\u7d22\u53d6\uff09\u3002

\u65e2\u7136\u5982\u6b64\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u201c\u72b6\u6001\u201d\u8fd9\u4e2a\u6982\u5ff5\u3002\u6211\u4eec\u53ea\u5173\u5fc3\u76f4\u63a5\u4e0e CS \u95ee\u9898\u6709\u5173\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5b9a\u4e49\uff1a\u5c31\u7eea\u3001\u4e34\u754c\u3001\u65e0\u5173\u4e09\u4e2a\u72b6\u6001\u3002

  1. \u5c31\u7eea\u6001\uff1a\u8fdb\u7a0b\u968f\u65f6\u51c6\u5907\u597d\u8fdb\u5165 critical section\uff0c\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff1b
  2. \u4e34\u754c\u6001\uff1a\u8fdb\u7a0b\u6b63\u5728\u6267\u884c critical section\uff0c\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u8fdb\u7a0b\u6267\u884c\u5b8c critical section\uff0c\u6267\u884c exit section \u6b63\u5728\u91ca\u653e\u6301\u6709\u7684\u4e34\u754c\u8d44\u6e90\u4e2d\uff1b
  3. \u65e0\u5173\u6001\uff1a\u4e0d\u5904\u4e8e\u5c31\u7eea\u6001\u4e5f\u4e0d\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4e0d\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u662f\u4f7f\u7528\u5b8c\u5df2\u7ecf\u91ca\u653e\uff1b

\u6839\u636e\u6211\u4eec\u5148\u524d\u7ed9\u51fa\u7684\uff0c\u89e3\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u6027\u8d28\u4e2d\u7684 mutual exclusion\uff0c\u4e0d\u80fd\u540c\u65f6\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4f46\u662f\u53ef\u4ee5\u6709\u82e5\u5e72\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\uff0c\u800c\u65e0\u5173\u6001\u5219\u8868\u793a\u4e0d\u4f1a\u4ea7\u751f\u7ade\u4e89\uff0c\u548c\u8c03\u5ea6\u8fc7\u7a0b\u5341\u5206\u76f8\u4f3c\u3002

\u8fd9\u4e9b\u5b9a\u4e49\u5c06\u4f1a\u5728\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u7d22\u4e2d\u8d77\u4f5c\u7528\u3002

\u540c\u65f6\uff0c\u6211\u4eec\u8981\u6c42\u89e3\u51b3\u65b9\u6848\u9700\u8981\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

requirements for solution to CS problem

  1. \u4e34\u754c\u4e92\u65a5(mutual exclusion)\uff1a\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\u4e34\u754c\u533a\u6bb5\u5e94\u5f53\u4e92\u76f8\u6392\u65a5\uff1b
    • \u5982\u679c\u8fdb\u7a0b \\(P_i\\) \u6b63\u5728\u6267\u884c\u5176 critical section\uff0c\u90a3\u4e48\u4e0d\u5e94\u5f53\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\uff08\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\uff09critical section\uff1b
  2. \u9009\u62e9\u65f6\u95f4\u6709\u9650(progress)\uff1a\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u64cd\u4f5c\u5e94\u5f53\u53ea\u6709\u5904\u4e8e entry/critical/exit section \u7684\u8fdb\u7a0b\u53c2\u4e0e\uff0c\u4e14\u8be5\u9009\u62e9\u5e94\u5f53\u5728\u6709\u9650\u65f6\u95f4\u5185\u88ab\u6267\u884c\uff1b
  3. \u7b49\u5f85\u65f6\u95f4\u6709\u9650(bounded waiting)\uff1a\u8fdb\u7a0b\u7b49\u5f85\u88ab\u5141\u8bb8\u8fdb\u5165 critical section \u7684\u65f6\u95f4\u5e94\u5f53\u662f\u6709\u9650\u7684\uff1b

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u8ba8\u8bba CS \u95ee\u9898\u662f\u5982\u4f55\u89e3\u51b3\u7684\u4e3a\u4e3b\u7ebf\uff0c\u63a2\u7d22\u5982\u4f55\u89e3\u51b3 race condition\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#for-kernel-code","title":"For Kernel Code","text":"

\u7531\u4e8e kernel code \u4e0b\u7684 CS \u95ee\u9898\u89e3\u51b3\u8f83\u4e3a\u6e05\u6670\u76f4\u63a5\uff0c\u6240\u4ee5\u5148\u884c\u4ecb\u7ecd\u3002

For Kernel Code

\u5728 kernel code \u4e2d\u4e5f\u666e\u904d\u5b58\u5728\u7740 race condition \u7684\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

Race condition when assigning a pid.

\u4e0a\u4f8b\u4e2d \\(P_0\\) \u548c \\(P_1\\) \u540c\u65f6\u8bbf\u95ee\u4e86 next_available_pid \u8fd9\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u4ea7\u751f\u7ade\u4e89\uff0c\u5bfc\u81f4\u6700\u540e\u6709\u4e24\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e86\u540c\u4e00\u4e2a pid\u3002

\u6b32\u89e3\u51b3 kernel code \u4e2d\u7684 CS \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u5728 kernel code \u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u884c\u4e3a\uff0c\u4ece\u800c\u89e3\u51b3 CS \u95ee\u9898\u3002

\u5bf9\u4e8e\u5355\u5904\u7406\u5668\u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728 kernel code \u4e2d\u7981\u6b62\u4e2d\u65ad\uff0c\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff1b\u800c\u5bf9\u4e8e\u591a\u5904\u7406\u5668\u6765\u8bf4\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c31\u4e0d\u90a3\u4e48\u5408\u9002\u4e86\u2014\u2014\u6211\u4eec\u9700\u8981\u540c\u65f6\u544a\u8bc9\u591a\u4e2a\u5904\u7406\u5668\u4e2d\u65ad\u88ab\u7981\u6b62\uff0c\u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u7684\u65f6\u5ef6\u4ecd\u7136\u4f1a\u4ea7\u751f\u95ee\u9898\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4e5f\u4f1a\u5e26\u6765\u989d\u5916\u7684\u5f00\u9500\u3002\u5728\u591a\u5904\u7406\u5668\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u62a2\u5360\u5f0f\u5185\u6838(preemptive kernels)\u548c\u975e\u62a2\u5360\u5f0f\u5185\u6838(non-preemptive kernels)\uff0c\u5173\u952e\u662f\u540e\u8005\u5b9e\u73b0\u4e86\u4e00\u6bb5\u65f6\u95f4\u5185\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode2\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u63a2\u7d22\u66f4\u4e3a\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\u3002

\u8bf4\u660e

\u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\u4ee3\u7801\uff0c\u6211\u4eec\u7528\u5168\u5927\u5199\u6765\u8868\u793a\u4e00\u4e2a\u5171\u4eab\u8d44\u6e90\uff0c\u4f8b\u5982 READY\uff0c\u5b83\u80fd\u591f\u88ab\u82e5\u5e72\u8fdb\u7a0b\u8bbf\u95ee\u3002\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5e94\u5f53\u7531\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\uff0c\u5e76\u4e0d\u662f\u6211\u4eec\u5173\u6ce8\u7684\u91cd\u70b9\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#petersons-algorithm","title":"Peterson\u2019s Algorithm","text":"

Links

Peterson's algorithm \u662f\u5bf9\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7684\u540c\u6b65\u95ee\u9898\u7684\u4e00\u4e2a\u89e3\u6cd5\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u5c40\u9650\u6027\uff0c\u4f46\u5176\u8bbe\u8ba1\u76f8\u5bf9\u7b80\u5355\uff0c\u6240\u4ee5\u5148\u884c\u7ed9\u51fa\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe \\(P_0\\) \u548c \\(P_1\\) \u662f\u53c2\u4e0e\u540c\u6b65\u95ee\u9898\u8ba8\u8bba\u7684\u4e24\u4e2a\u8fdb\u7a0b\u3002

\u57fa\u4e8e Peterson's algorithm \u5bf9\u591a\u8fdb\u7a0b\u60c5\u51b5\u7684\u6269\u5c55\u88ab\u79f0\u4e3a filter algorithm\uff0c\u4f46 filter algorithm \u4e0d\u6ee1\u8db3 bounded waiting time \u7684\u6761\u4ef6\uff0c\u8bfb\u8005\u6709\u5174\u8da3\u53ef\u4ee5\u81ea\u884c\u4e86\u89e3\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7b97\u6cd5\u63cf\u8ff0","title":"\u7b97\u6cd5\u63cf\u8ff0","text":"

\u4e3a\u4e86\u4fdd\u8bc1\u5904\u4e8e\u4e34\u754c\u6001\u7684\u8fdb\u7a0b\u81f3\u591a\u53ea\u6709\u4e00\u4e2a\uff0c\u6211\u4eec\u5e94\u5f53\u5728\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u786e\u8ba4\u6ca1\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\u540e\u518d\u8fdb\u5165\u3002\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4ef6\u4e8b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u5904\u5728 \\(P_0\\) \u65f6\uff0c\u6211\u4eec\u5982\u4f55\u77e5\u9053 \\(P_1\\) \u662f\u5426\u6b63\u5904\u4e8e\u4e34\u754c\u6001\u5462\uff1fPeterson\u2019s Algorithm \u901a\u8fc7\u5982\u4e0b\u65b9\u5f0f\u5b9e\u73b0\u4e86\u8fd9\u4ef6\u4e8b\uff1a

// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

\u9996\u5148\uff0c\u6211\u4eec\u8bf4\u660e entry section \u6ca1\u6709\u4e34\u754c\u8d44\u6e90\u3002READY \u662f\u4e00\u4e2a\u5171\u4eab\u7684\u6570\u7ec4\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u53ea\u4fee\u6539\u4e0e\u81ea\u5df1\u4e00\u4e00\u5bf9\u5e94\u7684 element\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a READY \u4e0d\u4f1a\u51fa\u73b0 race condition\uff0c\u56e0\u800c\u4e5f\u4e0d\u662f\u4e34\u754c\u8d44\u6e90\u3002\u800c TURN\uff0c\u6211\u4eec\u8fd9\u91cc\u53ea\u5bf9 TURN \u8fdb\u884c\u5199\u7684\u64cd\u4f5c\uff0c\u4f46\u662f P1 \u548c P2 \u8c01\u5148\u8dd1\u5230\u8fd9\u4e00\u884c\u4f1a\u51b3\u5b9a TURN \u6700\u540e\u7684\u503c\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u8fd9\u91cc\u6709 race condition\u3002

\u4f46\u8fd9\u5c31\u662f Peterson\u2019s Algorithm \u5de7\u5999\u7684\u5730\u65b9\uff0cPeterson's \u5229\u7528 race condition \u8fd9\u4e2a\u201c\u540e\u8986\u76d6\u524d\u201d\u7684\u6027\u8d28\uff0c\u5b9e\u73b0\u4e86\u6807\u8bb0\u4e86\u8fd9\u4e24\u4e2a\u8fdb\u7a0b\u7684\u5148\u6765\u540e\u5230\u7684\u6548\u679c\u3002\u6211\u4eec\u90fd\u5411\u8fd9\u4e2a TURN \u5199\u4e00\u4e2a\u4e92\u5f02\u7684\u503c\uff08\u6bd4\u5982\u81ea\u5df1\u7684 id\uff0c\u6216\u8005\u5bf9\u65b9\u7684 id\uff09\uff0c\u7b49\u5927\u5bb6\u90fd\u5199\u597d\u540e\u6211\u4eec\u770b\u770b\u8fd9\u4e2a\u503c\u6700\u7ec8\u662f\u8c01\u5199\u7684\uff0c\u4e8e\u662f\u5c31\u77e5\u9053\u8c01\u540e\u5230\u3002

\u5229\u7528\u8fd9\u4e2a\u539f\u7406\uff0cPeterson's \u8fd9\u91cc\u505a\u4e86\u4e00\u4e2a\u201c\u975e\u5e38\u6709\u4e2d\u56fd\u4eba\u6c14\u8d28\u201d\u7684\u4e8b\u60c5\uff1a\\(P_0\\) \u548c \\(P_1\\) \u4e0a\u516c\u4ea4\u8f66\u540e\u540c\u65f6\u770b\u4e0a\u4e86\u4e00\u4e2a\u5ea7\u4f4d\uff0c\\(P_0\\) \u8bf4\uff1a\u201c\u4f60\u5750\u5427\u3002\u201d\uff0c \\(P_1\\) \u81ea\u7136\u4e5f\u8981\u5ba2\u6c14\u4e00\u4e0b\uff0c\u8bf4\uff1a\u201c\u8fd8\u662f\u4f60\u5750\u5427\uff01\u201d\u3002\u73b0\u5728\u4e24\u8fb9\u90fd\u5ba2\u6c14\u8fc7\u4e86\uff0c\\(P_0\\) \u5c31\u53ef\u4ee5\u5fc3\u5b89\u7406\u5f97\u5730\u5750\u4e0b\u4e86\u3002\u5bf9\u4e0a\u8ff0\u8fc7\u7a0b\uff0c\u6211\u4eec\u7ed9\u51fa \\(P_0\\) \u83b7\u5f97\u6905\u5b50\u7684\u51c6\u786e\u6761\u4ef6\u6709\uff1a

  1. \\(P_0\\) \u60f3\u5750\u4e0b\uff0c\\(P_1\\) \u4e5f\u60f3\u5750\u4e0b\uff0c\u5426\u5219\u5c31\u6ca1\u6709\u51b2\u7a81\u4e86\uff1b
  2. \\(P_0\\) \u53d1\u73b0 \\(P_1\\) \u5728\u5ba2\u6c14\uff0c\u4f46 \\(P_0\\) \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e86\uff1b

\u5bf9\u5e94\u5230\u4e0a\u9762\u7ed9\u51fa\u7684\u4ee3\u7801\u91cc\uff0c\u8fd9\u4e2a\u6761\u4ef6\u53ef\u4ee5\u7ffb\u8bd1\u4e3a\uff1a

  1. READY[0] = READY[1] = true\uff1b
  2. TURN \u2260 j\uff0c\u4f46\u6b64\u524d \\(P_i\\) \u5df2\u7ecf\u6267\u884c\u8fc7 TURN <- j\uff1b

\u8bf7\u8bfb\u8005\u4ed4\u7ec6\u601d\u8003\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5e76\u9002\u5f53\u8fdb\u884c\u5168\u9762\u7684\u6a21\u62df\u4ee5\u7406\u89e3 Peterson's \u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u6027\u8d28\u8bc1\u660e","title":"\u6027\u8d28\u8bc1\u660e","text":"

\u73b0\u5728\u6211\u4eec\u9700\u8981\u8bc1\u660e\u8fd9\u4e2a\u7b97\u6cd5\u6ee1\u8db3\u6027\u8d28\u3002

\u6211\u7684\u8bc1\u660e\u6bd4\u8f83\u8be6\u7ec6\u548c\u5570\u55e6\uff0c\u4f46\u6211\u8ba4\u4e3a\u5b8c\u6574\u5730\u6a21\u62df\u66f4\u52a0\u6709\u5229\u4e8e\u76f4\u89c9\u7406\u89e3\uff0c\u5982\u679c\u4f60\u60f3\u8981\u66f4\u7b80\u6d01\u7684\u8bc1\u660e\uff0c\u53ef\u4ee5\u53c2\u8003 xyx \u7684\u7b14\u8bb0\u3002

mutual exclusion
// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

lemma

\u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c 7 \u884c\uff0c\u90a3\u4e48\u663e\u7136\uff1a

  1. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u60f3\u8981\u8fdb\u5165 critical section\uff0c\u5373 READY[i] \u548c READY[j] \u90fd\u4e3a true\uff1b
  2. TURN \u7684\u503c\u4e0d\u518d\u4f1a\u88ab\u66f4\u6539\uff1b
  3. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u5c1a\u672a\u8fdb\u5165 critical section\uff1b

\u7531\u4e8e TURN \u5fc5\u5b9a\u4e5f\u53ea\u80fd\u4e3a i \u6216 j\uff0c\u6240\u4ee5 i \u548c j \u5fc5\u7136\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u8fdb\u7a0b\u63a5\u4e0b\u6765\u4f1a break loop \u5e76\u8fdb\u5165 critical section\uff0c\u5728\u5b83\u7ed3\u675f\u4e4b\u524d\uff0c\u5373\u5728 READY[?] \u88ab\u6539\u53d8\u4e4b\u524d\uff0c\u8be5\u6761\u4ef6\u6301\u7eed\u6210\u7acb\u3002

\u56e0\u6b64\u6211\u4eec\u5f97\u5230\u4e00\u4e2a\u7ed3\u8bba\uff1a\u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c\u4e03\u884c\uff0c\u90a3\u4e48\u4ece\u8be5\u65f6\u523b\u5f00\u59cb\uff0c\u5230\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u79bb\u5f00 critical section \u4e3a\u6b62\uff0c\u4e92\u65a5\u6027\u8d28\u90fd\u6210\u7acb\u3002

\u73b0\u5728\u6211\u4eec\u8003\u8651 i \u5df2\u7ecf\u5148\u884c\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff0c\u800c j \u8fd8\u6ca1\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff1a

Situation 1

\u5982\u679c j \u8fd8\u6ca1\u8fdb\u5165\u7b2c 5 \u884c\uff0c\u90a3\u4e48 READY[j] \u4e3a false\uff0c\u6b64\u65f6\u6ca1\u6709\u7ade\u4e89\uff0ci \u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6001\u3002\u5e76\u4e14 j \u4e4b\u540e\u8fd0\u884c\u5230\u7b2c 7 \u884c\u65f6\uff0cTURN == <another> \u59cb\u7ec8\u6210\u7acb\u3002\u6240\u4ee5 j \u4f55\u65f6\u8fdb\u5165 critical section \u5b8c\u5168\u53d6\u51b3\u4e8e READY[j]\uff0c\u5373 j \u4f55\u65f6\u79bb\u5f00 critical section\u3002

\u663e\u7136\uff0c\u6b64\u65f6\u6ee1\u8db3\u4e92\u65a5\u6027\u8d28\u3002

Situation 2

\u5982\u679c j \u5df2\u7ecf\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\uff0c\u8fd8\u6ca1\u6267\u884c\u7b2c 6 \u884c\uff0c\u90a3\u4e48\u5bf9\u4e8e i \u6765\u8bf4\uff0c(READY[j] && TURN == j) \u4e3a true\uff0c\u6b64\u65f6 i \u5c06\u7b49\u5f85 j\uff0c\u8fdb\u5165 Situation 3\u3002

\u4e5f\u5c31\u662f\u8bf4\uff0c\u8981\u4e48 i \u548c j \u4e0d\u7ade\u4e89\uff0c\u8981\u4e48\u4e24\u8005\u90fd\u8fd0\u884c\u5230\u7b2c 7 \u884c\u540e\u624d\u4f1a\u6709\u8fdb\u7a0b\u8fdb\u5165 critical section

\u8fd9\u5c31\u597d\u50cf\u4e24\u8005\u5728\u7b2c 6 \u884c\u6bd4\u8c01\u5148\u4e3e\u624b\uff0c\u7136\u540e\u7b49\u4e24\u8005\u90fd\u4e3e\u8fc7\u624b\uff08\u90fd\u8dd1\u5b8c\u7b2c 6 \u884c\uff0c\u5230\u8fbe\u7b2c 7 \u884c\uff09\u540e\uff0c\u518d\u5224\u65ad\u8c01\u8fdb\u5165 critical section\uff0c\u800c\u8fdb\u5165\u7b2c 7 \u884c\u4ee5\u540e\u6240\u6709\u7684\u5224\u65ad\u6761\u4ef6\u90fd\u662f\u76f8\u5bf9\u9759\u6b62\u7684\u3001\u4e0d\u4f1a\u518d\u88ab\u4fee\u6539\u7684\uff0c\u56e0\u800c\u907f\u514d\u751a\u81f3\u5229\u7528\u4e86 race condition \u5bf9 selection \u7684\u5f71\u54cd\uff0c\u4fdd\u8bc1\u4e86\u4e92\u65a5\u7684\u6027\u8d28\u3002

progress

\u8fd9\u6761\u6027\u8d28\u7684\u6210\u7acb\u6bd4\u8f83\u7b26\u5408\u76f4\u89c9\uff0c\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f\u4e0d\u4f1a\u51fa\u73b0\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u5728 while () \u88ab\u963b\u585e\u4f4f\u7684\u60c5\u51b5\u3002\u4f46\u662f\u8fd9\u70b9\u975e\u5e38\u663e\u7136\uff0cTURN == i && TURN == j \u5fc5\u7136\u662f false\uff0c\u6240\u4ee5\u4e24\u4e2a\u5faa\u73af\u603b\u6709\u4e00\u4e2a\u4f1a\u88ab break\u3002

bounded waiting time

\u5728 Peterson's \u4e2d\uff0c\u7b49\u5f85\u65f6\u95f4\u4e3b\u8981\u6307\u8fd9\u90e8\u5206\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u5c24\u5176\u6307\u7b2c\u4e03\u884c\u7684 while \u5faa\u73af\u3002

// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u65ad\u5faa\u73af\u7684\u6761\u4ef6\u662f\uff1aREADY[j] && TURN == j\uff0c\u5982\u679c\u8be5\u5faa\u73af\u4e00\u5f00\u59cb\u5c31\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u663e\u7136\u662f\u7b26\u5408 bounded waiting time \u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u8fd9\u4e2a\u6761\u4ef6\u6700\u591a\u80fd\u6301\u7eed\u591a\u4e45\u3002

A. READY[j] \u4e3a true

\u8fd9\u9700\u8981 process j \u5df2\u7ecf\u8fd0\u884c\u8fc7\u7b2c 5 \u884c\uff0c\u5e76\u4e14\u8fd8\u6ca1\u8fd0\u884c\u7b2c 15 \u884c\uff0c\u5373 process j \u4e5f\u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\u3002

\u8fd9\u4e00\u6761\u662f\u5728\u5224\u65ad\u662f\u5426\u6709\u51b2\u7a81\u5b58\u5728\uff0c\u5982\u73b0\u5728\u53ea\u6709 process i \u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\uff0c\u90a3\u65e0\u9700\u7b49\u5f85\u76f4\u63a5\u8fdb\u5165\u5373\u53ef\u3002\u901a\u8fc7\u6539\u53d8\u8fd9\u4e2a\u6761\u4ef6\u800c\u8fdb\u5165\u4e34\u754c\u6001\u6709\u4e24\u79cd\u53ef\u80fd\uff1a

  1. \u4e00\u5f00\u59cb\u51b2\u7a81\u5c31\u4e0d\u5b58\u5728\uff1b
  2. process j \u521a\u79bb\u5f00\u4e34\u754c\u6001\uff0c\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff1b

B. TURN == j \u4e3a true

\u6709\u4e24\u79cd\u53ef\u80fd\uff1a

  1. process j \u8fd8\u6ca1\u8fd0\u884c\u7b2c 6 \u884c\uff1b
  2. process j \u5728 process i \u4e4b\u524d\u5c31\u8fd0\u884c\u4e86\u7b2c 6 \u884c\uff1b

\u5bf9\u4e8e\u7b2c\u4e00\u79cd\u60c5\u51b5\uff0c\u7531\u4e8e A. \u6210\u7acb\u540e\u624d\u4f1a\u5224\u65ad\u8fd9\u6761\uff0c\u6240\u4ee5 process j \u7684\u72b6\u6001\u5176\u5b9e\u662f\u521a\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\u8fd8\u6ca1\u8fd0\u884c\u5b8c\u7b2c 6 \u884c\uff0c\u663e\u7136\u8fd9\u4e2a\u65f6\u95f4\u662f\u6709\u754c\u7684\u3002

\u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u8bf4\u660e i \u662f\u540e\u6765\u8005\uff0cj \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e00\u6b21\u4e86\uff0c\u6240\u4ee5\u5e94\u5f53\u8ba9 j \u8fd0\u884c\uff0ci \u7b49\u5f85 j \u79bb\u5f00\u4e34\u754c\u6001\u91ca\u653e\u8d44\u6e90\uff0c\u6b64\u65f6\u901a\u8fc7 A.2. \u6765\u8fdb\u5165\u4e34\u754c\u6001\u3002\u800c process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\u4e5f\u5e94\u5f53\u6709\u9650\u7684\u3002

\u7efc\u4e0a\u6240\u8ff0\uff0cwaiting time \u7684\u6700\u5927\u503c\u57fa\u672c\u4e0a\u53d6\u81ea\uff1a

  1. process j \u6267\u884c\u7b2c 6 \u884c\u7684\u65f6\u95f4\uff1b
  2. process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\uff1b

\u901a\u8fc7\u4e4b\u524d\u7684\u8bba\u8ff0\u6211\u4eec\u77e5\u9053\uff0c\u8fd9\u4e24\u4e2a\u90fd\u662f\u6709\u754c\u7684\uff0c\u4e8e\u662f\u8be5\u6027\u8d28\u5f97\u8bc1\u3002

Oops!

\u4f46\u662f\uff0cPeterson's \u5b9e\u9645\u4e0a\u65e0\u6cd5\u9002\u7528\u4e8e\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\u3002\u4e0a\u8ff0\u505a\u6cd5\u6709\u4e00\u4e2a\u5173\u952e\uff0c\u4e5f\u662f\u6211\u4eec\u5728\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u4e00\u76f4\u9ed8\u8ba4\u6210\u7acb\u7684\u4e8b\u60c5\uff1a\u8fdb\u7a0b\u603b\u662f\u5148\u6267\u884c READY[i] = true;\uff0c\u7136\u540e\u624d\u4f1a\u6267\u884c TURN = j;\uff0c\u5373\u5148\u8fdb\u5165\u5c31\u7eea\u6001\uff0c\u518d\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u8fd9\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u5408\u7406\u7684\u6761\u4ef6\u3002\u4f46\u5728\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0c\u7f16\u8bd1\u5668\u53ef\u80fd\u4f1a\u901a\u8fc7\u91cd\u6392\u5217\u90e8\u5206\u8bed\u53e5\u6765\u66f4\u597d\u5730\u5229\u7528 CPU \u8d44\u6e90\uff08\u53c2\u8003\u8ba1\u7ec4\u7684\u5404\u79cd\u7ade\u4e89\uff09\u3002\u800c\u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\uff08\u5c31\u7eea\u548c\u8bf7\u6c42\uff09\u5e76\u6ca1\u6709\u64cd\u4f5c\u76f8\u540c\u5185\u5bb9\uff0c\u56e0\u800c\u4ea4\u6362\u987a\u5e8f\u662f\u4e0d\u4f1a\u5f71\u54cd\u7ed3\u679c\u7684\uff0c\u6240\u4ee5\u53ef\u80fd\u88ab\u7f16\u8bd1\u5668\u4ea4\u6362\u3002\u800c\u8fd9\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u51fa\u73b0\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

The effects of instruction reordering in Peterson\u2019s solution.

\u5728\u68d5\u8272\u6807\u8bb0\u65f6\u523b\uff0cprocess 1 \u8fdb\u884c while \u5faa\u73af\u5224\u65ad\uff0c\u53d1\u73b0 READY[0] \u4e3a false\uff0c\u4f46\u6b64\u65f6 TURN \u6307\u5411\u5bf9\u65b9\uff0c\u6240\u4ee5\u6309\u7167\u6211\u4eec\u5148\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 1 \u4f1a\u8ba4\u4e3a process 0 \u662f\u5df2\u7ecf\u8fd0\u884c\u5b8c critical section\uff0c\u5df2\u7ecf\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u8fdb\u5165\u4e34\u754c\u6001\uff1b\u7136\u800c\uff0c\u5728\u7eff\u8272\u6807\u8bb0\u65f6\u523b\uff0c\u5bf9\u4e8e process 0\uff0c\u6b64\u65f6 TURN \u6307\u5411\u81ea\u5df1\uff0cprocess 1 \u8fd8\u6ca1\u8fd0\u884c\u5b8c\u6240\u4ee5 READY[1] \u8fd8\u662f true\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 0 \u4f1a\u8ba4\u4e3a process 1 \u5728\u7b49\u5f85\u81ea\u5df1\uff0c\u6240\u4ee5\u4e5f\u8fdb\u5165\u4e86\u4e34\u754c\u6001\u3002\u4e8e\u662f\uff0c\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8fdb\u5165\u4e86\u4e34\u754c\u6001\uff0c\u8fdd\u53cd\u4e86 mutual exclusion \u7684\u6027\u8d28\u3002

\u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a Peterson's Algorithm \u4ecd\u7136\u6ca1\u6709\u89e3\u51b3\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#memory-barriers","title":"Memory Barriers","text":"

\u8be5\u65b9\u6cd5\u5b9e\u9645\u4e0a\u662f\u5bf9\u8f6f\u4ef6\u65b9\u6cd5\u7684\u8865\u8db3\u3002\u6211\u4eec\u5148\u524d\u63d0\u5230\uff0cPeterson's Algorithm \u5931\u6548\u7684\u539f\u56e0\u662f\u7f16\u8bd1\u5668\u4f1a\u6839\u636e\u9700\u6c42\u91cd\u6392\u5217\u4e00\u4e9b\u5185\u5b58\u64cd\u4f5c\uff0c\u800c memory barriers \u4fdd\u8bc1 barrier \u4e4b\u524d\u7684 S/L \u6307\u4ee4\u5fc5\u987b\u5728 barrier \u4e4b\u540e\u7684 S/L \u6307\u4ee4\u4e4b\u524d\u5b8c\u6210\uff0c\u4f7f\u6211\u4eec\u80fd\u591f\u4e3b\u52a8\u7981\u6b62\u7f16\u8bd1\u5668\u505a\u8fd9\u79cd\u91cd\u6392\u3002

// `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nmemory_barrier();                   // \u2502\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

Memory Model

\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u67b6\u6784\u53ef\u80fd\u4f1a\u5bf9\u7528\u6237\u7a0b\u5e8f\u64cd\u4f5c\u5185\u5b58\u7684\u4fdd\u8bc1\u6709\u6240\u4e0d\u540c\uff0c\u8fd9\u79cd\u4fdd\u8bc1\u88ab\u79f0\u4e3a memory model\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u5206\u4e3a\u4e24\u5927\u7c7b\uff1a

  1. \u5f3a\u6709\u5e8f(strongly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b
  2. \u5f31\u6709\u5e8f(weakly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u4e0d\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b

\u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4e86\u63d0\u9ad8\u5185\u5b58\u64cd\u4f5c\u7684\u6548\u7387\uff0c\u6211\u4eec\u5f15\u5165\u4e86 cache\uff0c\u5728\u591a\u5904\u7406\u5668\u60c5\u51b5\u4e0b\uff0ccache \u673a\u5236\u7684\u5b58\u5728\u53ef\u80fd\u5bfc\u81f4\u8fdb\u7a0b A \u5bf9\u5185\u5b58\u7684\u5199\u65e0\u6cd5\u5bf9\u8fdb\u7a0b B \u7acb\u523b\u53ef\u89c1\uff0c\u8fd9\u5c31\u662f\u5f31\u6709\u5e8f\u7684\u4e00\u79cd\u4f53\u73b0\u3002

\u8fd9\u90e8\u5206\u6211\u6ca1\u6709\u5b8c\u5168\u641e\u6e05\u695a\uff0c\u4e66\u672c\u7684\u903b\u8f91\u975e\u5e38\u7684\u8be1\u5f02\uff1a\u4e66\u672c\u8ba4\u4e3a memory barrier \u662f\u5f31\u6709\u5e8f\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4f46\u662f\u6211\u59cb\u7ec8\u6ca1\u660e\u767d\u5b83\u4eec\u4e4b\u95f4\u7684\u903b\u8f91\u5728\u54ea\u91cc\uff0c\u4ee5\u53ca\u201c\u6709\u5e8f\u201d\u548c\u201c\u7acb\u523b\u53ef\u89c1\u201d\u7684\u6839\u672c\u8054\u7cfb\u5728\u54ea\u91cc\u3002\u8fd9\u91cc\u4e00\u5b9a\u662f\u5b58\u5728\u4e0d\u6e05\u695a\u7684\u5730\u65b9\u7684\u3002\u4f46\u662f\u8fd9\u90e8\u5206\u770b\u8d77\u6765\u4e0d\u662f\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u6211\u5c31\u5148\u653e\u7740\u4e0d\u7ba1\u4e86\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#hardware-instructions","title":"Hardware Instructions","text":"

\u8ba8\u8bba Peterson's Algorithm \u540e\u6211\u4eec\u5e94\u5f53\u610f\u8bc6\u5230\uff0c\u540c\u6b65\u95ee\u9898\u7684\u51fa\u73b0\u662f \u24f5 \u786c\u4ef6\u64cd\u4f5c\u6570\u636e\u9700\u8981\u65f6\u95f4\uff0c\u4e0e \u24f6 \u6570\u636e\u5177\u6709\u5171\u4eab\u6027\u7684\u4e0d\u534f\u8c03\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u786c\u4ef6\u4ea7\u751f\u7684\u95ee\u9898\u3002\u56e0\u800c\uff0c\u8981\u60f3\u66f4\u597d\u7684\u89e3\u51b3\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u662f\u5e94\u5f53\u4ece\u786c\u4ef6\u51fa\u53d1\u3002\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u539f\u5b50\u6027(atomic)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5b83\u7684\u57fa\u672c\u903b\u8f91\u662f\u8ba9\u201c\u9700\u8981\u65f6\u95f4\u7684\uff0c\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u201d\uff0c\u53d8\u6210\u4e00\u4e2a\u201c\u5728\u65f6\u95f4\u4e0a\u4e0d\u53ef\u5206\u5272\u3001\u4e0d\u53ef\u88ab\u6253\u65ad\u7684\uff0c\u5373\u539f\u5b50\u6027\u7684\u64cd\u4f5c\u201d\u3002\u4e0d\u540c\u786c\u4ef6\u53ef\u80fd\u63d0\u4f9b\u4e0d\u540c\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6211\u4eec\u8fd9\u91cc\u5c06\u5b83\u4eec\u62bd\u8c61\u4e3a test_and_set() \u548c compare_and_swap() \u4e24\u7c7b\u6765\u4ecb\u7ecd\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#test_and_set","title":"test_and_set()","text":"

Links

<atomic> test_and_set(bool * target) {\nbool ret = *target;\n*target = true;\nreturn ret;\n}\n

\u8be5\u6307\u4ee4\u7684\u529f\u80fd\u5c31\u7c7b\u4f3c\u4e0a\u9762\u8fd9\u6bb5\u4ee3\u7801\uff1a\u5c06\u76ee\u6807\u8bbe\u4e3a true\uff0c\u540c\u65f6\u8fd4\u56de\u5176\u65e7\u503c\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u4e2a\u6307\u4ee4\u9700\u8981\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u5982\u679c\u6709\u82e5\u5e72 test_and_set() \u540c\u65f6\u53d1\u751f\uff0c\u90a3\u4e48\u65e0\u8bba\u5e76\u53d1\u8fd8\u662f\u5e76\u884c\uff0c\u5b83\u4eec\u90fd\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u5730\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u4ea7\u751f\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u79cd atomic \u7684\u64cd\u4f5c\u5929\u7136\u4fdd\u8bc1\u4e86 mutual exclusion\uff0c\u56e0\u800c\u5bf9\u4e8e\u5b9e\u73b0\u4e86 test_and_set() \u7684\u673a\u5668\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 test_and_set() \u6765\u89e3\u51b3 CS \u95ee\u9898\u3002

process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n\n/* other things */                  // - remainder section\n}\n

\u5728\u7b2c 3 \u884c\uff0c\u5faa\u73af\u7b49\u5f85\u7684\u6761\u4ef6\u53d8\u4e3a test_and_set(&LOCK)\uff0c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f false\uff0c\u5219\u53ef\u4ee5\u7ee7\u7eed\uff0c\u5e76\u4e14\u6b64\u65f6 LOCK \u7684\u503c\u88ab\u539f\u5b50\u6027\u5730\u4fee\u6539\u4e3a true\uff1b\u800c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f true\uff0c\u90a3\u4e48\u5b83\u7ecf\u8fc7 test_and_set(&LOCK) \u540e\u7684\u503c\u4ecd\u7136\u662f true\uff0c\u4e14\u9700\u8981\u7b49\u5f85\uff0c\u76f4\u5230\uff1a\u5c06 LOCK \u6539\u6210 true \u7684\u90a3\u4e2a\u8fdb\u7a0b\u5728 exit section \u5c06 LOCK \u6539\u56de false\uff0c\u5373\u91ca\u653e\u9501\u3002

\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u4e0e\u6211\u4eec\u8ba8\u8bba Peterson's Algorithm \u65f6\u7684\u8bed\u5883\u4e0d\u540c\uff0c\u6211\u4eec\u73b0\u5728\u4e0d\u518d\u5047\u8bbe\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53ea\u6709\u4e24\u4e2a\uff08\u8fd9\u662f Peterson's \u7684\u5c40\u9650\u6027\u4e4b\u4e00\uff09\u3002\u5728\u8fd9\u4e2a\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u518d\u6765\u8003\u8651\u5b83\u662f\u5426\u6ee1\u8db3\u4e09\u6761\u6027\u8d28\u3002

mutual exclusion

\u7531\u4e8e test_and_set() \u662f\u539f\u5b50\u6027\u7684\uff0c\u6240\u4ee5\u540c\u65f6\u6267\u884c\u7684\u4e00\u7cfb\u5217 test_and_set() \u4e2d\uff0c\u53ea\u6709\u4e00\u4e2a\u80fd\u8fd4\u56de false\uff0c\u5373\u53ea\u6709\u4e00\u4e2a\u80fd\u901a\u8fc7\u9501\uff0c\u56e0\u800c\u5929\u751f\u6ee1\u8db3\u4e86 mutual exclusion\u3002

progress

\u4ee3\u7801\u4e2d\u5bf9 LOCK \u7684\u4fee\u6539\u64cd\u4f5c\u662f\u95ed\u5408\u7684\uff0c\u5373\u8fdb\u5165 critical section \u4f1a\u5bfc\u81f4 LOCK \u53d8\u4e3a false\uff0c\u4f46\u79bb\u5f00 critical section \u5fc5\u5b9a\u5bfc\u81f4 LOCK \u53d8\u4e3a true\u3002\u56e0\u6b64\uff0c\u53ea\u8981\u6ca1\u6709\u8fdb\u7a0b\u5904\u4e8e critical section\uff0c\u90a3\u4e48 LOCK \u5fc5\u5b9a\u4e3a false\uff0c\u5219\u4e00\u5b9a\u6709\u5c31\u7eea\u7684\u8fdb\u7a0b\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u800c\u8fd0\u884c critical section \u7684\u65f6\u95f4\u662f\u6709\u9650\u7684\uff0c\u56e0\u6b64 LOCK \u53c8\u4e00\u5b9a\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u53d8\u4e3a false\uff0c\u4ece\u800c\u6ee1\u8db3 progress\u3002

bounded waiting time

\u5982\u679c\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7ade\u4e89\uff0c\u90a3\u4e48\u901a\u8fc7\u7c7b\u4f3c\u8bc1\u660e progress \u7684\u8fc7\u7a0b\u53ef\u4ee5\u5f97\u5230 bounded waiting time \u662f\u53ef\u4ee5\u6210\u7acb\u7684\u3002A \u79bb\u5f00\u4e34\u754c\u6001\u540e\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u7684 B \u7acb\u523b\u5c31\u80fd\u8fdb\u5165 critical section\uff0c\u5373\u53ea\u6709\u4e24\u4e2a\u4eba\u6392\u961f\u662f\u4e0d\u4f1a\u88ab\u63d2\u961f\u7684\u3002

\u4f46\u5728\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53d8\u591a\u4ee5\u540e\uff0c\u5c31\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u7c7b\u4f3c\u4e8e\u8c03\u5ea6\u4e2d\u201c\u9965\u997f\u201d\u7684\u73b0\u8c61\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \nP0  \u2502 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500 \u00b7\u00b7\u00b7\n    \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \n          \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510\nP1  \u2500\u2500\u2500\u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502 \u00b7\u00b7\u00b7\n          \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518\n\nP2  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u00b7\u00b7\u00b7\n

\u53ef\u4ee5\u53d1\u73b0\uff0c\u7531\u4e8e P0 \u548c P1 \u603b\u662f\u8f6e\u6d41\u83b7\u5f97\u9501\uff0c\u5bfc\u81f4 P2 \u59cb\u7ec8\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u9501\uff0c\u56e0\u800c\u5bf9\u4e8e P2 \u6765\u8bf4 waiting time \u5c31\u4e0d\u518d\u6709\u9650\u4e86\u3002

\u7cdf\u4e86\uff0c\u770b\u8d77\u6765\u5f88\u9177\u7684\u4e00\u4e2a\u65b9\u6cd5\u8c8c\u4f3c\u4e0d\u80fd\u6ee1\u8db3 CS \u89e3\u6cd5\u7684\u6027\u8d28\uff0c\u4f46\u4ed4\u7ec6\u5206\u6790\uff0c\u8fd9\u662f\u7531\u4e8e\u9501\u7684\u5206\u914d\u673a\u5236\u662f\u4e0d\u53ef\u63a7\u7684\u2014\u2014\u5728\u4e00\u4e2a\u9501\u88ab\u91ca\u653e\u540e\uff0c\u63a5\u4e0b\u6765\u5c06\u62ff\u5230\u9501\u7684\u8fdb\u7a0b\u5e94\u5f53\u662f\u63a5\u4e0b\u6765\u7b2c\u4e00\u4e2a\u5b9e\u9645\u6267\u884c test_and_set() \u7684\u8fdb\u7a0b\uff0c\u7136\u800c\u7531\u4e8e \u2776 \u6211\u4eec\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u8fd0\u884c\u901f\u5ea6\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u2777 \u6211\u4eec\u5bf9\u540c\u65f6\u4ea7\u751f\u7684 test_and_set() \u5c06\u6309\u4f55\u987a\u5e8f\u88ab\u5904\u7406\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u624b\u52a8\u7528\u67d0\u79cd\u65b9\u6cd5\u6765\u5b9e\u73b0\u8fd9\u79cd\u201c\u9501\u7684\u8c03\u5ea6\u201d\uff1a

// `i` is process id in [0, n), where `n` is the count of related process. \nprocess(i) {\nWAITING[i] = true;                                  // \u2510\nwhile ( WAITING[i] && test_and_set(&LOCK) ) {}      // \u251c entry sec.\n// \u2502\nWAITING[i] = false;                                 // \u2518\n\n/* operate critical resources */                    // - critical sec.\n\n// i.e. find next waiting process j                 // \u2510\nj = (i + 1) % n;                                    // \u2502\nwhile (i != j && !WAITING[j]) {                     // \u251c exit sec.\nj = (i + 1) % n;                                // \u2502\n}                                                   // \u2502\n// release j's LOCK or release whole LOCK           // \u2502\nif (i == j)     LOCK = false;                       // \u2502\nelse            WAITING[j] = false;                 // \u2518\n\n/* other things */                                  // - remainder sec.\n}\n

\u6211\u4eec\u5f15\u5165\u4e86\u4e00\u4e2a WAITING[] \u6570\u7ec4\u6765\u8f85\u52a9 LOCK \u7ec6\u5316\u9501\u7684\u7c92\u5ea6\uff0c\u6b64\u65f6 LOCK \u8868\u793a\u7684\u201c\u662f\u5426\u5b58\u5728\u7ade\u4e89\u201d\uff0c\u800c WAITING[] \u5219\u6807\u8bc6\u4e86\u6240\u6709\u6b63\u5728\u7b49\u5f85\u7684\u8fdb\u7a0b\u3002\u533a\u522b\u4e8e\u4e4b\u524d\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0c\u8ba9\u5269\u4e0b\u7684\u8fdb\u7a0b\u53bb\u201c\u62fc\u624b\u901f\u201d\uff0c\u6211\u4eec\u8fd9\u6b21\u7531\u91ca\u653e\u9501\u7684\u8fdb\u7a0b\u6765\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u662f\u8c01\u3002

\u5728 11-14 \u884c\uff0c\u901a\u8fc7\u4e00\u4e2a\u5faa\u73af\u627e\u5230\u4e0b\u4e00\u4e2a WAITING[j] \u4e3a true \u7684 j\uff0c\u2776 \u5982\u679c\u627e\u5230\u4e86\u8fd9\u4e2a j\uff0c\u90a3\u4e48\u5c31\u5c06 WAITING[j] \u8bbe\u4e3a false\uff0819 \u884c\uff09\uff0c\u8fd9\u6837 j \u9a6c\u4e0a\u5c31\u4f1a\u5728\u7b2c 4 \u884c break\uff0c\u8fdb\u5165 critical section\uff1b\u2777 \u800c\u5982\u679c\u627e\u4e0d\u5230\u8fd9\u4e2a j\uff0c\u5373\u627e\u4e86\u4e00\u5708\u53c8\u627e\u56de\u4e86 i\uff0c\u90a3\u4e48\u8bf4\u660e i \u662f\u6700\u540e\u4e00\u4e2a\u4e86\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0817 \u884c\uff09\u3002

\u901a\u8fc7\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u4fdd\u8bc1\u4e86\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u6700\u591a\u53ea\u9700\u8981\u7b49\u5f85 n-1 \u4e2a\u8fdb\u7a0b\u8fd0\u884c\u5b8c critical section\uff08\u7c7b\u4f3c\u4e8e\u5b9e\u73b0\u4e86\u201cFCFS\u201d\uff09\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#compare_and_swap","title":"compare_and_swap()","text":"

Links

compare_and_swap() \u4e5f\u88ab\u7b80\u5199\u4e3a CAS \u6307\u4ee4\uff0c\u5b83\u7684\u529f\u80fd\u5982\u4e0b\uff1a

<atomic> compare_and_swap(int * target, int expected, int new_val) {\nint ret = *target;\n\n// *target = (*target == expected) ? new_val : *target;\nif (*target == expected) {\n*target = new_val;\n}\n\nreturn ret;\n}\n

CAS \u63a5\u53d7\u4e09\u4e2a\u503c\uff1a

  1. target \u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u5730\u5740\uff1b
  2. expected \u9884\u671f\u4e2d\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u65e7\u503c\uff1b
  3. new_val \u5e0c\u671b\u5c06\u6570\u636e\u4fee\u6539\u4e3a\u7684\u65b0\u503c\uff1b

\u800c\u5f53\u4e14\u4ec5\u5f53 *target \u7b26\u5408\u9884\u671f\uff0c\u4e0e expected \u76f8\u540c\u65f6\u5019\uff0c\u624d\u4f1a\u5c06\u5b83\u6539\u4e3a new_val\u3002\u540c\u6837\uff0cCAS \u4e5f\u5e94\u5f53\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u82e5\u5e72 CAS \u540c\u65f6\u53d1\u751f\u65f6\uff0c\u4e5f\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u5b58\u5728\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

\u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5b9e\u9645\u4e0a test_and_set(target) \u5c31\u662f compare_and_swap(target, false, true)\uff0c\u56e0\u800c\u5b9e\u9645\u4e0a CAS \u89e3\u51b3 CS \u95ee\u9898\u7684\u65b9\u6cd5\u4ee5\u53ca\u95ee\u9898\u548c\u4e0a\u4e00\u8282\u7684\u5185\u5bb9\u6ca1\u4ec0\u4e48\u5dee\u522b\u3002

\u4f46\u662f\u6211\u4eec\u53d1\u73b0\uff0ccompare_and_swap() \u76f8\u6bd4\u4e8e test_and_set()\uff0c\u663e\u7136\u6709\u66f4\u5927\u7684\u64cd\u4f5c\u7a7a\u95f4\uff0c\u4e5f\u66f4\u6cdb\u7528\uff0c\u8003\u8651\u5230 CAS \u6307\u4ee4\u81ea\u8eab\u5df2\u7ecf\u80fd\u591f\u652f\u6301\u539f\u5b50\u6027\u7684\u4fee\u6539\u503c\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u8df3\u51fa CS \u95ee\u9898\u7684\u8303\u5f0f\u6765\u8003\u8651\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#atomic-variables","title":"Atomic Variables","text":"

\u539f\u5b50\u53d8\u91cf(atomic variables)\u662f\u4e00\u79cd\u7528\u539f\u5b50\u6027\u64cd\u4f5c\u7ef4\u62a4\u7684\u53d8\u91cf\u3002\u6211\u4eec\u6240\u6709\u5bf9\u539f\u5b50\u53d8\u91cf\u7684\u64cd\u4f5c\u53ef\u4ee5\u901a\u8fc7 CAS \u6765\u5b9e\u73b0\uff0c\u4f8b\u5982\u81ea\u589e\u64cd\u4f5c\uff1a

increment(atomic_int * v) {\nint tmp;\ndo {\ntmp = *v;\n} while ( tmp != compare_and_swap(v, tmp, tmp+1) );\n}\n

\u4f7f\u7528 atomic variables \u540e\u5b9e\u9645\u4e0a\u5c31\u4e0d\u592a\u7b26\u5408 CS \u95ee\u9898\u7684\u6a21\u578b\u4e86\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u91cc\u5e76\u4e0d\u518d\u9700\u8981\u7ef4\u62a4\u7c7b\u4f3c LOCK \u7684\u4e1c\u897f\uff0c\u800c\u662f\u4ee5 *target \u662f\u5426\u7b26\u5408 expected \u7684\u9884\u8bbe\u6765\u5224\u65ad\u662f\u5426\u6709\u7ade\u4e89\u51fa\u73b0\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u540c\u6b65\u5de5\u5177\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u79cd\u5c01\u88c5\u540e\u7684\u539f\u5b50\u6027\u64cd\u4f5c\u6765\u89e3\u51b3 race condition\uff0c\u800c\u4e0d\u9700\u8981\u518d\u533a\u5206 entry section \u6216\u662f critical section \u7b49\u3002

\u4e66\u672c\u4e0a\u7279\u5730\u63d0\u5230\uff0c\u5728\u4f8b\u5982 producer&consumer \u7684\u6a21\u578b\u4e2d\uff0c\u4f7f\u7528 atomic variables \u7ef4\u62a4 count \u5e76\u4e0d\u80fd\u89e3\u51b3 race condition\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u79cd\u8ba8\u8bba\u662f\u6709\u5931\u504f\u9887\u7684\uff0c\u6240\u8c13\u7684\u201c\u539f\u5b50\u6027\u201d\u5e94\u8be5\u5305\u62ec\u6240\u6709\u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u90e8\u5206\uff0c\u4e66\u4e2d\u53ea\u7ef4\u62a4 count \u4e0d\u7ef4\u62a4 buffer \u7684\u5047\u8bbe\u6211\u89c9\u5f97\u5bf9\u4e8e atomic \u8fd9\u4e2a\u6982\u5ff5\u6765\u8bf4\u5b9e\u5728\u4e0d\u591f\u516c\u5e73\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5c31\u4e0d\u7740\u91cd\u8bf4\u660e\u8fd9\u4e2a\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#mutex-locks","title":"Mutex Locks","text":"

\u7531\u6b64\u6211\u4eec\u5df2\u7ecf\u5f97\u5230\u4e86\u80fd\u5728\u786c\u4ef6\u5c42\u9762\u89e3\u51b3 race condition \u95ee\u9898\u7684\u6839\u6e90\u7684\u5de5\u5177\u4e86\uff0c\u4f46\u662f\u4e3a\u4e86\u80fd\u8ba9\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u66f4\u597d\u7684\u4f7f\u7528\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u505a\u4e00\u6b21\u8f6f\u4ef6\u5c42\u9762\u7684\u5c01\u88c5\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e92\u65a5\u9501(mutex locks)\u8fd9\u4e2a\u4e1c\u897f\u3002

\u5229\u7528\u4e92\u65a5\u9501\u907f\u514d race condition \u7684\u57fa\u672c\u601d\u8def\u4ecd\u7136\u662f\u57fa\u4e8e CS \u95ee\u9898\u7684\u5efa\u6a21\uff0c\u4f46\u5b83\u66f4\u5177\u4f53\u5730\u8ba4\u4e3a\u5728 entry section \u5c31\u8be5\u53bb\u7d22\u53d6\u4e92\u65a5\u9501\uff0c\u800c\u5728 exit section \u5c31\u5e94\u8be5\u53bb\u91ca\u653e\u4e92\u65a5\u9501\uff0c\u5373\uff1a

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Acquire Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Release Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

\u56de\u987e\u6211\u4eec\u5728\u4ecb\u7ecd test_and_set() \u90e8\u5206\u7ed9\u51fa\u7684\u8fd9\u6bb5\u4ee3\u7801\uff1a

process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n/* other things */                  // - remainder section\n}\n

\u6211\u4eec\u53ea\u9700\u8981\u5c06\u9ad8\u4eae\u7684\u8fd9\u4e24\u884c\u5c01\u88c5\u8d77\u6765\uff0c\u5c31\u5b9e\u73b0\u4e86 acquire LOCK \u548c release LOCK\u3002

// `available` means whether the `LOCK` is free, or whether the related \n// resources is available\nacquire() {\nwhile ( !compare_and_swap(&available, true, false) ) {}\n}\n\nrelease() {\navailable = true;\n}\n

\u4f60\u53ef\u80fd\u6ce8\u610f\u5230\u4e86\uff0c\u6211\u4eec\u5728 test_and_set() \u8ba8\u8bba\u4e0a\u9762\u90a3\u6bb5\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u8ba8\u8bba\u8fc7\u5b83\u65e0\u6cd5\u6ee1\u8db3 bounded waiting time \u7684\u95ee\u9898\uff0c\u90a3\u65e2\u7136\u5982\u6b64\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u628a WAITING[] \u4e5f\u4e00\u8d77\u5c01\u8fdb\u53bb\u5462\uff1f

\u8fd9\u662f\u56e0\u4e3a\u4e66\u4e0a\u76f4\u63a5\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u76f4\u5230\u5728\u4e4b\u540e\u8bb2 semaphores \u7684\u65f6\u5019\u624d\u60f3\u8d77\u6765\uff0c\u4f46 semaphores \u548c mutex lock \u53c8\u662f\u4e24\u4e2a\u8def\u5b50\uff0c\u6211\u4e5f\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u60f3\u8bf4\u660e\u4ec0\u4e48\u95ee\u9898\u3002\u4f46\u662f\u65e2\u7136\u5b83\u73b0\u5728\u5ffd\u7565\u4e86\uff0c\u6211\u4eec\u5c31\u5148\u4e0d\u7ba1\u5b83\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u610f\u8bc6\u5230\u8fd9\u4e2a\u95ee\u9898\u662f\u5b58\u5728\u7684\u3002

\u7ecf\u8fc7\u8fd9\u4e48\u957f\u7684\u94fa\u57ab\uff0c\u6211\u4eec\u73b0\u5728\u80fd\u591f\u4fdd\u8bc1\u7684\u4e00\u4ef6\u4e8b\u662f\uff0c\u6211\u4eec\u7ec8\u4e8e\u5f97\u5230\u4e86\u4e00\u4e2a\u8f6f\u4ef6\u5c42\u9762\u7684\u3001\u80fd\u591f\u907f\u514d race condition \u7684\u540c\u6b65\u5de5\u5177\u3002\u90a3\u4e48\u5b9e\u73b0\u57fa\u672c\u9700\u6c42\u4ee5\u540e\u6211\u4eec\u5c31\u5f00\u59cb\u8003\u8651\u80fd\u4e0d\u80fd\u4f18\u5316\u5b83\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u5fd9\u7b49\u5f85","title":"\u5fd9\u7b49\u5f85","text":"

\u5982\u679c\u8bfb\u8005\u5bf9\u4ee3\u7801\u6709\u6bd4\u8f83\u654f\u611f\u7684\u55c5\u89c9\uff0c\u90a3\u53ef\u80fd\u770b\u8fd9\u51e0\u5343\u4e2a\u5b57\u5230\u73b0\u5728\uff0c\u4f60\u5df2\u7ecf\u4e3a\u6570\u4e0d\u6e05\u7684 while() \u63d0\u5fc3\u540a\u80c6\u8fc7\u5341\u591a\u6b21\u4e86\u3002\u6ca1\u9519\uff0c\u867d\u7136\u6211\u4eec\u901a\u8fc7\u903b\u8f91\u4fdd\u8bc1\u8fd9\u91cc\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u5faa\u73af\uff0c\u4f46\u5bf9\u4e8e\u7b49\u5f85\u4e2d\u7684 process\uff0c\u786e\u5b9e\u8981\u5728\u6570\u4e0d\u5c3d\u7684 while loop \u4e2d\u6d6a\u8d39 CPU\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u7b49\u5f85\u9501\u91ca\u653e\u7684\u884c\u4e3a\u4e3a\u5fd9\u7b49\u5f85(busy waiting)\uff0c\u5176\u4e2d\u201c\u5fd9\u201d\u6307\u7684\u5c31\u662f\u5728\u7b49\u5f85\u8fc7\u7a0b\u4e2d\u4ecd\u7136\u5360\u7528 CPU \u8d44\u6e90\u3002\u800c\u8fd9\u79cd\u4f7f\u7528\u5fd9\u7b49\u5f85\u7684\u4e92\u65a5\u9501\uff0c\u4e5f\u88ab\u79f0\u4e3a\u81ea\u65cb\u9501(spinlock)\u3002

\u6211\u4eec\u5f15\u5165\u4e24\u4e2a\u8bcd\u6765\u66f4\u51c6\u786e\u7684\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\uff1a

Lock Contention

\u5982\u679c\u4e00\u4e2a\u7528\u6237\u8bd5\u56fe\u7d22\u53d6\u67d0\u4e2a\u9501\u65f6\uff0c\u5982\u679c\u8fd9\u4e2a\u9501\u4e0d\u662f available \u7684\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u6709\u7528\u6237\u6b63\u5728\u4f7f\u7528\u8fd9\u4e2a\u9501\uff0c\u800c\u5f53\u524d\u7528\u6237\u9700\u8981\u7b49\u5f85\u8fd9\u4e2a\u9501\u91cd\u65b0\u53ef\u7528\uff0c\u6b64\u65f6\u6211\u4eec\u79f0\u8fd9\u4e2a\u9501\u662f\u88ab\u4e89\u62a2\u7684(contended)\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u4e89\u62a2\uff0c\u6211\u4eec\u5c31\u79f0\u4e4b\u4e3a\u4e0d\u88ab\u4e89\u62a2\u7684(uncontended)\u3002

\u5982\u679c\u73b0\u5728\u6709\u597d\u591a\u7528\u6237\u90fd\u5728\u4e89\u62a2\u4e00\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a high contention\uff1b\u53cd\u4e4b\u5982\u679c\u53ea\u6709\u96f6\u661f\u51e0\u4e2a\u7528\u6237\u5728\u4e89\u62a2\u8fd9\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a low contention\u3002

\u5982\u679c\u5ef6\u7528 spinlock\uff0c\u90a3\u4e48\u4e0d\u96be\u5f97\u5230\u7ed3\u8bba\uff1ahigh contention \u4f1a\u5bfc\u81f4\u4e25\u91cd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u603b\u662f\u4f1a\u6709\u5927\u91cf\u5f97\u4e0d\u5230\u9501\u7684\u7528\u6237\u5904\u4e8e busy waiting \u4e2d\u3002

\u65e2\u7136\u5b83\u4eec\u90fd\u662f\u5728\u505a\u65e0\u610f\u4e49\u7684\u7b49\u5f85\uff0c\u90a3\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u5728\u8fd9\u4e2a\u65f6\u5019\u628a\u8d44\u6e90\u8ba9\u7ed9\u6709\u9700\u8981\u7684\u4eba\u5462\uff1f

\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6682\u65f6\u5730\u5207\u6362\u8fdb\u7a0b\uff0c\u8ba9\u8fd9\u4e9b\u5904\u4e8e\u7b49\u5f85\u7684\u7528\u6237\u6682\u65f6\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5230\u6765\u518d\u5524\u9192\u5b83\u4eec\uff0c\u6b64\u65f6\u5c31\u9700\u8981\u7cfb\u7edf\u8c03\u7528\u7684\u4ecb\u51653\u3002\u800c\u5177\u4f53\u7684\u65b9\u6cd5\u6211\u4eec\u5728\u4e0b\u4e00\u8282\u7684\u907f\u514d\u5fd9\u7b49\u5f85\u4e2d\u4ecb\u7ecd\u3002

\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u9700\u8981\u4fdd\u6301\u5ba2\u89c2\uff1aspinlock \u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u662f\u6709\u597d\u5904\u7684\uff0c\u5728\u7b49\u5f85\u65f6\u95f4\u5e76\u4e0d\u957f\u7684\u60c5\u51b5\u4e0b\uff0c\u76f8\u6bd4\u4e8e\u62e5\u6709\u9501\u7684\u7528\u6237\u91ca\u653e\u9501\uff0c\u8fdb\u884c\u8c03\u5ea6\u9501\u9700\u8981\u7684 context switch \u7684\u5f00\u9500\u53ef\u80fd\u663e\u5f97\u8f83\u5927\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6211\u4eec\u8fd8\u6ca1\u6765\u5f97\u53ca\u628a\u8d44\u6e90\u8ba9\u7ed9\u522b\u4eba\u9501\u5c31\u597d\u4e86\uff0c\u90a3\u4e48\u8fd9\u79cd\u8d44\u6e90\u8f6c\u8ba9\u8fd8\u4e0d\u5982\u4e0d\u8f6c\u3002\u800c\u4e8b\u5b9e\u4e0a\uff0c\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\uff0c\u81ea\u65cb\u9501\u4e5f\u786e\u5b9e\u662f\u4e00\u4e9b\u591a\u6838\u7cfb\u7edf\u7684\u9996\u9009\u3002

\u4e0d\u8fc7\u5728\u8bb8\u591a\u8bed\u5883\u91cc mutex \u548c spinlock \u662f\u88ab\u533a\u5206\u5f00\u6765\u7684\u4e24\u4e2a\u6982\u5ff5\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u4e2a\u5219\u9700\u8981\u9002\u65f6\u5224\u65ad4\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#semaphores","title":"Semaphores","text":"

Links

Mutex lock \u4e3a\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u4e86\u7c7b\u4f3c\u4e8e\u201c\u623f\u95f4\u7533\u8bf7\u201d\u7684\u529f\u80fd\uff0c\u9501\u7ade\u4e89\u5c31\u597d\u50cf\u5927\u5bb6\u62a2\u623f\u95f4\u7684\u4f7f\u7528\u6743\u3002\u800c\u4fe1\u53f7\u91cf(semaphores)\u5219\u662f\u7c7b\u4f3c\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 atomic variables\uff0c\u901a\u8fc7\u63d0\u4f9b\u6807\u51c6\u5316\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6765\u7ef4\u62a4\u4e00\u4e9b\u53d8\u91cf\uff0c\u53ea\u4e0d\u8fc7\u5b83\u989d\u5916\u5bf9\u53d8\u91cf\u7684\u503c\u6709\u4e00\u5b9a\u7684\u7ea6\u675f\u3002

\uff08\u8bf4\u5b9e\u8bdd\u6211\u611f\u89c9\u8fd9\u4fe9\u4e1c\u897f\u672c\u8d28\u4e0a\u771f\u6ca1\u5565\u533a\u522b\u2026\u2026\uff09

Semaphores \u53ea\u63d0\u4f9b\u4e24\u4e2a\u6807\u51c6\u5316\u7684\u63a5\u53e3\uff1await()\uff08\u6216P()\uff09 \u548c signal()\uff08\u6216V()\uff09\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u5982\u4e0b\uff1a

<atomic> wait(reference S) {\nwhile (S <= 0) {} // busy wait here\nS--;\n}\n\n<atomic> signal(reference S) {\nS++;\n}\n

\u663e\u7136\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\u7684\u5b9e\u73b0\u4e5f\u5e94\u5f53\u4fdd\u8bc1\u662f atomic \u7684\u3002

\u533a\u522b\u4e8e\u666e\u901a\u7684 atomic variables\uff0csemaphores \u591a\u4e86\u5728\u7b2c 2 \u884c\u7684 busy wait\uff0c\u8fd9\u6697\u542b\u4e86\u4e00\u79cd\u201c\u6709\u9650\u201d\u7684\u6982\u5ff5\uff0c\u5373\u4fdd\u8bc1 \\(0 \\leq S\\)\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0csemaphores \u5206\u4e3a counting semaphore \u548c binary semaphore\uff0c\u524d\u8005\u7684\u529f\u80fd\u5982\u4e0a\uff0c\u540e\u8005\u53ea\u4e0d\u8fc7\u662f\u989d\u5916\u8981\u6c42 \\(0 \\leq S \\leq 1\\)\uff0c\u4fee\u6539 loop \u7684\u6761\u4ef6\u5373\u53ef\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u4f7f\u7528","title":"\u4f7f\u7528","text":"

\u4f8b\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u5f0f\uff0c\u4fdd\u8bc1 P0() \u4e2d\u7684 section A \u5fc5\u987b\u5728 P1() \u7684 section B \u4e4b\u524d\u5b8c\u6210\uff1a

semaphore S = 0;\n\nP0() {\n/* Section A */\nsignal(S);\n}\n\nP1() {\nwait(S);\n/* Section B */\n}\n

\u4e0a\u9762\u7684\u4f8b\u5b50\u975e\u5e38\u5f62\u8c61\u5730\u5c55\u793a\u4e86\u4fe1\u53f7\u91cf\u662f\u5982\u4f55\u53d1\u6325\u4f5c\u7528\u7684\uff0c\u5f53\u7136\uff0c\u4e0a\u9762\u53ea\u5c55\u793a\u4e86\u7c7b\u4f3c\u8fdb\u7a0b\u95f4\u901a\u8baf\u7684\u529f\u80fd\uff0c\u4e0b\u9762\u8fd9\u4e2a\u5f62\u5f0f\u5219\u66f4\u63a5\u8fd1\u6211\u4eec\u4e0a\u6587\u4e2d\u8ba8\u8bba\u7684\u60c5\u51b5\uff0c\u5373\u5b9e\u73b0\u4e86\u4e92\u65a5\uff1a

// `i` is process id and S is the semaphores\nprocess(i) {\nwait(S);    // i.e. release the 'LOCK'\n\n/* critical section */\n\nsignal(S);  // only one process can pass this line at once\n}\n
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u907f\u514d\u5fd9\u7b49\u5f85","title":"\u907f\u514d\u5fd9\u7b49\u5f85","text":"

\u6211\u4eec\u5728 mutex \u4e2d\u63d0\u51fa\u5fd9\u7b49\u5f85\u7684\u65f6\u5019\u5c31\u5df2\u7ecf\u63d0\u5230\u8fc7\uff0c\u53ef\u4ee5\u901a\u8fc7\u300c\u5728\u7b49\u5f85\u7684\u65f6\u5019\u8ba9\u8fdb\u7a0b\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5408\u9002\u7684\u65f6\u5019\u518d\u5524\u9192\u300d\u7684\u65b9\u5f0f\uff0c\u6765\u51cf\u5c0f\u8f83\u957f\u7684\u5fd9\u7b49\u5f85\u5f15\u8d77\u7684\u6027\u80fd\u964d\u4f4e\u3002\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u9700\u8981\u6269\u5c55 semaphores \u7684\u5185\u5bb9\uff0c\u5f15\u5165\u4e00\u4e2a\u94fe\u8868\u6765\u7ef4\u62a4\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u3002

struct semaphore {\nvalue;\nwaiting_list;\n};\n\n<atomic> wait(reference S) {\nS->value--;\nif (S->value < 0) {\nS->waiting_list.push(current process);\nsleep();\n}\n}\n\n<atomic> signal(reference S) {\nS->value++;\nif (S->value <= 0) {\np = S->waiting_list.pop();\nwakeup(p);\n}\n}\n

\u76f8\u6bd4\u4e8e\u4e4b\u524d\u7684\u903b\u8f91\uff0c\u73b0\u5728\u7684\u903b\u8f91\u7a0d\u5fae\u6709\u70b9\u53d8\u5316\uff0c\u8bf7\u8bfb\u8005\u5c1d\u8bd5\u72ec\u7acb\u5206\u6790\u5176\u4e2d\u7684\u5965\u79d8\u3002\u8fd9\u91cc\u662f\u4e00\u4e9b\u63d0\u793a\uff1a

\u601d\u8003\u9898

  1. \u73b0\u5728\u5df2\u7ecf\u6ca1\u6709 while \u4e86\uff0c\u53ea\u4f59\u4e0b if\uff0c\u73b0\u5728\u662f\u5982\u4f55\u4fdd\u8bc1\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u80fd\u591f\u88ab\u53ca\u65f6\u5524\u9192\uff1f
  2. wait \u539f\u5148\u662f\u5148\u7b49\u5f85\u518d\u4fee\u6539\uff0c\u73b0\u5728\u662f\u5148\u4fee\u6539\u3001\u518d\u7b49\u5f85\uff0c\u8fd9\u5bf9\u6574\u4f53\u903b\u8f91\u6709\u4f55\u5f71\u54cd\uff1f
  3. signal \u4e2d\u7684\u6761\u4ef6\u8bed\u53e5\uff0c\u4e3a\u4f55\u662f S->value <= 0\uff1f\u8fd9\u4e2a\u6761\u4ef6\u4e3a false \u65f6\u610f\u5473\u7740\u4ec0\u4e48\uff1f
    • \u8003\u8651\u5728 high contention \u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u603b\u662f\u4e00\u51fa\u73b0\u5c31\u88ab\u62a2\u7a7a\u3002

\u800c\u5b9e\u9645\u4e0a\uff0c\u73b0\u5728\u6211\u4eec\u63d0\u5230\u4fe1\u53f7\u91cf\uff0c\u9ed8\u8ba4\u6307\u7684\u5c31\u662f\u907f\u514d\u5fd9\u7b49\u5f85\u8fd9\u4e00\u8282\u4e2d\u63d0\u5230\u7684\u8fd9\u79cd\u3002

  1. The Critical Section Problem \u21a9

  2. \u4e66\u672c\u4e2d\u5bf9 preemptive kernels \u548c non-preemptive kernels \u7684\u5b9a\u4e49\u5e76\u4e0d\u51c6\u786e\uff0c\u4e24\u8005\u6700\u672c\u8d28\u7684\u533a\u522b\u662f\u540e\u8005\u5b9e\u73b0\u4e86 Giant Lock\u3002\u540c\u65f6\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff1aWhat was the reason of the non-preemptivity of older Linux kernels? \u21a9

  3. Mutex access and system call \u21a9

  4. \u2b50\ufe0f When should one use a spinlock instead of mutex? \u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/","title":"U2 Part 2: \u540c\u6b65\u95ee\u9898\u4f8b\u5b50 | Synchronization Problems Examples","text":"

\u7ea6 1567 \u4e2a\u5b57 51 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-bounded-buffer-problem","title":"The Bounded-Buffer Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f","title":"\u95ee\u9898\u80cc\u666f","text":"

The Bounded-Buffer Problem \u53c8\u79f0 The Producer\u2013Consumer Problem\uff0c\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u6709\u4e24\u4e2a\u89d2\u8272\uff0cproducer \u548c consumer\uff1aproducer \u4f1a\u4ea7\u751f item \u5b58\u653e\u5230 buffer \u4e2d\uff0c\u800c consumer \u53ef\u4ee5\u5c06\u6570\u636e\u4ece buffer \u4e2d\u53d6\u51fa item\u3002\u5982\u679c\u6211\u4eec\u7528 \\(n = \\# items\\) \u6765\u63cf\u8ff0 buffer \u7684\u72b6\u6001\uff0c\u90a3\u4e48\u95ee\u9898\u5c06\u62bd\u8c61\u4e3a\uff1a

void produce() {\n/* something */\n++n;\n/* something */\n}\n\nvoid consume() {\n/* something */\n--n;\n/* something */\n}\n

\u540c\u65f6\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(0 \\leq n \\leq n_{max}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 \\(n = 0\\) \u65f6\uff0c\u8ba9 consumer \u7b49\u5f85 \\(n > 0\\) \u518d consume()\uff1b\u5bf9\u5e94\u7684\uff0c\u5728 \\(n = n_{max}\\) \u65f6\u5019\uff0c\u8ba9 producer \u7b49\u5f85 \\(n < n_{max}\\) \u518d produce()\u3002\u4f46\u8fd9\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u5355\u5143\u63d0\u53ca\u5b83\u7684\u91cd\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u8fd9\u91cc\u8ba4\u4e3a\u5b83\u4eec\u5728 /* something */ \u4e2d\u3002

\u5b9e\u9645\u7684 The Bounded-Buffer Problem \u4e2d\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7ec6\u8282\uff0c\u4f46\u662f\u8fd9\u91cc\u6211\u4eec\u5c06\u6574\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u6211\u4eec\u9700\u8981\u7684\u6a21\u6837\uff0c\u8bf7\u4e0d\u8981\u8ba4\u4e3a\u4e0a\u9762\u7684\u4ee3\u7801\u5c31\u662f The Bounded-Buffer Problem \u7684\u5168\u90e8\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u63cf\u8ff0","text":"

\u8003\u8651\u5728\u5e76\u884c\u8bed\u5883\u4e0b\uff0cproduce() \u548c consume() \u540c\u65f6\u53d1\u751f\uff0c\u7531\u4e8e ++n \u548c --n \u8fd9\u4e9b\u64cd\u4f5c\u672c\u8d28\u4e0a\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\uff0c\u6240\u4ee5\u5bb9\u6613\u51fa\u73b0 race condition\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores","title":"\u89e3\u51b3 - semaphores","text":"

\u6211\u4eec\u4f7f\u7528\u4fe1\u53f7\u91cf\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u9700\u8981\u5b9a\u4e49\u4e09\u4e2a\u4fe1\u53f7\u91cf\uff1a

// suppose the capacity of the buffer is n\nsemaphore mutex = 1;\nsemaphore empty = n;\nsemaphore full  = 0;\n

\u903b\u8f91\u4e0a\u6211\u4eec\u8981\u6c42 empty + full == n \u59cb\u7ec8\u6210\u7acb\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u4ea7\u751f\u4e00\u5b9a\u8bef\u5dee\uff08\u8003\u8651\u67d0\u4e2a\u539f\u8bed\u8fd8\u6ca1\u5f7b\u5e95\u6267\u884c\u5b8c\uff09\u3002\u800c\u6211\u4eec\u8fd9\u91cc\u4e4b\u6240\u4ee5\u8981\u4f7f\u7528\u4e24\u4e2a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a buffer \u7684\u5360\u7528\u72b6\u6001\uff0c\u662f\u56e0\u4e3a\u4fe1\u53f7\u91cf\u7684\u201c\u6709\u754c\u201d\u662f\u901a\u8fc7 0 \u7ef4\u62a4\u7684\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5728\u201c\u51cf\u5c11\u201d\u7684\u65f6\u5019\u624d\u80fd\u7ef4\u62a4\uff1b\u800c\u6211\u4eec\u7684\u8981\u6c42\u662f\uff0cbuffer \u7684\u4e0a\u4e0b\u754c\u90fd\u6709\u754c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e24\u4e2a\u4fe1\u53f7\u91cf\u5206\u522b\u6765\u7ef4\u62a4\u4e24\u4e2a\u8fb9\u754c\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-readerswriters-problem","title":"The Readers\u2013Writers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

\u8be5\u95ee\u9898\u62bd\u8c61\u81ea\u6570\u636e\u5e93\u7684\u4f7f\u7528\u3002\u7528\u6237\u4f7f\u7528\u6570\u636e\u5e93\u4fee\u6539\u6570\u636e\uff08UPDATE\uff09\uff0c\u672c\u8d28\u4e0a\u4e5f\u662f\u6709\u4e09\u4e2a\u6b65\u9aa4\uff1a

  1. [READ] \u4ece\u6570\u636e\u5e93\u4e2d\u68c0\u7d22\u3001\u8bfb\u53d6\u6570\u636e\uff1b
  2. \u6570\u636e\u7ecf\u8fc7\u4e1a\u52a1\u903b\u8f91\u7684\u5904\u7406\uff0c\u5f97\u5230\u65b0\u503c\uff1b
  3. [WRITE] \u5c06\u65b0\u503c\u5199\u56de\u6570\u636e\u5e93\uff1b

\u8fd9\u4e2a\u6b65\u9aa4\u4e0e\u6211\u4eec\u4fee\u6539 mem[x] \u7684\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\uff0c\u56e0\u6b64\u9047\u5230\u7684\u95ee\u9898\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002

\u51b2\u7a81\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u79cd\u60c5\u51b5\uff1a

\u663e\u7136\uff0creader \u548c reader \u4e0d\u4f1a\u6709\u51b2\u7a81\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_1","title":"\u89e3\u51b3 - semaphores","text":"

\u6709\u4e24\u79cd\u79cd\u6734\u7d20\u7684\u89e3\u51b3\u529e\u6cd5\uff1a\u24f5 writer \u603b\u662f\u7b49\u5f85 reader\uff0c\u24f6 reader \u603b\u662f\u7b49\u5f85 writer\u3002\u4f46\u662f\u8fd9\u4e24\u79cd\u89e3\u51b3\u529e\u6cd5\u90fd\u4e0d\u662f\u5f88\u597d\uff0c\u56e0\u4e3a \u24f5 \u4f1a\u5bfc\u81f4 writer \u9965\u997f\uff0c\u24f6 \u4f1a\u5bfc\u81f4 reader \u9965\u997f\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u7ed9\u51fa\u6b63\u5f0f\u7684\u89e3\u51b3\u65b9\u6cd5\uff0c\u5f15\u5165\u4e24\u4e2a\u4fe1\u53f7\u91cf\u548c\u4e00\u4e2a\u5171\u4eab\u53d8\u91cf\uff1a

semaphores rw_mutex   = 1;\nsemaphores mutex      = 1;\nint        read_count = 0;\n

\u8003\u8651\u5230 reader \u548c reader \u4e0d\u4f1a\u51b2\u7a81\uff0c\u6240\u4ee5 readers \u4e4b\u95f4\u4e0d\u5e94\u8be5\u4e92\u65a5\u3002\u800c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1\u7684\u662f\uff1a\u5355\u4e2a writer \u548c\u82e5\u5e72 readers \u4e4b\u95f4\u4e92\u65a5\uff0c\u5355\u4e2a writer \u548c\u5355\u4e2a writer \u4e4b\u95f4\u4e92\u65a5\u3002\u800c rw_mutex \u5c31\u662f\u7528\u4e8e\u63a7\u5236\u8fd9\u79cd\u4e92\u65a5\u3002

writer's code
writer() {\nwait(rw_mutex);\n\n/* critical section */\nsignal(rw_mutex);\n}\n

\u4f46\u6b64\u65f6\u5982\u4f55\u4fdd\u8bc1 readers \u4e4b\u95f4\u4e0d\u4f1a\u4e92\u65a5\u5462\uff1f\u9996\u5148\uff0c\u5f53\u7b2c\u4e00\u4e2a reader \u8bd5\u56fe\u8fdb\u5165\u4e34\u754c\u6bb5\u65f6\uff0c\u5b83\u5e94\u5f53\u83b7\u53d6\u4e00\u4e2a rw_mutex\uff0c\u4ee5\u963b\u6b62\u5176\u5b83 writer \u8fdb\u5165\u4e34\u754c\u6bb5\u3002\u800c\u5bf9\u4e8e\u4e4b\u540e\u7684 reader \u6765\u8bf4\uff0c\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a reader\uff0c\u90a3\u4e48\u5b83\u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6bb5\uff1b\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a writer\uff0c\u90a3\u4e48\u5b9e\u9645\u4e0a\u5b83\u624d\u662f\u7b2c\u4e00\u4e2a reader\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u62ff rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5224\u65ad\u5f53\u524d\u6709\u6ca1\u6709 reader \u6b63\u5728\u4eab\u7528\u4e34\u754c\u8d44\u6e90\u5373\u53ef\uff1b\u800c\u5bf9\u4e8e\u653e rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u9700\u8981\u5224\u65ad\u5f53\u524d\u662f\u4e0d\u662f\u6700\u540e\u4e00\u4e2a reader\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u8ba1\u6570\u5668 read_count\uff0c\u800c\u7531\u4e8e\u8fd9\u4e2a\u8ba1\u6570\u5668\u662f\u4e2a\u666e\u901a\u7684\u5171\u4eab\u53d8\u91cf\uff0c\u800c\u4e14\u8fd9\u4e2a\u8ba1\u6570\u5668\u672c\u8eab\u4e5f\u662f\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a mutex \u6765\u7ef4\u62a4\u5b83\u3002

\u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a reader \u7684\u4ee3\u7801\u4e2d\u542b\u6709 3 \u4e2a\u4e34\u754c\u6bb5\uff0c\u5206\u522b\u662f\uff1a\u8ba1\u6570\u5668\u589e\u3001\u8bfb\u53d6\u4e34\u754c\u8d44\u6e90\u3001\u8ba1\u6570\u5668\u51cf\u3002

reader's code
reader() {\nwait(mutex);            //   \u2510\nread_count++;           //   \u251c obtain `mutex` to increase\nif (read_count == 1) {  //   \u2502 `read_count`\nwait(rw_mutex);     // \u2510 \u2502\n}                       // \u2502 \u2502\nsignal(mutex);          // \u2502 \u2518\n// \u251c\u2500\u2500 readers share `rw_mutex` to\n/* critical section */  // \u2502   read critical resource\n// \u2502\nwait(mutex);            // \u2502 \u2510\nread_count--;           // \u2502 \u251c obtain `mutex` to decrease\nif (read_count == 0) {  // \u2502 \u2502 `read_count`\nsignal(rw_mutex);   // \u2518 \u2502\n}                       //   \u2502\nsignal(mutex);          //   \u2518\n}\n

\u903b\u8f91\u4e0a\uff0c\u91ca\u653e rw_mutex \u7684 reader \u4e0d\u9700\u8981\u662f\u7533\u8bf7 rw_mutex \u7684 reader\uff0c\u8fd9\u4e5f\u5370\u8bc1\u4e86\u8fd9\u4e2a\u9501\u7ef4\u62a4\u7684\u662f\u6574\u4e2a readers \u7fa4\u4f53\u7684\u5b58\u5728\u4e0e\u5426\uff0c\u800c\u4e0d\u662f\u201c\u67d0\u4e2a reader\u201d\u7684\u5b58\u5728\u4e0e\u5426\u3002

\u4e3a\u4ec0\u4e48 read_count \u4e0d\u4f7f\u7528\u4fe1\u53f7\u91cf\uff1f

\u6211\u4eec\u89c2\u5bdf\u5bf9 read_count \u7684\u64cd\u4f5c\uff0c\u4e00\u5171\u6709\u4e09\u7c7b\uff1a

  1. read_count++\uff1b
  2. read_count--\uff1b
  3. read_count == k\uff1b

\u5e76\u4e14 read_count >= 0 \u5e94\u5f53\u59cb\u7ec8\u6210\u7acb\uff0c\u6240\u4ee5\u5149\u770b\u524d\u4e24\u7c7b\uff0c\u5176\u5b9e\u5f88\u9002\u5408\u76f4\u63a5\u4f5c\u4e3a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u3002\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\u5bf9\u4fe1\u53f7\u91cf\u8fdb\u884c\u6bd4\u8f83\u64cd\u4f5c\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528 mutex \u7ef4\u62a4\u4e86 read_count\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6240\u6709\u5bf9 read_count \u7684\u64cd\u4f5c\u90fd\u662f\u5728 mutex \u7684\u4fdd\u62a4\u4e0b\u8fdb\u884c\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5176\u5b9e read_count \u548c mutex \u4e00\u8d77\u6784\u6210\u4e86\u4e00\u4e2a\u539f\u5b50\u53d8\u91cf\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-dining-philosophers-problem","title":"The Dining Philosophers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0_1","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6709\u4e94\u4e2a\u54f2\u5b66\u5bb6\uff0cta \u4eec\u56f4\u5750\u5728\u4e00\u5f20\u5706\u684c\u65c1\uff0c\u6bcf\u4e2a\u54f2\u5b66\u5bb6\u9762\u524d\u90fd\u6709\u4e00\u7897\u7c73\u996d\uff0c\u800c ta \u4eec\u4e24\u4e24\u4e4b\u95f4\u5206\u522b\u6709\u4e00\u6839\u7b77\u5b50\u3002

\u6bcf\u5e27\u54f2\u5b66\u5bb6\u90fd\u80fd\u9009\u62e9\u6267\u884c\u4ee5\u4e0b\u4e24\u4e2a\u884c\u4e3a\u4e4b\u4e00\uff1a

  1. \u601d\u8003\uff1b
  2. \u62ff\u7b77\u5b50\uff1b

\u54f2\u5b66\u5bb6\u5982\u679c\u60f3\u8981\u5e72\u996d\u5c31\u5fc5\u987b\u6709\u4e24\u6839\u7b77\u5b50\uff0cta \u540c\u65f6 \u62ff\u8d77 ta \u5de6\u53f3\u4fa7\u7b77\u5b50\u65f6\uff0c\u624d\u80fd\u5e72\u996d\u3002\u663e\u7136\uff0c\u4e24\u4e2a\u54f2\u5b66\u5bb6\u4e0d\u80fd\u540c\u65f6\u62ff\u8d77\u540c\u4e00\u6839\u7b77\u5b50\uff1b\u5e72\u5b8c\u996d\u54f2\u5b66\u5bb6\u4f1a\u653e\u4e0b\u7b77\u5b50\u3002\u5047\u8bbe\u54f2\u5b66\u5bb6\u4eec\u90fd\u4e0d\u5acc\u810f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_2","title":"\u89e3\u51b3 - semaphores","text":"

\u663e\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a\u7b77\u5b50\u662f\u5426\u53ef\u7528\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u4e0b\u9762\uff08\u6709\u95ee\u9898\u7684\uff09\u89e3\u6cd5\uff1a

process() {\nwait(chopstick[i]);\nwait(chopstick[ (i+1) % 5 ]); // i.e. the next chopstick\n\n/* eat rice */\n\nsignal(chopstick[i]);\nsignal(chopstick[ (i+1) % 5 ]);\n}\n

\u4e0a\u8ff0\u65b9\u6848\u5b58\u5728\u95ee\u9898\uff01

\u8003\u8651\u8fd9\u79cd\u60c5\u51b5\uff1a\u6240\u6709\u54f2\u5b66\u5bb6\u5728\u7b2c\u4e00\u5e27\u90fd\u60f3\u8981\u5e72\u996d\uff0c\u6b64\u65f6\u5b83\u4eec\u540c\u65f6\u8fd0\u884c\u5b8c\u4e86\u7b2c 2 \u884c\uff08\u4f8b\u5982\uff0c\u540c\u65f6\u62ff\u8d77\u4e86\u53f3\u624b\u8fb9\u7684\u7b77\u5b50\uff09\uff0c\u8fd9\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\u6240\u6709\u7b77\u5b50\u90fd\u88ab\u5360\u6709\uff0c\u6ca1\u6709\u4efb\u4f55\u4e00\u4e2a\u4eba\u80fd\u7b49\u5230\u4e0b\u4e00\u4e2a\u7b77\u5b50\uff0c\u6b64\u65f6\uff0c\u54f2\u5b66\u5bb6\u4eec\u53d1\u751f\u4e86\u6b7b\u9501\u3002

\u5bf9\u4e8e\u8fd9\u4e2a\u6b7b\u9501\uff0c\u4e66\u4e2d\u7ed9\u51fa\u4e86\u4e09\u79cd\u89e3\u51b3\u65b9\u6848\uff1a

  1. \u5141\u8bb8\u6700\u591a 4 \u4f4d\u54f2\u5b66\u5bb6\u540c\u65f6\u83b7\u53d6\u7b77\u5b50\uff1b
  2. \u54f2\u5b66\u5bb6\u5fc5\u987b\u540c\u65f6\u83b7\u53d6\u4e24\u4e2a\u7b77\u5b50\uff0c\u800c\u4e0d\u80fd\u6293\u4e00\u652f\u7b49\u4e00\u652f\uff1b
    • \u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u201c\u6293\u7b77\u5b50\u201d\u8fd9\u4ef6\u4e8b\u5e94\u5f53\u5728\u4e00\u4e2a\u4e34\u754c\u6bb5\u4e2d\u5b8c\u6210\uff1b
  3. \u5947\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u5de6\u624b\u7684\u7b77\u5b50\uff0c\u5076\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u53f3\u624b\u7684\u7b77\u5b50\uff0c\u8fd9\u6837\u4e0d\u4f1a\u4ea7\u751f\u5faa\u73af\u7b49\u5f85\uff1b
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---monitors","title":"\u89e3\u51b3 - monitors","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/","title":"U2 Part 3: \u6b7b\u9501 | Deadlocks","text":"

\u7ea6 5209 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

\u5f15\u5165

\u6b7b\u9501\u95ee\u9898\u5e7f\u6cdb\u5b58\u5728\u4e8e\u8ba1\u7b97\u673a\u8f6f\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u800c\u6211\u4eec\u672c\u8282\u53ea\u8ba8\u8bba\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u5efa\u6a21","title":"\u6b7b\u9501\u5efa\u6a21","text":"

\u6211\u4eec\u5728\u4e0a\u4e00\u8282\u4e2d\u5df2\u7ecf\u63d0\u5230\u4e86\u4e00\u4e2a\u6b7b\u9501\u60c5\u51b5\u3002\u672c\u8282\u6211\u4eec\u4e13\u6ce8\u4e8e\u5982\u4f55\u89e3\u51b3\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501(deadlock)\u95ee\u9898\u3002

deadlock

A deadlock is a situation in which every process in a set of processes is waiting for an event that can be caused only by another process in the set.

\u5373\u5b58\u5728\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u96c6\u5408\uff0c\u5b83\u4eec\u4e92\u76f8\u7b49\u5f85\u5bf9\u65b9\u6301\u6709\u7684\u8d44\u6e90\u3002

\u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u53eb\u6d3b\u9501(livelock)1\u7684\u4e1c\u897f\u3002

\u6b7b\u9501\u4ea7\u751f\u4e8e\u8d44\u6e90\u7684\u4f7f\u7528\u8fc7\u7a0b\uff0c\u800c\u4e14\u901a\u5e38\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u624d\u4f1a\u53d1\u751f\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u8fd9\u79cd\u4e0d\u786e\u5b9a\u6027\uff0c\u6b7b\u9501\u95ee\u9898\u624d\u5f02\u5e38\u68d8\u624b\u3002\u4e3a\u4e86\u89e3\u51b3\u6b7b\u9501\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u7406\u89e3\u6b7b\u9501\u4ea7\u751f\u7684\u539f\u56e0\uff0c\u4ee5\u65b9\u4fbf\u5bf9\u5b83\u8fdb\u884c\u5efa\u6a21\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u63cf\u8ff0\u6b7b\u9501\u3002

\u4ece\u8d44\u6e90\u4f7f\u7528\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7cfb\u7edf\u7684\u884c\u4e3a\u5206\u6210\u4e09\u4e2a\u90e8\u5206\uff1a

  1. \u7533\u8bf7\u8d44\u6e90\uff1b
  2. \u4f7f\u7528\u8d44\u6e90\uff1b
  3. \u91ca\u653e\u8d44\u6e90\uff1b

\u5176\u4e2d\uff0c\u7533\u8bf7\u8d44\u6e90\u548c\u91ca\u653e\u8d44\u6e90\u901a\u5e38\u901a\u8fc7\u4e0d\u540c\u7684\u7cfb\u7edf\u8c03\u7528\u5b9e\u73b0\u3002\u800c\u90e8\u5206\u8d44\u6e90\u662f\u6709\u9650\u4e14\u4e92\u65a5\u7684\uff0c\u56e0\u800c\u5982\u679c\u5728\u7f3a\u4e4f\u8d44\u6e90\u7684\u60c5\u51b5\u4e0b\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u4ecd\u7136\u60f3\u8981\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u53ea\u80fd\u9677\u5165\u7b49\u5f85\u3002\u800c\u6b63\u5728\u7b49\u5f85\u7684\u8d44\u6e90\u4e5f\u53ef\u80fd\u6301\u6709\u4e00\u4e9b\u8d44\u6e90\uff0c\u4e00\u65e6\u6070\u597d\u51fa\u73b0\u4e86\u4e92\u76f8\u7b49\u5f85\u7684\u60c5\u51b5\uff0c\u5c31\u4f1a\u51fa\u73b0\u6b7b\u9501\u3002\u4f8b\u5982\uff0c\u4e92\u65a5\u9501\u548c\u4fe1\u53f7\u91cf\u8fd9\u4e9b\u4e1c\u897f\u5c31\u662f\u6b7b\u9501\u4ea7\u751f\u7684\u4e00\u5927\u91cd\u8981\u6765\u6e90\u3002

\u8ba1\u7b97\u673a\u8d44\u6e90\u5206\u4e3a\u5f88\u591a\u7c7b\uff0c\u6bcf\u4e00\u7c7b\u4e2d\u53ef\u80fd\u6709\u82e5\u5e72\u5e73\u7b49\u7684\u201c\u5b9e\u4f8b(instance)\u201d\u3002\u5bf9\u4e8e\u4e00\u4e2a\u5408\u7406\u7684\u201c\u8d44\u6e90\u5206\u7c7b\u201d\u6765\u8bf4\uff0c\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u67d0\u79cd\u8d44\u6e90\u65f6\u5019\uff0c\u8fd9\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u7684\u4efb\u610f\u7a7a\u95f2\u5b9e\u4f8b\u90fd\u5e94\u5f53\u53ef\u4ee5\u88ab\u7528\u4e8e\u6ee1\u8db3\u8fd9\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u9700\u6c42\u3002

\u5bfc\u8bfb

\u4e0b\u9762\u4e24\u4e2a\u90e8\u5206\u5e76\u4e0d\u4f1a\u5f88\u5feb\u5c31\u88ab\u7528\u5230\uff0c\u5c24\u5176\u662f\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u662f\u88ab\u6211\u63d0\u524d\u653e\u5230\u8fd9\u91cc\u6765\u7684\uff0c\u8bfb\u8005\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u662f\u76f4\u63a5\u987a\u5e8f\u9605\u8bfb\uff0c\u8fd8\u662f\u6682\u65f6\u8df3\u8fc7\uff08\u4e4b\u540e\u7528\u5230\u7684\u65f6\u5019\u6211\u4f1a\u7ed9\u51fa\u8df3\u56de\u94fe\u63a5\uff09\u3002

\u6211\u4e2a\u4eba\u8ba4\u4e3a\u7ed3\u6784\u4e0a\u8fd9\u6837\u5b89\u6392\u66f4\u6e05\u6670\uff0c\u4f46\u8003\u8651\u5230\u4e24\u4e2a\u5185\u5bb9\u5b58\u5728\u4e00\u5b9a\u95f4\u9694\uff0c\u6240\u4ee5\u5f80\u540e\u653e\u7f6e\u4e5f\u6709\u5f80\u540e\u653e\u7f6e\u7684\u9053\u7406\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe","title":"\u8d44\u6e90\u5206\u914d\u56fe","text":"

\u6839\u636e\u4e0a\u9762\u7684\u63cf\u8ff0\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\uff0c\u5efa\u6a21\u6b7b\u9501\u53ef\u4ee5\u4ece\u8ba8\u8bba\u8fdb\u7a0b/\u7ebf\u7a0b\u4e0e\u8d44\u6e90\u7684\u6c42\u53d6\u5173\u7cfb\u5165\u624b\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u8d44\u6e90\u5206\u914d\u56fe(resource-allocation graph)\u6765\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u3002

\u9759\u6001

\u8d44\u6e90\u5206\u914d\u56fe\u662f\u4e00\u79cd\u6709\u4e24\u7c7b\u8282\u70b9\u7684\u6709\u5411\u56fe\uff0c\u6211\u4eec\u7528\u5706\u8282\u70b9 \\(T_i\\) \u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\uff0c\u7528\u65b9\u8282\u70b9 \\(R_j\\) \u8868\u793a\u8d44\u6e90\uff0c\u65b9\u8282\u70b9\u4e2d\u7684\u5b9e\u5fc3\u70b9\u8868\u793a\u4e00\u4e2a\u8d44\u6e90\u7c7b\u522b\u7684\u4e00\u4e2a\u5b9e\u4f8b\u3002\u540c\u65f6\uff0c\u6211\u4eec\u79f0\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b\u6307\u5411\u8d44\u6e90\u7c7b\u522b\u7684\u6709\u5411\u8fb9\u4e3a\u8bf7\u6c42\u8fb9(request edge)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6b63\u5728\u7b49\u5f85\u8fd9\u79cd\u8d44\u6e90\uff1b\u79f0\u4ece\u8d44\u6e90\u5b9e\u4f8b\u6307\u5411\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u6709\u5411\u8fb9\u4e3a\u5206\u914d\u8fb9(assignment edge)\uff0c\u8868\u793a\u8d44\u6e90 \\(R_j\\) \u88ab\u5206\u914d\u7ed9\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\)\uff0c\u5373\u76ee\u524d\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6301\u6709\u4e00\u4e2a\uff08\u4e00\u6761\u8fb9\u8868\u793a\u4e00\u4e2a\uff09\u8d44\u6e90 \\(R_j\\) \u7684\u5b9e\u4f8b\uff0c\u4f8b\u5982\u4e0b\u56fe\uff1a

\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u5b58\u5728\u73af\uff0c\u662f\u7cfb\u7edf\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\u7684\u5fc5\u8981\u6761\u4ef6\u3002

\u52a8\u6001

\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u4eec\u8fd8\u5c06\u770b\u5230\u4e00\u4e9b\u8d44\u6e90\u5206\u914d\u56fe\u7684\u53d8\u4f53\uff1a\u5f15\u5165 claim edge \u7684\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u4ee5\u53ca\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7b49\u5f85\u5173\u7cfb\u7684 wait for graph\u3002

\u7531\u4e8e\u552f\u4e00\u5b9e\u4f8b\u8fd9\u4e2a\u6027\u8d28\u88ab\u7834\u574f\u540e\uff0c\u6b7b\u9501\u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e0a\u4e0d\u518d\u90a3\u4e48\u76f4\u89c2\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5f15\u5165\u65b0\u7684\u5de5\u5177\u6765\u63cf\u8ff0\u6b7b\u9501\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","title":"\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","text":"

\u8be5\u90e8\u5206\u5185\u5bb9\u88ab\u4e66\u672c\u5b89\u6392\u5728\u6b7b\u9501\u907f\u514d\u4e2d\uff0c\u88ab\u6211\u63d0\u524d\uff0c\u53ef\u4ee5\u8003\u8651\u4e0d\u76f4\u63a5\u6df1\u5165\u800c\u662f\u7b49\u4e4b\u540e\u9047\u5230\u4e86\u518d\u770b\u3002

\u5b89\u5168\u72b6\u6001(safe state)\u6307\u5b58\u5728\u5b89\u5168\u5e8f\u5217(safe sequence)\u7684\u72b6\u6001\uff0c\u7cfb\u7edf\u6309\u7167 safe sequence \u7684\u987a\u5e8f\u6267\u884c\u8fdb\u7a0b/\u7ebf\u7a0b\u548c\u5206\u914d\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b\u76f8\u5bf9\u5e94\u7684\uff0c\u4e0d\u662f\u5b89\u5168\u72b6\u6001\u7684\u72b6\u6001\u79f0\u4e3a\u4e0d\u5b89\u5168\u72b6\u6001(unsafe state)\u3002\u5177\u4f53\u6765\u8bf4\uff0csafe sequence \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

safe sequence

\u9996\u5148 high level \u5730\u8bb2\u4e00\u4e0b safe sequence \u7684\u601d\u8def\uff0csafe sequence \u4e2d\u7684\u6bcf\u4e00\u9879 \\(T_i\\) \u6240\u9700\u8981\u7684\u8d44\u6e90\uff0c\u90fd\u80fd\u901a\u8fc7\u73b0\u6709\u8d44\u6e90\u6216\u5176\u4e4b\u524d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b \\(\\forall j < i T_{j}\\) \u6267\u884c\u5b8c\u6bd5\u91ca\u653e\u7684\u8d44\u6e90\u6765\u6ee1\u8db3\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5bf9\u4e8e safe sequence \\(<T_1, T_2, \\dots, T_n>\\)\uff0c\u6211\u4eec\u5b9a\u4e49\u6bcf\u4e00\u9879\u8fd8\u9700\u8981\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(need_{i,j}\\)\u3001\u5df2\u7ecf\u88ab\u5206\u914d\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(allocated_{i,j}\\)\uff0c\u4ee5\u53ca\u8d44\u6e90 \\(R_j\\) \u4e2d\u8fd8\u7a7a\u95f2\u7684\u8d44\u6e90\u7684\u91cf \\(available_{j}\\)\uff0c\u5219\u5e94\u5f53\u6709\uff1a

\\[ \\begin{aligned} \\forall i \\in \\{1, 2, \\dots, n\\},\\quad \\forall j \\in \\{1, 2, \\dots, m\\}, \\\\ available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j} \\geq need_{i,j} \\end{aligned} \\]

\u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6765\u8bf4\uff0c\u5b9e\u9645\u8fd0\u884c\u65f6\u7684\u7a7a\u95f2\u8d44\u6e90\u53ef\u80fd\u6765\u81ea\u4e8e \\(allocated_{k,j}\\)\uff0c\u4f46\u8fd9\u91cc\u662f\u7528\u6765\u505a\u5224\u65ad\u7684\uff0c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5728\u7ebf\u7684\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u7528 \\(available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j}\\) \u8fd9\u4e2a\u5f0f\u5b50\u6765\u7ef4\u62a4\u6b64\u65f6 \\(T_i\\) \u7684\u6700\u5927\u53ef\u7528\u8d44\u6e90\u3002

\u601d\u8003\u5982\u4f55\u5bfb\u627e\u4e00\u4e2a safe sequence

\u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728\u4e4b\u540e\u6b7b\u9501\u68c0\u6d4b\u7684\u90e8\u5206\u4f1a\u7ed9\u51fa\u7b54\u6848\uff0c\u4f46\u4e0d\u59a8\u7b80\u5355\u601d\u8003\u4e00\u4e0b\u600e\u6837\u5bfb\u627e\u4e00\u4e2a safe sequence \u5462\uff1f\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\uff1f

\u4f46\u662f\uff0csafe state \u662f\u4e00\u4e2a\u76f8\u5bf9\u8f83\u5f3a\u7684\u7ea6\u675f\uff0c\u4e0d\u5b89\u5168\u72b6\u6001\u4e0d\u4ee3\u8868\u6b7b\u9501\u4e00\u5b9a\u4f1a\u53d1\u751f\uff0c\u7528\u97e6\u6069\u56fe\u6765\u8868\u793a\u5b83\u4eec\u7684\u5173\u7cfb\u5c31\u662f\uff1a

\u5982\u679c\u6211\u4eec\u80fd\u4fdd\u8bc1\u7cfb\u7edf\u53ea\u8fd0\u884c\u5728 safe state\uff0c\u4e5f\u5c31\u80fd\u5145\u5206\u5730\u907f\u514d\u6b7b\u9501\u7684\u53d1\u751f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u6761\u4ef6","title":"\u6b7b\u9501\u7684\u6761\u4ef6","text":"

\u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u4e0b\u9762\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\uff1a

  1. \u4e92\u65a5(mutual exclusion)\uff1a\u6b7b\u9501\u4e2d\u7684\u8d44\u6e90\u5fc5\u987b\u662f\u975e\u5171\u4eab\u7684\uff0c\u5373\u4e00\u6b21\u53ea\u80fd\u88ab\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u4f7f\u7528\uff1b
    • \u6b63\u56e0\u4e3a\u4e92\u65a5\u8d44\u6e90\u65e0\u6cd5\u88ab\u540c\u65f6\u4f7f\u7528\uff0c\u6240\u4ee5\u9700\u8981\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u7b49\u5f85\u6301\u6709\u76ee\u6807\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u91ca\u653e\u8be5\u8d44\u6e90\u4ee5\u540e\u624d\u80fd\u4f7f\u7528\u76ee\u6807\u8d44\u6e90\uff1b
  2. \u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5728\u7b49\u5f85\u8d44\u6e90\u7684\u540c\u65f6\uff0c\u4e5f\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff1b
    • \u4e3a\u4e86\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\uff0c\u4e00\u4e2a\u7b49\u5f85\u5176\u5b83\u8d44\u6e90\uff08\u6709\u51fa\u8fb9\uff09\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff0c\u8fd9\u6837\u624d\u80fd\u8ba9\u5176\u5b83\u8d44\u6e90\u4e5f\u7b49\u5f85\u5b83\uff08\u6709\u5165\u8fb9\uff09\uff1b
    • \u8bf4\u767d\u4e86\u5c31\u662f\uff1a\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85
  3. \u975e\u62a2\u5360(no preemption)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u5728\u4f7f\u7528\u5b8c\u8d44\u6e90\u540e\u4e3b\u52a8\u91ca\u653e\u8d44\u6e90\uff0c\u5176\u6301\u6709\u7684\u8d44\u6e90\u65e0\u6cd5\u88ab\u5176\u5b83\u8fdb\u7a0b/\u7ebf\u7a0b\u62a2\u5360\uff1b
    • \u4e3a\u4e86\u4fdd\u8bc1\u7b49\u5f85\u5173\u7cfb\u4e0d\u4f1a\u88ab\u5f3a\u884c\u7834\u574f\uff1b
  4. \u5faa\u73af\u7b49\u5f85(circular wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b\u5b58\u5728\u73af\u72b6\u7684\u7b49\u5f85\u8d44\u6e90\u5173\u7cfb\uff0c\u5373 wait for graph \u4e2d\u5b58\u5728\u73af\uff1b
    • \u903b\u8f91\u4e0a\u5bfc\u81f4\u6b7b\u9501\u51fa\u73b0\u7684\u76f4\u63a5\u539f\u56e0\uff0c\u4e92\u76f8\u7b49\u5f85\u5bfc\u81f4\u6ca1\u6709\u8d44\u6e90\u4f1a\u88ab\u91ca\u653e\uff0c\u5bfc\u81f4\u6b7b\u9501\u72b6\u6001\u65e0\u6cd5\u88ab\u6253\u7834\uff1b

\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u56db\u4e2a\u5173\u7cfb\u5e76\u4e0d\u5b8c\u5168\u72ec\u7acb\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u5904\u7406","title":"\u6b7b\u9501\u7684\u5904\u7406","text":"

\u5f88\u5bb9\u6613\u8ba4\u8bc6\u5230\uff0c\u6b7b\u9501\u7684\u5371\u5bb3\u662f\u5de8\u5927\u7684\uff0c\u90a3\u4e48\u5982\u4f55\u5904\u7406\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u5462\uff1f\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\u601d\u8def\uff1a

  1. \u4e0d\u505a\u989d\u5916\u5904\u7406\uff0c\u8981\u6c42\u7a0b\u5e8f\u5458\u4fdd\u8bc1\u903b\u8f91\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b
  2. \u6b7b\u9501\u9884\u9632(deadlock prevention)\uff1a\u4f7f\u7528\u67d0\u79cd\u89c4\u8303\u6216\u534f\u8bae\u6765\u4fdd\u8bc1\u6b7b\u9501\u4e0d\u4f1a\u51fa\u73b0\uff1b
  3. \u6b7b\u9501\u907f\u514d(deadlock avoidance)\uff1a\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u7684\u53d1\u751f\uff1b
    • \u4e0e 2. \u7684\u6700\u4e3b\u8981\u7684\u533a\u522b\u662f\uff0c2. \u5728\u89c4\u8303\u4e0b\u7684\u6240\u6709\u884c\u4e3a\u90fd\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\u95ee\u9898\uff1b\u800c 3. \u5219\u662f\u4e0d\u7ea6\u675f\u884c\u4e3a\uff0c\u4f46\u662f\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u6267\u884c\uff0c\u5728\u7a0d\u5019\u4ecb\u7ecd\u5177\u4f53\u5185\u5bb9\u540e\u4f1a\u66f4\u5bb9\u6613\u7406\u89e3\uff1b
  4. \u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u5141\u8bb8\u6b7b\u9501\u7684\u51fa\u73b0\uff0c\u4f46\u662f\u5f53\u68c0\u6d4b\u5230\u6b7b\u9501\u65f6\uff0c\u9700\u8981\u53bb\u6d88\u9664\u6b7b\u9501\u95ee\u9898\uff1b

\u4e8b\u5b9e\u4e0a\uff0c\u5728\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u4e00\u822c\u9009\u62e9\u4f7f\u7528\u7b2c\u4e00\u79cd\uff0c\u5373\u5c06\u95ee\u9898\u4ea4\u7ed9\u5f00\u53d1\u8005\u53bb\u89e3\u51b3\u3002

\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u4ecb\u7ecd\u4e0a\u9762\u63d0\u5230\u7684\u540e\u4e09\u4e2a\u65b9\u6cd5\u4e2d\u7684\u56db\u5757\u5185\u5bb9\u3002\u5176\u4e2d\u6709\u90e8\u5206\u5185\u5bb9\u6709\u8f83\u5927\u4ea4\u96c6\uff0c\u5b83\u4eec\u53ef\u80fd\u5c5e\u4e8e\u540c\u4e00\u7eb2\u9886\u4e0b\u5728\u4e0d\u540c\u65f6\u523b\u505a\u7684\u5904\u7406\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u9884\u9632","title":"\u6b7b\u9501\u9884\u9632","text":"

\u6b7b\u9501\u9884\u9632(deadlock prevention)\u7684\u6838\u5fc3\u601d\u8def\u662f\u7834\u574f\u6b7b\u9501\u4ea7\u751f\u7684\u5fc5\u8981\u6761\u4ef6\u3002\u7531\u4e8e\u300c\u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\u300d\uff0c\u6240\u4ee5\u6211\u4eec\u5982\u679c\u80fd\u4fdd\u8bc1\u56db\u4e2a\u6761\u4ef6\u4e2d\u67d0\u4e00\u4e2a\u4e00\u76f4\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u6b7b\u9501\u5c06\u6c38\u8fdc\u4e0d\u4f1a\u4ea7\u751f\uff0c\u800c\u65e2\u7136\u6b7b\u9501\u4e0d\u4f1a\u4ea7\u751f\uff0c\u90a3\u4e5f\u5c31\u4e0d\u9700\u8981\u53bb\u5904\u7406\u6b7b\u9501\u95ee\u9898\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5bf9\u56db\u4e2a\u5fc5\u8981\u6761\u4ef6\u9010\u4e00\u5206\u6790\uff1a

  1. \u7834\u574f\u4e92\u65a5(mutual exclusion)\uff1a
    • \u8fd9\u4e2a\u6761\u4ef6\u51e0\u4e4e\u662f\u65e0\u6cd5\u7834\u574f\u7684\uff0c\u5f88\u591a\u8d44\u6e90\u5929\u7136\u662f\u4e92\u65a5\u7684\uff1b
    • \u6709\u4e9b\u8d44\u6599\u91cc\u4e5f\u6709\u5199\u4e00\u4e9b\u65b9\u6cd5\u6765\u7834\u574f\u8fd9\u4e2a\u6761\u4ef62\uff0c\u4f46\u662f\u6211\u611f\u89c9\u8fd8\u662f\u6709\u5c40\u9650\u6027\u7684\uff0c\u53cd\u6b63\u4e66\u672c\u91cc\u8bf4\u7684\u662f\u6ca1\u6cd5\u7834\u574f\uff1b
  2. \u7834\u574f\u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a
    • \u5728\u6211\u4eec\u524d\u9762\u7684\u5206\u6790\u4e2d\u77e5\u9053\uff1a\u300c\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\u300d\uff1b
    • \u4f46\u662f\uff0c\u5982\u679c\u6211\u4eec\u53ea\u5141\u8bb8\u4e00\u4e2a\u8282\u70b9\u53ea\u80fd\u5728\u201c\u88ab\u7b49\u5f85\u201d\u548c\u201c\u7b49\u5f85\u201d\u4e2d\u4e8c\u9009\u4e00\uff0c\u4e5f\u5c31\u662f\u8bf4\u8ba9\u4e00\u4e2a\u7ebf\u7a0b/\u8fdb\u7a0b\u4e00\u65e6\u7533\u8bf7\u8d44\u6e90\u5c31\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\uff0c\u5982\u679c\u6ca1\u6cd5\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\u5c31\u91ca\u653e\u5df2\u7ecf\u7533\u8bf7\u5230\u7684\u8d44\u6e90\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\u907f\u514d\u4e86\u5faa\u73af\u7b49\u5f85\u7684\u4ea7\u751f\uff1b
  3. \u7834\u574f\u975e\u62a2\u5360(no preemption)\uff1a
    • \u901a\u8fc7\u5141\u8bb8\u8fdb\u7a0b/\u7ebf\u7a0b\u5f3a\u884c\u62a2\u5360\u53e6\u5916\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6301\u6709\u7684\u8d44\u6e90\uff0c\u53ef\u4ee5\u7834\u574f\u88ab\u52a8\u7684\u7b49\u5f85\u5173\u7cfb\uff0c\u4ece\u800c\u907f\u514d\u6b7b\u9501\uff1b
    • \u4f46\u662f\u548c\u4e92\u65a5\u5176\u5b9e\u662f\u7c7b\u4f3c\u7684\uff0c\u975e\u62a2\u5360\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u5929\u7136\u6027\uff0c\u5f3a\u884c\u62a2\u5360\u4e00\u90e8\u5206\u8d44\u6e90\u53ef\u80fd\u5bfc\u81f4\u8fdb\u884c\u5230\u4e00\u534a\u7684\u4efb\u52a1\u5931\u8d25\uff0c\u751a\u81f3\u4e00\u4e9b\u66f4\u4e25\u91cd\u7684\u540e\u679c\uff0c\u6240\u4ee5\u8fd9\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u529e\u6cd5\uff1b
    • \u800c\u4e14\uff0c\u5141\u8bb8\u201c\u62a2\u5360\u201d\u4e5f\u4f1a\u5e26\u6765\u9965\u997f\u95ee\u9898\uff0c\u603b\u4f53\u6765\u8bf4\u96be\u4ee5\u5b9e\u73b0\u800c\u4e14\u6548\u7387\u4e0d\u9ad8\uff1b
  4. \u7834\u574f\u5faa\u73af\u7b49\u5f85(circular wait)\uff1a
    • \u901a\u8fc7\u7ed9\u8d44\u6e90\u7f16\u53f7\uff0c\u89c4\u5b9a\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7279\u5b9a\u7684\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u5faa\u73af\u7b49\u5f85\u7684\u60c5\u51b5\uff1b
    • \u7531\u4e8e\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u800c\u8d44\u6e90\u7684\u7533\u8bf7\u5e94\u5f53\u662f\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u300c\u8fdb\u7a0b\u5927\u534a\u90e8\u5206\u53ea\u9700\u8981\u7528\u5230 \\(R_3\\)\uff0c\u4f46\u662f\u7531\u4e8e\u6700\u540e\u9700\u8981\u7528\u4e00\u4e0b \\(R_1\\)\uff0c\u6240\u4ee5\u5fc5\u987b\u5148\u7533\u8bf7 \\(R_1\\) \u518d\u7533\u8bf7 \\(R_3\\)\uff0c\u5bfc\u81f4\u8fc7\u7a0b\u4e2d \\(R_1\\) \u4e00\u76f4\u88ab\u6301\u6709\u4f46\u4e00\u76f4\u672a\u88ab\u4f7f\u7528\u300d\u7684\u60c5\u51b5\uff0c\u6548\u7387\u582a\u5fe7\uff1b
    • \u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u5728\u8bbe\u8ba1\u7f16\u53f7\u65f6\u5c06\u8d44\u6e90\u4f7f\u7528\u7684\u5e38\u89c4\u987a\u5e8f\u7b49\u56e0\u7d20\u7eb3\u5165\u8003\u8651\uff0c\u4f46\u7cbe\u5fc3\u8bbe\u8ba1\u7684\u8d44\u6e90\u5e8f\u53f7\u9047\u5230\u65e0\u7a77\u65e0\u5c3d\u7684\u8d44\u6e90\u7c7b\u578b\u65f6\uff0c\u53c8\u5f53\u5982\u4f55\u5462\uff1f\u7531\u4e8e\u9700\u8981\u5927\u91cf\u8bbe\u8ba1\uff0c\u6240\u4ee5\u5e26\u6765\u4e86\u8d44\u6e90\u7684\u6269\u5c55\u6027\u8f83\u5dee\u7684\u95ee\u9898\uff1b
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u907f\u514d","title":"\u6b7b\u9501\u907f\u514d","text":"

\u6b7b\u9501\u907f\u514d(deadlock avoidance)\u901a\u8fc7\u963b\u6b62\u53ef\u80fd\u8ba9\u7cfb\u7edf\u8fdb\u5165\u6b7b\u9501\u72b6\u6001\u7684\u884c\u4e3a\uff0c\u6765\u89e3\u51b3\u6b7b\u9501\u95ee\u9898\u3002\u5373\uff1a\u5982\u679c\u8fd9\u4e48\u505a\u53ef\u80fd\u5bfc\u81f4\u6b7b\u9501\uff0c\u90a3\u6211\u5c31\u4e0d\u8fd9\u4e48\u505a\uff0c\u4ee5\u6b64\u6765\u907f\u514d\u6b7b\u9501\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","title":"\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","text":"

\u524d\u7f6e\uff1a\u8d44\u6e90\u5206\u914d\u56fe\uff01

\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u8f83\u4e3a\u76f4\u63a5\uff0c\u5b83\u4e0e\u5b89\u5168\u72b6\u6001\u7684\u6982\u5ff5\u65e0\u5173\uff0c\u76f4\u63a5\u68c0\u6d4b\u67d0\u79cd\u5206\u914d\u662f\u5426\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5982\u679c\u8be5\u5206\u914d\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5219\u4e0d\u8fdb\u884c\u8be5\u5206\u914d\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002\uff08\u56e0\u4e3a\u5b83\u4ee5\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u7684\u90a3\u4e2a\u7279\u4f8b\u4e3a\u539f\u7406\uff01\uff09

\u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u5f15\u5165\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u8fd9\u4e2a\u5de5\u5177\uff0c\u73b0\u5728\u6211\u4eec\u8981\u5728\u8d44\u6e90\u5206\u914d\u56fe\u7684\u57fa\u7840\u4e0a\uff0c\u5f15\u5165\u4e00\u6761\u8bc9\u6c42\u8fb9(claim edge)\uff0c\u7528\u865a\u7ebf\u8868\u793a\uff0c\u5b83\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6307\u5411\u8d44\u6e90 \\(R_j\\)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u4f1a\u5728\u672a\u6765\u7533\u8bf7\u8d44\u6e90 \\(R_j\\)\u3002

\u4e8e\u662f\uff0c\u5728\u52a8\u6001\u8fc7\u7a0b\u4e2d\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u6309\u7167\u5982\u4e0b\u89c4\u5219\u53cd\u5e94\u5206\u914d\u8fc7\u7a0b\uff1a

  1. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u88ab\u6dfb\u52a0\u5230\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u65f6\u5019\uff0c\u9700\u8981\u8fde\u597d\u6240\u6709\u76f8\u5173\u7684 claim edge\uff1b
    • \u8981\u6c42\u6700\u521d\u5c31\u77e5\u9053\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\uff0c\u8fd9\u4e5f\u6784\u6210\u8fd9\u7c7b\u65b9\u6cd5\u7684\u4e00\u4e2a\u5c40\u9650\u6027\uff1b

  2. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u7533\u8bf7\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5982\u679c\u8fd9\u6761\u8fb9\u53d8\u4e3a assignment edge \u4e0d\u4f1a\u5bfc\u81f4\u6210\u73af\uff0c\u5219\u5c06 claim edge \u8f6c\u5316\u4e3a\u4e00\u6761 request edge \\(T_i \\rightarrow R_j\\)\uff1b
    • \u8bf7\u6ce8\u610f\uff0c\u8fd9\u91cc\u9700\u8981\u5224\u65ad\u7684\u662f assignment edge\uff0c\u800c\u8f6c\u5316\u7684\u662f request edge\uff1b

  3. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u83b7\u5f97\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 request edge \u8f6c\u5316\u4e3a\u4e00\u6761 assignment edge \\(R_j \\rightarrow T_i\\)\uff1b
  4. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u91ca\u653e\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 assignment edge \u5220\u53bb\uff1b

\u6211\u4eec\u5728\u4e0a\u9762\u4e5f\u8bf4\u4e86\uff1a\u300c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u300d\uff0c\u90a3\u4e48\u5982\u4f55\u89e3\u9664\u8fd9\u4e2a\u9650\u5236\u5462\uff1f\u8be5\u95ee\u9898\u6211\u4eec\u65e9\u5728\u8d44\u6e90\u5206\u914d\u56fe\u5c0f\u8282\u5c31\u5df2\u7ecf\u8ba8\u8bba\uff0c\u6211\u4eec\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u6765\u63cf\u8ff0\u4e00\u4e2a\u7ea6\u675f\u8f83\u5f3a\u7684\u3001\u4e0d\u4f1a\u4ea7\u751f\u6b7b\u9501\u7684\u72b6\u6001\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u94f6\u884c\u5bb6\u7b97\u6cd5","title":"\u94f6\u884c\u5bb6\u7b97\u6cd5","text":"

\u524d\u7f6e\uff1a\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\uff01

\u94f6\u884c\u5bb6\u7b97\u6cd5(Banker's algorithm)\u5f25\u8865\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u7684\u7f3a\u9677\uff0c\u5b83\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e0d\u6b62\u4e00\u4e2a\u7684\u60c5\u51b5\uff0c\u4f46\u662f\u6548\u7387\u4e0d\u5982\u5206\u914d\u56fe\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u9700\u8981\u5728\u6700\u5f00\u59cb\u7ed9\u51fa\u6240\u6709 claim edge\uff0c\u94f6\u884c\u5bb6\u7b97\u6cd5\u8981\u6c42\u6bcf\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7ed9\u51fa\u6267\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u8981\u7684\u5404\u7c7b\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff0c\u540c\u65f6\u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u4ee5\u52a8\u6001\u5730\u8ba1\u7b97\u5b89\u5168\u72b6\u6001\u3002High level \u5730\u6765\u8bb2\uff0c\u5c31\u662f\u9700\u8981\u52a8\u6001\u5730\u68c0\u6d4b\u67d0\u4e2a\u8d44\u6e90\u7533\u8bf7\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5982\u679c\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5219\u7b49\u5f85\u8d44\u6e90\u8db3\u591f\u518d\u5206\u914d\u3002

\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u9700\u8981\u7ef4\u62a4\u8fd9\u4e9b\u4e1c\u897f\uff08\u5047\u8bbe\u95ee\u9898\u4e2d\u6709 n \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u548c m \u79cd\u8d44\u6e90\uff09\uff1a

data structure

\u94f6\u884c\u5bb6\u7b97\u6cd5\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u662f\u5b89\u5168\u7b97\u6cd5(safety algorithm)\u548c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5(resource request algorithm)\u3002\u524d\u8005\u68c0\u6d4b\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u540e\u8005\u4ee5\u524d\u8005\u4e3a\u57fa\u7840\uff0c\u5224\u65ad\u662f\u5426\u5141\u8bb8\u5f53\u524d\u8d44\u6e90\u8bf7\u6c42\u53d1\u751f\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u7b97\u6cd5","title":"\u5b89\u5168\u7b97\u6cd5","text":"

\u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u5bfb\u627e\u662f\u5426\u5b58\u5728\u4e00\u4e2a\u5b89\u5168\u5e8f\u5217\u6765\u5224\u65ad\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u5b89\u5168\u72b6\u6001\u3002\u5148\u524d\u5728\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u4e00\u8282\u4e2d\u6211\u7559\u4e0b\u8fc7\u4e00\u4e2a\u95ee\u9898\uff1a\u300c\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\u300d\uff0c\u7b54\u6848\u662f\u53ef\u4ee5\uff0c\u6211\u4eec\u4ee5\u4e00\u79cd\u8fd1\u4f3c\u8d2a\u5fc3\u5730\u7b56\u7565\u53bb\u6a21\u62df\u5b89\u5168\u5e8f\u5217\u7684\u8d44\u6e90\u5206\u914d\u8fc7\u7a0b\uff0c\u5c31\u53ef\u4ee5\u5224\u65ad\u662f\u5426\u5b58\u5728\u5b89\u5168\u7b56\u7565\u3002

\u56e0\u4e3a\u5bf9\u4e8e\u6240\u6709\u53ef\u4ee5\u4f5c\u4e3a\u5b89\u5168\u72b6\u6001\u4e0b\u4e00\u9879\u7684 \\(T_{i_k}\\)\uff0c\u7531\u4e8e\u6267\u884c\u5b83\u4eec\u540e\uff0c\u7b49\u5230\u8fdb\u7a0b/\u7ebf\u7a0b\u8fd0\u884c\u7ed3\u675f\uff0c\u4f59\u4e0b\u7684\u8d44\u6e90\u53ea\u4f1a\u66f4\u591a\u4e0d\u4f1a\u66f4\u5c11\uff08\u5bf9\u6bd4\u8fd0\u884c\u524d\u540e\uff0c\u4f1a\u591a\u51fa\u6765\u539f\u672c\u5206\u914d\u7ed9\u8fd9\u4e9b\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u90a3\u4e9b\u8d44\u6e90\uff09\uff0c\u56e0\u800c\u53ea\u8981\u7b26\u5408\u6761\u4ef6\uff0c\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e0b\u4e00\u9879\uff0c\u6b65\u6b65\u53ef\u884c\u6700\u7ec8\u4e5f\u53ef\u884c\u3002

\u8bf7\u4ed4\u7ec6\u601d\u8003\u8fd9\u4e2a\u8fc7\u7a0b\u7684\u5408\u7406\u6027\uff0c\u5c24\u5176\u662f\u6211\u4e3a\u4ec0\u4e48\u5728\u8fd9\u91cc\u63d0\u5230\u4e86\u201c\u8d2a\u5fc3\u201d\uff0c\u6211\u611f\u89c9\u6211\u67e5\u5230\u7684\u8d44\u6599\u51e0\u4e4e\u90fd\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5b89\u5168\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

algorithm

  1. \u521d\u59cb\u5316\uff1a
    • Work[m] <- Available[m]\uff0cWork[m] \u8868\u793a\u5f53\u524d\u72b6\u6001\u7684\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
    • Finish[n] <- false\uff0c\u8868\u793a\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u8fd8\u6ca1\u8fd0\u884c\uff1b
  2. \u627e\u5230\u4e00\u4e2a i \u4f7f\u5f97\uff1a
    • (Finish[i] == false) && (Need[i] <= Work)\uff08\u6ce8\u610f\uff0c\u7b2c\u4e8c\u4e2a term \u662f vector \u6bd4\u8f83\uff0c\u8981\u6c42\u6bcf\u4e00\u9879\u90fd\u6ee1\u8db3\uff09\uff0c\u6ee1\u8db3\u8be5\u6761\u4ef6\u8868\u793a\u8be5\u8fdb\u7a0b/\u7ebf\u7a0b\u6240\u9700\u8981\u7684\u8d44\u6e90\u53ef\u4ee5\u88ab\u6ee1\u8db3\uff1b
    • \u5982\u679c\u6ca1\u6709\u8fd9\u4e2a i\uff0c\u5219 goto 3.\uff1b
    • \u5982\u679c\u6709\u8fd9\u4e2a i\uff0c\u5219\u66f4\u65b0\u72b6\u6001\uff1a
      • Finish[i] <- true\uff0c\u8868\u793a\u8be5\u8fdb\u7a0b/\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\uff1b
      • Work <- Work + Allocation[i]\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\u540e\u91ca\u653e\u8d44\u6e90\uff1b
      • repeat 2.\uff1b
  3. \u5982\u679c\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u6ee1\u8db3 Finish[i] == true\uff0c\u5219\u7cfb\u7edf\u5904\u4e8e\u5b89\u5168\u72b6\u6001\uff0c\u5426\u5219\u7cfb\u7edf\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff1b
"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","title":"\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","text":"

\u6709\u4e86\u5b89\u5168\u7b97\u6cd5\u4f5c\u4e3a\u57fa\u7840\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5728\u5b83\u7684\u57fa\u7840\u4e0a\uff0c\u5224\u65ad\u67d0\u4e2a\u8d44\u6e90\u8bf7\u6c42\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u8fdb\u800c\u5f97\u5230\u5b8c\u6574\u7684\u94f6\u884c\u5bb6\u7b97\u6cd5\u4e86\u3002

\u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u6a21\u62df\u7684\u65b9\u5f0f\u5224\u65ad\u4e00\u4e2a\u72b6\u6001\u662f\u4e0d\u662f\u5b89\u5168\u72b6\u6001\uff0c\u800c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u5219\u662f\u8d1f\u8d23\u7ef4\u62a4\u8fd9\u4e2a\u201c\u72b6\u6001\u201d\uff0c\u5e76\u6839\u636e\u5b89\u5168\u7b97\u6cd5\u8fd4\u56de\u7684\u7ed3\u679c\u6765\u5224\u65ad\u67d0\u4e2a\u8bf7\u6c42\u662f\u5426\u5e94\u5f53\u88ab\u63a5\u53d7\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

algorithm

  1. \u7528 Request[n][m] \u6765\u7ef4\u62a4\u8fdb\u7a0b/\u7ebf\u7a0b\u60f3\u8981\u8bf7\u6c42\u7684\u8d44\u6e90\u7684\u6570\u91cf\uff1b
  2. \u5728\u6bcf\u4e2a\u8bf7\u6c42\u4e2d\uff0c\u5982\u679c Request[i] <= Need[i]\uff08\u6ce8\u610f\u5411\u91cf\u6bd4\u8f83\uff09\uff0c\u5219\u7ee7\u7eed\uff1b\u5426\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u56e0\u4e3a\u6b64\u65f6\u5b83\u8bf7\u6c42\u7684\u91cf\u8d85\u8fc7\u4e86\u5b83\u9884\u671f\u9700\u8981\u7684\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff1b
  3. \u5982\u679c Request[i] <= Available\uff0c\u8bf4\u660e\u8d44\u6e90\u8db3\u591f\uff0c\u7ee7\u7eed\uff1b\u5426\u5219\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u7b49\u5f85\u8db3\u591f\u7684\u8d44\u6e90\uff1b
  4. \u5047\u8bbe\u7cfb\u7edf\u5206\u914d\u4e86\u8d44\u6e90\uff0c\u5219\u9700\u8981\u66f4\u65b0\u6a21\u62df\u72b6\u6001\uff08\u6b64\u65f6\u8d44\u6e90\u8fd8\u672a\u5b9e\u9645\u5206\u914d\uff01\u53ea\u662f\u4e3a\u4e86\u4ece\u6570\u503c\u4e0a\u6d4b\u8bd5\u662f\u5426\u5b89\u5168\u800c\u4e34\u65f6\u6784\u9020\u7684\u865a\u62df\u5c40\u9762\uff01\uff09\uff1a
    • Available <- Available - Request[i]\uff0c\u5373\u6a21\u62df\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
    • Allocation[i] <- Allocation[i] + Request[i]\uff0c\u5373\u6a21\u62df\u5206\u914d\u5f97\u5230\u7684\u8d44\u6e90\uff1b
    • Need[i] <- Need[i] - Request[i]\uff0c\u5373\u6a21\u62df\u9884\u671f\u9700\u6c42\u91cf\uff1b
  5. \u4f7f\u7528\u5b89\u5168\u7b97\u6cd5\u5224\u65ad\uff1a
    • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u5b89\u5168\u7684\uff0c\u5219\u8bf7\u6c42\u88ab\u63a5\u53d7\uff1b
    • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u4e0d\u5b89\u5168\u7684\uff0c\u8bf7\u6c42\u4e0d\u88ab\u5141\u8bb8\uff0c\u540c\u65f6\u9700\u8981\u5c06\u8fd9\u4e9b\u77e9\u9635\u56de\u6eda\u5230\u6a21\u62df\u4e4b\u524d\u7684\u72b6\u60013\uff1b

Limitations

Like the other algorithms, the Banker's algorithm has some limitations when implemented.

Specifically, it needs to know how much of each resource a process could possibly request. In most systems, this information is unavailable, making it impossible to implement the Banker's algorithm.

Also, it is unrealistic to assume that the number of processes is static since in most systems the number of processes varies dynamically.

Moreover, the requirement that a process will eventually release all its resources (when the process terminates) is sufficient for the correctness of the algorithm, however it is not sufficient for a practical system. Waiting for hours (or even days) for resources to be released is usually not acceptable.

From Banker's algorithm | Wikipedia.

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u68c0\u6d4b","title":"\u6b7b\u9501\u68c0\u6d4b","text":"

\u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u642d\u914d\u4f7f\u7528\uff0c\u5176\u6838\u5fc3\u601d\u8def\u662f\u4e0d\u5bf9\u8d44\u6e90\u8bf7\u6c42\u505a\u8fc7\u591a\u7ea6\u675f\uff0c\u800c\u662f\u5728\u68c0\u6d4b\u5230\u7cfb\u7edf\u4e2d\u5b58\u5728\u6b7b\u9501\u65f6\uff0c\u53bb\u5904\u7406\u6b7b\u9501\u3002\u5176\u4e2d\u7684\u7b2c\u4e00\u6b65\u5c31\u662f\u68c0\u6d4b\u5230\u6b7b\u9501\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","text":"

\u7b49\u5f85\u56fe(wait-for graph)\u662f\u8d44\u6e90\u5206\u914d\u56fe\u7684\u5316\u7b80\uff0c\u8be5\u7b97\u6cd5\u53ea\u80fd\u89e3\u51b3\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002

\u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\uff0c\u53ea\u8981\u6709\u73af\u5c31\u4f1a\u6709\u6b7b\u9501\uff0c\u800c\u53ea\u8981\u80fd\u68c0\u6d4b\u8fd9\u4e2a\u73af\uff0c\u5c31\u80fd\u68c0\u6d4b\u6b7b\u9501\u3002\u800c\u5b9e\u9645\u7684\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u8d44\u6e90\u548c\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\u4ece\u662f\u6210\u5bf9\u51fa\u73b0\u5728\u73af\u4e2d\uff0c\u800c wait-for graph \u5219\u662f\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\uff08\u8bf7\u8bfb\u8005\u601d\u8003\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u8fd9\u6837\uff09\u4ee5\u51cf\u5c0f\u70b9\u7684\u6570\u91cf\uff0c\u63d0\u9ad8\u6548\u7387\u3002

\u6211\u4eec\u5c06\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u7684\u8d44\u6e90\u5206\u914d\u56fe\u6539\u4e3a\u7b49\u5f85\u56fe\uff0c\u5373\u4e3a\uff1a

\u901a\u8fc7\u52a8\u6001\u5730\u7ef4\u62a4\u8fd9\u4e2a wait-for graph \u548c\u5b9a\u671f\u8c03\u7528\u4e00\u4e2a\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u6765\u5b9e\u73b0\u6b7b\u9501\u68c0\u6d4b\u3002

\u663e\u800c\u6613\u89c1\u7684\uff0c\u5c31\u7b97\u629b\u5f00\u5b83\u53ea\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4ec5\u80fd\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u7f3a\u70b9\uff0c\u9891\u7e41\u5730\u7ef4\u62a4\u56fe\u548c\u5b9a\u671f\u8c03\u7528\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u90fd\u4f1a\u5e26\u6765\u8f83\u5927\u7684\u5f00\u9500\u3002\u6240\u4ee5\uff0c\u8be5\u65b9\u6cd5\u5176\u5b9e\u8868\u73b0\u5e76\u4e0d\u7406\u60f3\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","text":"

\u4ece\u5355\u5b9e\u4f8b\u5411\u591a\u5b9e\u4f8b\u7684\u8fc1\u79fb\u601d\u8def\u548c\u6b7b\u9501\u907f\u514d\u4e2d\u4f7f\u7528\u7684\u8fc1\u79fb\u601d\u8def\u662f\u7c7b\u4f3c\u7684\uff0c\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u6765\u5224\u65ad\u800c\u975e\u627e\u73af\u3002\u56e0\u800c\u8fd9\u4e2a\u7b97\u6cd5\u7684\u5b9e\u73b0\u548c\u94f6\u884c\u5bb6\u7b97\u6cd5\u7684\u5b9e\u73b0\u4e5f\u662f\u7c7b\u4f3c\u7684\uff08\u4f46\u662f\u6709\u4e00\u5b9a\u533a\u522b\uff0c\u53c2\u8003\u4e66\u672c P339\uff09\uff0cjjm \u8868\u793a\u4e00\u822c\u53ea\u8003\u94f6\u884c\u5bb6\u7b97\u6cd5\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u4e5f\u4e0d\u8bb2\u8fd9\u4e2a\u7b97\u6cd5\u4e86\u3002

"},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u89e3\u9664","title":"\u6b7b\u9501\u89e3\u9664","text":"

\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u867d\u7136\u662f \"recovery\"\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u7834\u574f\u6b7b\u9501\u800c\u5e76\u6ca1\u6709\u6062\u590d\u5230\u4e00\u4e2a\u6b7b\u9501\u4e0d\u5b58\u5728\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u7ffb\u8bd1\u4e3a\u89e3\u9664\u3002\u5bf9\u4e8e\u5df2\u7ecf\u4ea7\u751f\u7684\u6b7b\u9501\uff0c\u81f3\u5c11\u5f97\u6b7b\u4e00\u4e2a\uff0c\u6211\u4eec\u9700\u8981\u4f5c\u51fa\u51b3\u65ad\u3002\u4e66\u672c\u4e2d\u63d0\u5230\u4e86\u7ec8\u6b62\u548c\u8d44\u6e90\u62a2\u5360\u4e24\u79cd\u65b9\u6cd5\uff0c\u4f46\u6211\u8ba4\u4e3a\u672c\u8d28\u4e0a\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u5e76\u5217\u5730\u7ed9\u51fa\uff1a

  1. \u90fd\u522b\u6d3b\uff0c\u6740\u6b7b\u6240\u6709\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\uff1b
    • \u5f00\u9500\u5f88\u5927\uff0c\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u5de5\u4f5c\u90fd\u76f8\u5f53\u4e8e\u767d\u8d39\u4e86\uff0c\u800c\u4e14\u5e76\u4e0d\u662f\u968f\u968f\u4fbf\u4fbf\u5c31\u80fd\u6740\u7684\uff1b
  2. \u4e00\u4e2a\u4e00\u4e2a\u6740\uff0c\u6740\u5230\u6ca1\u6709\u6b7b\u9501\uff1b
    • \u4ee5\u7279\u5b9a\u987a\u5e8f\u6740\u8fd9\u4e9b\u8fdb\u7a0b\uff0c\u53ef\u4ee5\u4f18\u5316\u8868\u73b0\uff0c\u4f8b\u5982\u6309\u7167\u4f18\u5148\u7ea7\u4ece\u4f4e\u5230\u9ad8\u6740\uff1b
  3. \u7559\u6d3b\u547d\uff0c\u4f46\u662f\u9700\u8981\u56de\u6eda\u90e8\u5206\u8fdb\u7a0b\uff0c\u5f3a\u884c\u62a2\u5360\u5360\u6709\u7684\u8d44\u6e90\uff1b
    • \u5f88\u96be\u754c\u5b9a\u5e94\u8be5\u56de\u6eda\u5230\u54ea\u91cc\uff0c\u56de\u6eda\u4e5f\u96be\u5b9e\u73b0\uff0c\u4e3a\u4e86\u56de\u6eda\u4e5f\u9700\u8981\u5b58\u50a8\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u5f00\u9500\u5f88\u5927\uff1b
    • \u53c8\u770b\u5230\u62a2\u5360\u8fd9\u4e24\u4e2a\u5b57\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e5f\u4f1a\u6709\u9965\u997f\u95ee\u9898\uff0c\u89e3\u51b3\u65b9\u6cd5\u4e5f\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u901a\u8fc7\u8003\u8651\u4f18\u5148\u7ea7\uff0c\u5e76\u5c06\u88ab\u62a2\u5360\uff08\u88ab\u8feb\u56de\u6eda\uff09\u7684\u6b21\u6570\u7eb3\u5165\u4f18\u5148\u7ea7\u7684\u8003\u8651\u8303\u7574\u3002
  1. What's the difference between deadlock and livelock? \u21a9

  2. Deadlock Prevention \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u4f7f\u7528\u5047\u8131\u673a(spooling)\u7684\u65b9\u6cd5\u6765\u89e3\u9664\u6253\u5370\u673a\u8d44\u6e90\u7684\u4e92\u65a5\u6027\u3002\u00a0\u21a9

  3. Banker's Algorithm in Operating System (OS) \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u8981\u6062\u590d\u77e9\u9635\u72b6\u6001\uff0c\u4e66\u4e0a\u8c8c\u4f3c\u6ca1\u5199\u8fd9\u4e2a\u3002\u00a0\u21a9

"},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/","title":"U3 Part 1: \u4e3b\u5b58 | Main Memory [\u672a\u5b8c\u6210]","text":"

\u7ea6 10 \u4e2a\u5b57

"},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/","title":"U3 Part 2: \u865a\u62df\u5185\u5b58 | Virtual Memory [\u672a\u5b8c\u6210]","text":"

\u7ea6 12 \u4e2a\u5b57

"},{"location":"cour_note/D3QD_OperatingSystem/Unit4/","title":"Unit 4: \u5b58\u50a8\u7ba1\u7406 | Storage Management [\u672a\u5b8c\u6210]","text":"

\u7ea6 11 \u4e2a\u5b57

"},{"location":"cour_note/D3QD_OperatingSystem/Unit5/","title":"Unit 5: \u6587\u4ef6\u7cfb\u7edf | File System [\u672a\u5b8c\u6210]","text":"

\u7ea6 11 \u4e2a\u5b57

"},{"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 16 \u5206\u949f

\u524d\u8a00

"},{"location":"others/reveal-md2Slides/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

reveal-md \u662f reveal.js \u7684\u4e00\u4e2a\u6269\u5c55\u5de5\u5177\uff0c\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9884\u7f16\u8bd1\u5de5\u5177\u3002\u5229\u7528 reveal-md\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u4e00\u4e2a Markdown \u6587\u4ef6\u6765\u5feb\u901f\u7b80\u4fbf\u5730\u751f\u6210\u4e00\u4e2a\u57fa\u4e8e\u7f51\u9875\u7684 Slides\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5c06\u5b83\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u5e76\u90e8\u7f72\u5728\u7c7b\u4f3c github pages \u7b49\u5e73\u53f0\u6765\u5206\u4eab\u9759\u6001\u9875\u9762\u3002

"},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528-ppt-\u548c\u8bed\u96c0\u6587\u6863\u6f14\u793a\u6a21\u5f0f","title":"\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528 PPT \u548c\u8bed\u96c0\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d","text":"

\u5728\u8fd9\u7bc7\u6587\u7ae0\u548c\u8bed\u5883\u4e2d\uff0c\u6211\u60f3\u5927\u6982\u5c06\u300c\u6f14\u793a\u300d\u6240\u4f7f\u7528\u7684\u5f62\u5f0f\u5206\u4e3a\u4e09\u79cd\uff1a

\u6070\u597d\uff0c\u8bed\u96c0\u63a8\u51fa\u6f14\u793a\u6587\u7a3f\u7684\u65f6\u5019\u6709\u8bf4\u660e\u4e3a\u4ec0\u4e48\u4ed6\u4eec\u8981\u5f00\u53d1\u8fd9\u6837\u4e00\u4e2a\u4e1c\u897f\u3002

\u518d\u89c1PPT\uff0c\u4f60\u597d\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d

\u6211\u975e\u5e38\u8d5e\u540c\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u5bf9\u4e8e PPT \u7684\u53d9\u8ff0\uff0c\u6211\u4e5f\u5f88\u8ba8\u538c PPT \uff0c\u5b83\u786e\u5b9e\u53ef\u4ee5\u505a\u5f88\u591a\u4e8b\uff0c\u4f46\u662f\u5bf9\u6211\u6765\u8bf4\u6ca1\u5fc5\u8981\uff0c\u6211\u4e5f\u7528\u4e0d\u5230\u3002\u800c\u4e14\u8eab\u4e3a\u7834\u5199\u4ee3\u7801\u7684\uff0c\u6211\u5bf9\u90a3\u79cd\u6240\u8c13\u7684\u9ad8\u7ea7\u611f\u5e76\u6ca1\u6709\u4ec0\u4e48\u611f\u89c9\u3002\u800c\u4e14 PPT \u6709\u4e00\u4e2a\u81f4\u547d\u7684\u7f3a\u70b9\u5c31\u662f\u5b83\u7684\u5206\u4eab\u975e\u5e38\u4e0d\u65b9\u4fbf\uff0c\u4f60\u5fc5\u987b\u8981\u901a\u8fc7\u300c\u6587\u4ef6\u300d\u6765\u4f20\u9012\u4f60\u7684\u6750\u6599\uff0c\u800c\u4e14\u8fd8\u6536\u5230\u5c55\u793a\u8bbe\u5907\u7684\u73af\u5883\u9650\u5236\uff0c\u800c\u5176\u4ed6\u4e24\u79cd\u65b9\u6cd5\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

\u56de\u5230\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bda\u7136\uff0c\u5728\u67d0\u4e9b\u7279\u5b9a\u7684\u65f6\u95f4\uff0c\u6587\u6863\u6f14\u793a\u786e\u5b9e\u80fd\u4fbf\u6377\u7684\u89e3\u51b3\u8bb8\u591a\u95ee\u9898\uff0c\u4f46\u662f\u6211\u4e0d\u89c9\u5f97\u76ee\u524d\u7684\u6587\u7a3f\u6f14\u793a\u80fd\u6210\u4e3a Slides \u7684\u66ff\u4ee3\u54c1\u3002\u5b83\u786e\u5b9e\u4fbf\u6377\u4e14\u9ad8\u6548\uff0c\u4f46\u662f\u5e76\u4e0d\u597d\u770b\uff0c\u4e5f\u5e76\u4e0d\u6e05\u6670\u2014\u2014\u800c\u4e14\u8bf4\u56de\u6765\uff0c\u5176\u5b9e\u4e5f\u4e0d\u65b9\u4fbf\uff08\u4e3a\u4ec0\u4e48\u6211\u4e4b\u540e\u4f1a\u8bb2\uff09\u3002 \u7b80\u5355\u8bb2\u4e86\u4e00\u4e0b\u6211\u5bf9\u5176\u4ed6\u4e24\u79cd\u9014\u5f84\u7684\u770b\u6cd5\uff0c\u5173\u4e8e\u901a\u8fc7\u4ee3\u7801\u9014\u5f84\u7f16\u5199\u300c\u6f14\u793a\u300d\u6587\u6863\u6211\u5f53\u7136\u4e5f\u6709\u8bdd\u8bf4\uff0c\u4f46\u662f\u6211\u60f3\u628a\u4ed6\u4eec\u653e\u5728\u540e\u9762\u3002

\u63a5\u4e0b\u6765\uff0c\u6211\u60f3\u4ece\u300c\u4f7f\u7528\u4f53\u9a8c\u300d\u7684\u89d2\u5ea6\u6765\u8bc4\u4ef7\u4e00\u4e0b\u4e0a\u9762\u5df2\u7ecf\u63d0\u8fc7\u7684\u4e24\u4e2a\u9014\u5f84\u3002

\u5728\u6211\u770b\u6765\uff0cPPT \u4e4b\u6240\u4ee5\u7d2f\u8d58\u4e14\u4f4e\u6548\uff0c\u662f\u56e0\u4e3a\u5927\u90e8\u5206\u4eba\u6d6a\u8d39\u65f6\u95f4\u5728\u4e8e\u4e0e\u6838\u5fc3\u5185\u5bb9\u5e76\u4e0d\u76f4\u63a5\u76f8\u5173\u7684\u7f8e\u5de5\u4e0a\u3002\u800c\u4ece\u5de5\u4f5c\u6d41\u7a0b\u4e0a\u6765\u8bb2\uff0c\u9664\u975e\u6211\u7cbe\u901a PPT \u4e14\u6709\u65f6\u95f4\uff0c\u5426\u5219\u6211\u4e0d\u4f1a\u4eb2\u81ea\u53bb\u505a PPT\uff0c\u800c\u662f\u548c\u7f8e\u5de5\u5bf9\u63a5\uff0c\u8ba9\u4ed6\u4eec\u6765\u505a\u3002\u53ef\u8fd9\u6837\u4e00\u6765\u95ee\u9898\u5c31\u51fa\u73b0\u4e86\uff0c\u201c\u5bf9\u63a5\u201d\u8fd9\u4ef6\u4e8b\u672a\u5fc5\u6bd4\u505a PPT \u8f7b\u677e\u3002\u53c8\u6216\u8005\u6211\u8fd9\u4e2a PPT \u662f\u6211\u81ea\u5df1\u9700\u8981\u7684\uff0c\u90a3\u6211\u5c31\u5f97\u786c\u7740\u5934\u76ae\u82b1\u8d39\u65f6\u95f4\u53bb\u94bb\u7814\u5982\u4f55\u505a\u4e00\u4e2a\u597d\u770b\u7684 PPT\uff0c\u7ed3\u679c\u6d6a\u8d39\u5927\u628a\u65f6\u95f4\u505a\u51fa\u6765\u7684\u53ef\u80fd\u8fd8\u662f\u4e2a\u8fde\u6cb9\u817b\u90fd\u8bf4\u4e0d\u4e0a\u7684\u4e1c\u897f\u3002

\u800c\u56de\u5230\u8bed\u96c0\u7684\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bf4\u6765\u53ef\u7b11\uff0c\u6211\u5199\u8fd9\u4e00\u884c\u7684\u65f6\u5019\u5c31\u53c8\u51fa\u4e86 bug\u3002\u8bda\u7136\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\u662f\u4e00\u4e2a\u5f88\u597d\u7684 Idea\uff0c\u4f46\u662f\u8bed\u96c0\u81ea\u8eab\u5927\u5927\u5c0f\u5c0f\u7684\u95ee\u9898\u5230\u5904\u90fd\u662f\uff0c\u672c\u6765\u4f5c\u4e3a\u4e00\u4e2a\u6548\u7387\u5de5\u5177\u5374\u603b\u662f\u5728\u610f\u6599\u4e4b\u5916\u7684\u5730\u65b9\u9047\u5230\u5f88\u7cdf\u5fc3\u7684 Bug \uff0c\u8fd9\u7740\u5b9e\u5f88\u5f71\u54cd\u6548\u7387\uff08\u5173\u4e8e\u8fd9\u65b9\u9762\u7684\u5410\u69fd\u6211\u5c31\u4e0d\u653e\u5728\u8fd9\u91cc\u8bf4\u4e86\uff0c\u4ee5\u9632\u504f\u9898\uff09\u3002

\u5728\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\u4e0b\uff0c\u51fa\u73b0\u4e86\u95ee\u9898\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\uff0c\u6216\u8005\u8bf4\u5feb\u901f\u6392\u67e5\uff0c\u6216\u8005\u8bf4\u662f\u9000\u800c\u6c42\u5176\u6b21\u5bfb\u627e\u522b\u7684\u5b9e\u73b0\u529e\u6cd5\uff0c\u90fd\u662f\u4e0d\u65b9\u4fbf\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u8fd9\u4e2a\u529f\u80fd\u81ea\u8eab\u7684\u7a33\u5b9a\u6027\u5c31\u4e0d\u80fd\u4fdd\u8bc1\uff0c\u800c\u5176\u5b9e\u73b0\u5bf9\u4f7f\u7528\u8005\u6765\u8bf4\u4e5f\u5e76\u4e0d\u8db3\u591f\u7b80\u5355\u900f\u660e\uff0c\u5bfc\u81f4\u4f7f\u7528\u8d77\u6765\u4f1a\u9700\u8981\u627f\u62c5\u5f88\u591a\u4e0d\u786e\u5b9a\u7684\u98ce\u9669\u3002\uff08\u987a\u4fbf\u5410\u69fd\u4e00\u53e5\uff0c\u4f7f\u7528\u8bed\u96c0\u7684\u8fd9\u4e00\u5e74\u6211\u4f53\u611f\u4e0a\u5f71\u54cd\u4f53\u9a8c\u7684 Bug \u662f\u8d8a\u6765\u8d8a\u591a\u4e86\u2026\u2026\uff09

"},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u7528-reveal","title":"\u4e3a\u4ec0\u4e48\u6211\u7528 reveal*","text":"

\u90a3\u4e48\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5236\u4f5c\u300c\u6f14\u793a\u300d\u6750\u6599\u53c8\u600e\u4e48\u6837\u5462\uff1f\u9996\u5148\u662f Beamer\uff0c\u5927\u6982\u4e5f\u662f\u6700\u6709\u540d\u7684\uff0c\u5176\u57fa\u4e8e \\(\\LaTeX\\) \u5b9e\u73b0\uff0c\u5176\u5728\u6392\u7248\u4e0a\u7684\u53ef\u63a7\u6027\u4e0d\u8a00\u800c\u55bb\uff0c\u4f46\u662f\u5199\u8fc7\u7684\u4eba\u90fd\u77e5\u9053 \\(\\LaTeX\\) \u5199\u8d77\u6765\u591a\u8d39\u5fc3\uff1b\u800creveal.js \u4ee5\u53ca nodeppt \u662f\u6211\u627e\u5230\u8fc7\u7684\u4e24\u4e2a\u6bd4\u8f83\u6ee1\u610f\u7684\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5199 Slides \u7684\u5de5\u5177\u3002\u6211\u5e76\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u628a\u4ed6\u4eec\u4e24\u4e2a\u90fd\u8be6\u7ec6\u7684\u4ecb\u7ecd\u4e00\u904d\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u7b80\u5355\u8868\u8fbe\u4e00\u4e0b\u6211\u5bf9\u8fd9\u4e24\u4e2a\u4e1c\u897f\u7684\u770b\u6cd5\u3002

\u9996\u5148\uff0c\u5728\u6211\u7684\u7406\u89e3\u4e2d\uff0cnodeppt \u5bf9\u7f8e\u5316\u662f\u6bd4 reveal.js \u8981\u597d\u4e00\u4e9b\u7684\uff0c\u5373\uff0c\u629b\u5f00\u82b1\u8d39\u5728\u91cc\u9762\u7684\u65f6\u95f4\u4e0d\u8bf4\uff0c\u5c31\u7ed3\u679c\u800c\u8a00\uff0c\u4f7f\u7528 nodeppt \u4f1a\u6bd4 reveal.js \u597d\u770b\u4e00\u4e9b\uff0c\u6392\u7248\u66f4\u81ea\u7531\u4e00\u4e9b\u3002\u4f46\u662f\u4ece\u300c\u6548\u7387\u300d\u6765\u8bf4\uff0c\u6211\u503e\u5411\u4e8e reveal.js\u3002 \u7406\u7531\u5f88\u7b80\u5355\uff0creveal.js \u7684\u5206\u9875\u903b\u8f91\u6df1\u5f97\u6211\u5fc3\uff1a

\u6211\u81ea\u5df1\u5199\u7684\u67d0\u4e2a Slides \u7684\u7ed3\u6784\u901f\u89c8

\u53ef\u4ee5\u53d1\u73b0\uff0c\u9875\u9762\u6709\u7eb5\u5411\u548c\u6a2a\u5411\u4e24\u4e2a\u6269\u5c55\u65b9\u5411\uff0c\u8fd9\u975e\u5e38\u7b26\u5408\u5c42\u6b21\u5316\u7684\u601d\u7ef4\u903b\u8f91\uff0c\u4e5f\u5f88\u7b26\u5408\u6587\u6863\u7684\u7f16\u5199\u903b\u8f91\uff0c\u5e76\u4e14\u603b\u4f53\u800c\u8a00 \u6ca1\u6709\u4ec0\u4e48\u82b1\u91cc\u80e1\u54e8\u4f46\u662f\u6ca1\u5565\u7528\u7684\u4e1c\u897f\uff0c\u5177\u6709\u4e00\u79cd\u5965\u5361\u59c6\u5243\u5200\u7684\u7f8e\u611f\u3002\u7136\u800c\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u5b83\u7684\u7f8e\u5de5\u4e0a\u9650\u5f88\u4f4e\uff0c\u6070\u6070\u76f8\u53cd\uff0c\u4e0d\u4ec5 reveal.js \u7684\u5185\u7f6e\u52a8\u753b\u548c\u98ce\u683c\u5c31\u5f88\u8212\u9002\uff0c\u800c\u4e14\u65e0\u8bba\u662f reveal.js \u8fd8\u662f nodeppt\uff0c\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u9759\u6001\u7f51\u9875\uff0c\u4f60\u5927\u53ef\u4ee5\u7528\u4f60\u7684\u524d\u7aef\u6280\u80fd\u6765\u7f8e\u5316\u5b83\u2014\u2014\u5f53\u7136\uff0c \u5bf9\u6211\u6765\u8bf4\u8fd9\u4e9b\u4e1c\u897f\u5c31\u6ca1\u5565\u5fc5\u8981\u4e86\u3002 \u4ee5\u4e0a\u90fd\u662f\u5173\u4e8e\u6548\u679c\u7684\u53d9\u8ff0\uff0c\u90a3\u5b83\u662f\u5426\u771f\u7684\u5199\u8d77\u6765\u5f88\u65b9\u4fbf\u5462\uff1f\u5176\u5b9e\u6211\u611f\u89c9\u539f\u751f\u7684 reveal.js \u5199\u8d77\u6765\u5e76\u4e0d\u65b9\u4fbf\uff0c\u6211\u4e00\u5f00\u59cb\u751a\u81f3\u4e0d\u77e5\u9053\u8981\u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u6863\u3002\u4f46\u662f\u6211\u540e\u6765\u53d1\u73b0\u4e86[reveal-md](https://github.com/webpro/reveal-md)\u8fd9\u4e2a\u5de5\u5177\u3002\u5229\u7528reveal-md\uff0c\u4f60\u53ef\u4ee5\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5b9e\u73b0\u4f7f\u7528markdown\u8bed\u6cd5\u6765\u5199\u4e00\u4e2a Slides\u3002

"},{"location":"others/reveal-md2Slides/#\u5b89\u88c5\u4e0e\u6f14\u793a","title":"\u5b89\u88c5\u4e0e\u6f14\u793a","text":"

\u786e\u4fdd\u60a8\u7684[npm](https://www.npmjs.com/)\u80fd\u591f\u6b63\u5e38\u4f7f\u7528\uff0c\u63a5\u4e0b\u6765\u5b89\u88c5reveal-md\u4f60\u53ea\u9700\u8981\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5373\u53ef\u3002

npm install -g reveal-md\n

\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f60\u5c31\u53ef\u4ee5\u5c06 reveal-md \u5f53\u4f5c\u4e00\u4e2a console app \u6765\u4f7f\u7528\uff0c\u8f93\u5165 reveal-md --help \u6765\u67e5\u770b\u547d\u4ee4\u8be6\u7ec6\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

help list
Puppeteer unavailable, unable to create featured slide image for OpenGraph metadata.\nPuppeteer unavailable, unable to generate PDF file.\nUsage: cli <slides.md> [options]\n\nSee https://github.com/webpro/reveal-md for more details.\n\nOptions:\n  -V, --version                               output the version number\n      --title <title>                         Title of the presentation\n  -s, --separator <separator>                 Slide separator [default: 3 dashes (---) surrounded by two blank lines]\n-S, --vertical-separator <separator>        Vertical slide separator [default: 4 dashes (----) surrounded by two blank lines]\n-t, --theme <theme>                         Theme [default: black]\n--highlight-theme <theme>               Highlight theme [default: zenburn]\n--css <files>                           CSS files to inject into the page\n      --scripts <files>                       Scripts to inject into the page\n      --assets-dir <dirname>                  Defines assets directory name [default: _assets]\n--preprocessor <script>                 Markdown preprocessor script\n      --template <filename>                   Template file for reveal.js\n      --listing-template <filename>           Template file for listing\n      --glob <pattern>                        Glob pattern to select markdown files for listing and conversion [default: **/*.md]\n--print [filename]                      Print to PDF file\n      --static [dir]                          Export static html to directory [_static]. Incompatible with --print.\n      --static-dirs <dirs>                    Extra directories to copy into static directory. Only used in conjunction with --static.\n  -w, --watch                                 Watch for changes in markdown file and livereload presentation\n      --disable-auto-open                     Disable auto-opening your web browser\n      --host <host>                           Host [default: localhost]\n--port <port>                           Port [default: 1948]\n--featured-slide <num>                  Capture snapshot from this slide (numbering starts from 1) and use it as og:image for static build. Defaults to first slide. Only used with --static.\n      --absolute-url <url>                    Define url used for hosting static build. This is included in OpenGraph metadata. Only used with --static.\n      --print-size                            Paper size to use in exported PDF files\n      --puppeteer-launch-args <args>          Customize how Puppeteer launches Chromium. The arguments are specified as a space separated list (for example --puppeteer-launch-args=\"--no-sandbox --disable-dev-shm-usage\"). Needed for some CI setups.\n      --puppeteer-chromium-executable <path>  Customize which Chromium executable puppeteer will launch. Allows to use a globally installed version of Chromium.\n  -h, --help                                  output usage information\n

\u5728\u6211\u81ea\u5df1\u7684\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ba4\u4e3a\u6bd4\u8f83\u6838\u5fc3\u7684\u4e24\u6761\u547d\u4ee4\u5982\u4e0b\uff1a

## \u6700\u57fa\u7840\u7684\u547d\u4ee4\uff0c\u6839\u636e Markdown \u6587\u4ef6\u5728\u672c\u5730 1948 \u7aef\u53e3\u751f\u6210 Slides \u670d\u52a1\u3002\n$ reveal-md your-md-file.md\n\n## \u4e3a\u4e86\u5b9e\u73b0\u5728\u7ebf\u90e8\u7f72\uff0c\u9700\u8981\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u3002\n$ reveal-md your-md-file.md --static your-static-dir\n

\u4e5f\u5c31\u662f\u8bf4\uff0c\u4f60\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2amd\u6587\u4ef6\uff0c\u5e76\u4f7f\u7528\u8fd9\u4e9b\u6307\u4ee4\u5c31\u80fd\u751f\u6210 reveal.js Slides\u3002 \u63a5\u4e0b\u6765\u4ee5\u5b98\u65b9 demo \u4e3a\u4f8b\u4ecb\u7ecd\u4e00\u4e0b\u4f7f\u7528\u3002\u8fd0\u884c\u6307\u4ee4\u4ee5\u540e\u4f1a\u5728 1948 \u7aef\u53e3\u542f\u52a8\u670d\u52a1\uff0c\u4e00\u822c\u4f1a\u76f4\u63a5\u901a\u8fc7\u6d4f\u89c8\u5668\u6253\u5f00\u3002 \u5728 PC \u7aef\u53e3\uff1a

\u6309 f \u4e4b\u524d\u3002 \u5168\u5c4f\u663e\u793a\u3002

\u800c\u5728\u79fb\u52a8\u7aef\uff08\u6bd4\u5982\u8bbf\u95ee\u67d0\u4e2a\u5b9e\u4f8b\u7684\u5728\u7ebf\u90e8\u7f72\u65f6\uff09\uff0c\u57fa\u672c\u7684\u70b9\u51fb\u64cd\u4f5c\u662f\u4e00\u6837\u7684\uff0c\u6b64\u5916\uff0c\u5e26\u6709\u65b9\u5411\u7684\u6ed1\u52a8\u53ef\u4ee5\u5bf9\u5e94\u65b9\u5411\u952e\u529f\u80fd\u3002

"},{"location":"others/reveal-md2Slides/#\u6587\u6863\u7f16\u5199","title":"\u6587\u6863\u7f16\u5199","text":"

\u5728\u8fd9\u90e8\u5206\uff0c\u6211\u5e76\u4e0d\u6253\u7b97\u6309\u7167\u6a21\u5757\u5316\u3001\u7cfb\u7edf\u5316\u7684\u6d41\u7a0b\u6765\u7f16\u5199\u6559\u7a0b\uff0c\u8fd9\u4e9b\u4f60\u5728\u5b98\u65b9\u6587\u6863\u4e2d\u90fd\u80fd\u627e\u5230\u2014\u2014\u6211\u5e76\u4e0d\u89c9\u5f97\u201c\u5b57\u5178\u201d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u5b66\u4e60\u9014\u5f84\uff0c\u5c31\u50cf\u6211\u4eec\u4e00\u822c\u4e0d\u5efa\u8bae\u7528\u300aC++ Primer\u300b\u5165\u95e8 C++\uff0c\u66f4\u4e0d\u4f1a\u5efa\u8bae\u5916\u56fd\u53cb\u4eba\u901a\u8fc7\u300a\u65b0\u534e\u5b57\u5178\u300b\u6765\u5b66\u4e60\u6c49\u8bed\u3002 \u6211\u5c06\u6309\u7167\u6211\u5bf9\u8fd9\u4e2a\u5de5\u5177\u7684\u7406\u89e3\uff0c\u6309\u7167\u7531\u6d45\u5165\u6df1\uff0c\u6309\u7167\u5fc5\u8981\u7a0b\u5ea6\u6765\u4ecb\u7ecd\u5185\u5bb9\u3002\u5b83\u53ef\u80fd\u770b\u8d77\u6765\u4f1a\u53c8\u4e9b\u6df7\u4e71\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b83\u662f\u7b26\u5408\u5b9e\u8df5\u987a\u5e8f\u7684\uff0c\u5982\u679c\u8ba9\u4f60\u89c9\u5f97\u770b\u8d77\u6765\u5f88\u8d39\u52b2\uff0c\u53ef\u4ee5\u642d\u914d\u5b98\u65b9\u6587\u6863\u6765\u4f7f\u7528\uff0c\u6216\u8005\u76f4\u63a5\u544a\u8bc9\u6211\u3002 \u6b64\u5916\uff0c\u5176\u4e2d\u53ef\u80fd\u4e0d\u4f1a\u6d89\u53ca\u4e00\u90e8\u5206\u6211\u4e2a\u4eba\u4e0d\u592a\u559c\u6b22\u7684\u4e1c\u897f\uff0c\u6bd4\u5982\u540c\u6837\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u548c\u547d\u4ee4\u53c2\u6570\u7684\u884c\u4e3a\uff0c\u6211\u4f1a\u9009\u62e9\u53ea\u4ecb\u7ecd\u914d\u7f6e\u6587\u4ef6\u7684\u65b9\u6848\u3002\u5982\u679c\u4f60\u5bf9\u53e6\u5916\u4e00\u79cd\u65b9\u6848\u611f\u5174\u8da3\uff0c\u53ef\u4ee5\u8be6\u7ec6\u9605\u8bfb\u6587\u6863\u6216\u8005\u5e2e\u52a9\u83dc\u5355\u3002\u6b64\u5916\uff0c\u672c\u6587\u7ae0\u4e5f\u4e0d\u4f1a\u6d89\u53ca reveal-md \u7684\u6240\u6709\u5185\u5bb9\uff0c\u800c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u629b\u7816\u5f15\u7389\u6216\u8005\u8bf4\u57fa\u7840\u4f7f\u7528\u7684\u6559\u7a0b\u3002\u90e8\u5206\u9700\u6c42\u53ef\u80fd\u662f\u9762\u5411\u7279\u6b8a\u7528\u6237\u7fa4\u4f53\u7684\uff0c\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u67e5\u770b\u5b98\u65b9\u6587\u6863\u3002

"},{"location":"others/reveal-md2Slides/#\u5206\u9875","title":"\u5206\u9875","text":"

\u9996\u5148\uff0c\u5982\u679c\u4f60\u7528\u4e00\u4e2a\u518d\u666e\u901a\u4e0d\u8fc7\u7684 Markdown \u6587\u4ef6\u6765\u521b\u5efa Slides\uff0c\u6bd4\u5982\uff1a

## Part 1\n\n### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n### Part 1.2\n\n{code block here}\n\n### Part 1.3\n\n> Everthings seems ok!\n

\u90a3\u4e48\u8fd0\u884c\u4ee5\u540e\u6211\u4eec\u4f1a\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u9875\u9762\uff1a

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u5e76\u4e0d\u50cf\u6211\u4eec\u60f3\u7684\u90a3\u6837\uff0c\u5411\u6a2a\u5411\u548c\u7eb5\u5411\u6269\u5c55\u3002\u4f46\u662f\u8fd9\u6070\u597d\u8bf4\u660e\u6240\u6709\u4e1c\u897f\u90fd\u662f\u53ef\u63a7\u7684\uff0c\u800c\u4e0d\u662f\u83ab\u540d\u5176\u5999\u7684\u6839\u636e\u67d0\u4e2a\u6807\u9898\u5c31\u81ea\u52a8\u6362\u6389\uff0c\u8fdb\u800c\u5bfc\u81f4\u4e00\u7cfb\u5217\u8be1\u5f02\u7684\u95ee\u9898\u3002

\u5728 reveal-md \u4e2d\uff0c\u6709\u4e24\u79cd separator \u548c vertical separator \u4e24\u79cd\uff0c\u987e\u540d\u601d\u4e49\uff0c\u5206\u522b\u5bf9\u5e94\u7740\u5de6\u53f3\u5206\u9875\u548c\u4e0a\u4e0b\u5206\u9875\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cseparator \u662f \\n---\\n\uff0c\u800c vertical separator \u662f \\n----\\n\u3002\u6240\u4ee5\u7a0d\u5fae\u5bf9\u4e0a\u9762\u7684\u6587\u6863\u8fdb\u884c\u4e00\u4e9b\u4fee\u6539\uff1a

### Part 1\n\n---\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n----\n\n#### Part 1.2\n\n{code block here}\n\n----\n\n#### Part 1.3\n\n> Everthings seems ok!\n

\u518d\u6b21\u8fd0\u884c\u5c31\u80fd\u53d1\u73b0\u6211\u4eec\u7684 Slides \u5df2\u7ecf\u6709\u4e86\u4e8c\u7ef4\u7684\u5c42\u7ea7\u7ed3\u6784\uff1a

\u867d\u7136\u8fd9\u91cc\u7684\u9884\u89c8\u56fe\u91cc\u770b\u8d77\u6765\u6392\u7248\u5f88\u4e11\uff0c\u4f46\u662f\u5b9e\u9645\u5c55\u793a\u7684\u65f6\u5019\u90fd\u662f\u9ed8\u8ba4\u5c45\u4e2d\uff0c\u4e0d\u559c\u6b22\u7684\u8bdd\u53ef\u4ee5\u6539\u76f8\u5173\u8bbe\u7f6e\u6216\u8005\u7528 html \u6807\u7b7e\u4fee\u6539\u3002

\u90a3\u4e48\u5176\u5b9e\u5230\u6b64\u4e3a\u6b62\uff0c\u4f60\u5df2\u7ecf\u80fd\u591f\u901a\u8fc7reveal-md\u6765\u5b9e\u73b0\u975e\u5e38\u5feb\u901f\u7684 Slides \u7f16\u5199\u4e86\u3002\u4f46\u662f\u4e3a\u4e86\u5b9a\u5236\u4e3b\u9898\uff0c\u6216\u8005\u662f\u4f7f\u7528\u4e00\u4e9b\u66f4\u9ad8\u7ea7\u7684\u4e1c\u897f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4ecb\u7ecd\u4e00\u4e9b\u522b\u7684\u4e1c\u897f\uff0c\u5305\u62ec\u5bf9\u67d0\u4e9b\u4e1c\u897f\u7684\u81ea\u5b9a\u4e49\u3001\u67d0\u4e9b\u6a21\u5757\u7684\u6269\u5c55\u529f\u80fd\u3001\u4e0e\u539f\u751freveal.js\u8bed\u6cd5\u7684\u6df7\u7528\u3002 \u5728\u6b63\u5f0f\u8fdb\u5165\u4e0b\u4e00\u4e2a\u90e8\u5206\u4e4b\u524d\uff0c\u6211\u60f3\u8865\u5145\u4ecb\u7ecd\u4e00\u4e0b\u5982\u4f55\u4fee\u6539\u9ed8\u8ba4\u7684 separator\uff1a \u6709\u4e24\u79cd\u65b9\u6848\u80fd\u5b9e\u73b0 seperator \u7684\u81ea\u5b9a\u4e49\uff0c\u4e00\u79cd\u662f\u901a\u8fc7\u5728\u547d\u4ee4\u884c\u4e2d\u7684\u9644\u52a0\u53c2\u6570\u5b9e\u73b0\uff0c\u53e6\u4e00\u79cd\u5219\u662f\u5728md\u6587\u4ef6\u5f00\u5934\u5199\u597d\u914d\u7f6e\u6587\u4ef6\u5b9e\u73b0\u3002

---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n

\u8fd9\u91cc\u6211\u624d\u7528\u7b2c\u4e8c\u79cd\u65b9\u6848\u6765\u6539\u88c5\u6211\u4eec\u7684 md \u6587\u4ef6\u73b0\u5728\u5f97\u5230\uff1a

---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n{code block here}\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n

\u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u9664\u4e86\u5f00\u5934\u914d\u7f6e\u6587\u4ef6\u7684\u90e8\u5206\uff0c\u5176\u4ed6\u7684 --- \u5219\u4f1a\u88ab\u8ba4\u4e3a\u662f md \u7684\u8bed\u6cd5\uff0c\u6e32\u67d3\u4e3a\u6b63\u5e38\u7684\u5206\u5272\u7ebf\u3002

"},{"location":"others/reveal-md2Slides/#\u4ee3\u7801\u6846","title":"\u4ee3\u7801\u6846","text":"

\u9996\u5148\uff0c\u5728 reveal-md \u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u548c\u5728 markdown \u4e2d\u4f7f\u7528\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7 reveal.js \u5bf9\u4ee3\u7801\u6846\u6709\u66f4\u591a\u7684\u652f\u6301\uff0c\u800c reveal-md \u5c06\u8fd9\u79cd\u652f\u6301\u878d\u5408\u8fdb\u4e86 markdown \u7684\u8bed\u6cd5\u3002\u6211\u5728\u8fd9\u91cc\u4e3b\u8981\u60f3\u4ecb\u7ecd\u7684\u662f\u4ee3\u7801\u6846\u9ad8\u4eae\u884c\u52a8\u753b\u3002

\u4e0d\u77e5\u9053\u4f60\u6709\u6ca1\u6709\u9047\u5230\u8fc7\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u9700\u8981\u8d34\u51fa\u4e00\u6bb5\u4ee3\u7801\uff0c\u4f46\u662f\u6709\u4e9b\u90e8\u5206\u5e76\u4e0d\u662f\u91cd\u70b9\uff0c\u4f46\u662f\u4e0d\u653e\u4e0a\u53bb\u53c8\u89c9\u5f97\u602a\u602a\u7684\uff1b\u53c8\u6216\u8005\u4f60\u7684\u4ee3\u7801\u91cc\u6709\u591a\u4e2a\u91cd\u70b9\uff0c\u4f60\u9700\u8981\u5728\u5c55\u793a\u65f6\u624b\u52a8\u544a\u8bc9\u5927\u5bb6\u54ea\u91cc\u662f\u91cd\u70b9\uff1freveal* \u53ef\u4ee5\u505a\u5230\u6309\u884c\u9ad8\u4eae\u4ee3\u7801\uff0c\u5e76\u4e14\u80fd\u591f\u5b9e\u73b0\u52a8\u753b\u3002\u8fd9\u4e48\u8bf4\u6709\u70b9\u62bd\u8c61\uff0c\u53ef\u4ee5\u4f53\u9a8c\u4e00\u4e0b\u8fd9\u4e00\u9875 Slide\u3002

\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u4ec5\u9ad8\u4eae\u4e86\uff0c\u800c\u4e14\u8fd8\u6709\u81ea\u52a8\u6eda\u52a8\u5230\u4e2d\u5fc3\u3002

\u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u77e5\u9053\uff0c\u5728Markdown\u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u7684\u8bed\u6cd5\u5982\u4e0b\uff1a

- \u524d\u9762\u7684\u6570\u5b57\u662f\u4e3a\u4e86\u6807\u8bb0\u5b83\u4eec\u5c5e\u4e8e\u4ee3\u7801\u6846\u7684\u7b2c\u51e0\u884c\u800c\u5199\u7684\uff0c\u5b9e\u9645\u4e0d\u9700\u8981\u5199\u8fd9\u4e9b\u6570\u5b57\uff08\u5e9f\u8bdd\uff09\n- \u53cd\u659c\u6760\u662f\u4e3a\u4e86\u9632\u6b62md\u6e32\u67d3\u9519\u8bef\uff0c\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u52a0\n\n\\```cpp\n1       #include <iostream>\n2       int main(){\n3           std::cout << \"Hello World!\\n\";\n4       return 0;\n5       }\n\\```\n

\u90a3\u4e48\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9ad8\u4eae\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u8bed\u8a00\u540e\u9762\u52a0\u4e0a\u4e00\u4e2a\u65b9\u62ec\u53f7 [...] \u6765\u6807\u8bb0\u9ad8\u4eae\u884c\u5373\u53ef\uff0c\u6bd4\u5982 [2-5] \u5c31\u662f\u6807\u8bb0 2\uff5e5 \u884c\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a main() \u51fd\u6570\u3002\u6b64\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u7528|\u6765\u5206\u9694\u591a\u4e2a\u9ad8\u4eae\u5757\uff0c\u6765\u5b9e\u73b0\u52a8\u753b\u7684\u6548\u679c\uff0c\u4f8b\u5982 [1|2-5] \u5c31\u662f\u5148\u9ad8\u4eae\u9884\u7f16\u8bd1\uff0c\u518d\u9ad8\u4eae main() \u51fd\u6570\u3002

---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n\\```cpp[1|2-5]\n#include <iostream>\nint main(){\n    std::cout << \"Hello World!\\n\";\n    return 0;\n}\n\\```\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n
"},{"location":"others/reveal-md2Slides/#\u683c\u5f0f\u652f\u6301","title":"\u683c\u5f0f\u652f\u6301","text":"

\u5728\u6587\u672c\u683c\u5f0f\u6392\u7248\u65b9\u9762\uff0cMarkdown \u7684\u539f\u751f\u8bed\u6cd5\u90fd\u662f\u652f\u6301\u7684\uff0c\u6b64\u5916\u4f60\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 html \u6807\u7b7e\u6765\u7f16\u8f91\u4f60\u7684\u6587\u5b57\uff0c\u4f8b\u5982\u4fee\u6539\u989c\u8272\u3001\u8bbe\u7f6e\u5c45\u4e2d/\u9760\u5de6/\u9760\u53f3\u3001\u4fee\u6539\u5927\u5c0f\u2026\u2026 \u4f8b\u5982\uff0c\u4e0a\u9762\u5c55\u793a\u7684\u90a3\u5f20\u5c55\u793a\u4ee3\u7801\u9ad8\u4eae\u7684 Slide \u7684\u521d\u59cb\u4ee3\u7801\u5982\u4e0b\uff1a

### \u8f93\u51fa\u6d41\n\n\\```c[1-19|13-16]\n#ifndef __C_NEWBIE_HELPER__\n#define __C_NEWBIE_HELPER__\n/****************************************************\n * C Newbie Helper 1.0                              *\n * ------------------------------------------------ *\n * Github Repository Address:                       *\n * - https://github.com/IsshikiHugh/C-Newbie-Helper *\n ****************************************************/\n/*** Config Part ************************************/\n// MODE 0 : Logs will be write to 'CNH_log.txt' file.\n// MODE 1 : Logs will be print to console (colorful for normal terminal).\n// MODE 2 : Logs will be print to console (colorless but fine for CMD).\n#define CNH_MODE 2\n...\n\\```\n\n<font size=\"6\">\n\n- \u5982\u679c\u4f60\u5bf9\u547d\u4ee4\u884c<font color=\"orange\">\u6beb\u65e0\u4e86\u89e3</font>\uff0c\u90a3\u4e48\u8bf7\u68c0\u67e5 <font color=\"cyan\">CNH_MODE</font> \u88ab\u8bbe\u7f6e\u4e3a <font color=\"cyan\">2</font> \uff1b\n- \u5982\u679c\u4f60\u7684\u65e5\u5fd7\u5c06\u4f1a\u88ab\u6253\u5370\u5728\u5e38\u89c4\u7684 <font color=\"orange\">Terminal</font> \u4e0a\uff0c\u90a3\u4e48\u6211\u4eec\u63a8\u8350\u4f60\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">1</font> \uff1b\n- \u5982\u679c\u4f60\u5e0c\u671b\u4f60\u7684\u65e5\u5fd7\u5185\u5bb9\u4e0d\u88ab\u6253\u5370\uff0c\u800c\u662f\u8f93\u51fa\u5230<font color=\"orange\">\u6587\u4ef6</font>\u4e2d\uff0c\u5219\u53ef\u4ee5\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">0</font> \uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0cCNH \u65e0\u6cd5\u6e05\u7a7a\u8f93\u51fa\u6587\u4ef6\uff0c\u8bf7\u5728\u6bcf\u6b21\u8f93\u51fa\u7684\u65f6\u5019\u624b\u52a8\u6e05\u7406 <font color=\"yellow\">CNH_log.txt</font> \uff1b\n\n</font>\n

\u6839\u636e\u6211\u7684\u89c2\u5bdf\uff0c\u5982\u679c\u9700\u8981\u5728html\u6807\u7b7e\u91cc\u4f7f\u7528Markdown\u8bed\u6cd5\uff0c\u6700\u597d\u5728\u6807\u7b7e\u548c\u8bed\u6cd5\u4e4b\u95f4\u52a0\u7a7a\u884c\u3002

"},{"location":"others/reveal-md2Slides/#\u5b9a\u5236\u4e0e\u7f8e\u5316","title":"\u5b9a\u5236\u4e0e\u7f8e\u5316","text":"

\u8fd9\u91cc\u6211\u63d0\u4f9b\u4e00\u4e2a\u6211\u81ea\u5df1\u7684\u6e90md\u6587\u4ef6\u5f00\u5934\u914d\u7f6e\u7684\u6a21\u677f\uff1a

---\ntitle: Title\nseparator: <!--s-->\nverticalSeparator: <!--v-->\ntheme: league\nhighlightTheme: tomorrow-night-bright\nrevealOptions:\n  width: 1520\nheight: 950\nmargin: 0.04\n  transition: 'convex'\nslideNumber: true\n---\n

\u6211\u8fd9\u91cc\u586b\u5199\u7684\u662f\u6211\u81ea\u5df1\u8ba4\u4e3a\u6bd4\u8f83\u8212\u670d\u800c\u4e14\u597d\u770b\u7684\u3002\u5f53\u7136\uff0c\u5982\u679c\u672c\u5730\u5bf9\u5e94\u8d44\u6e90\u6587\u4ef6\u91cc\u6709\u60a8\u81ea\u5df1\u7f16\u5199\u7684\u8d44\u6e90\u4e5f\u662f\u53ef\u4ee5\u7528\u7684\u3002\u4f46\u662f\u8fd9\u4e00\u5757\u6211\u7684\u94bb\u7814\u4e5f\u4e0d\u662f\u7279\u522b\u6df1\uff0c\u6211\u672c\u8eab\u4e5f\u4e0d\u662f\u524d\u7aef\u4eba\uff0c\u6240\u4ee5\u53ea\u80fd\u4ecb\u7ecd\u5230\u8fd9\u91cc\u4e86\u3002

"},{"location":"others/reveal-md2Slides/#\u901a\u8fc7-github-pages-\u5b9e\u73b0\u9759\u6001\u90e8\u7f72","title":"\u901a\u8fc7 GitHub Pages \u5b9e\u73b0\u9759\u6001\u90e8\u7f72","text":"

\u5728\u8fd9\u4e2a\u7ae0\u8282\u4e2d\uff0c\u6211\u5c06\u4ecb\u7ecd\u5982\u4f55\u5229\u7528 GitHub Pages \u5b9e\u73b0 Slides \u7684\u90e8\u7f72\uff0c\u5728\u8bf8\u5982 Gitee Pages \u7684\u5e73\u53f0\u5b9e\u73b0\u8fd9\u4e9b\u529f\u80fd\u7684\u6d41\u7a0b\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002 \u9996\u5148\u4f60\u9700\u8981\u521b\u5efa\u4e00\u4e2a Repo \u6765\u5b58\u653e\u4f60\u7684\u9759\u6001\u8d44\u6e90\uff0c\u4f8b\u5982\u3002\u6211\u4e2a\u4eba\u7684\u505a\u6cd5\u662f\u76f4\u63a5\u628a\u521d\u59cb\u7684 md \u6587\u672c\u548c\u9759\u6001\u8d44\u6e90\u6587\u672c\u90fd\u653e\u5728\u4e00\u4e2a\u5730\u65b9\u4e86\u3002 \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5bfc\u51fa\u9759\u6001\u8d44\u6e90\uff0c\u4f7f\u7528\u7684\u662f\u8fd9\u6761\u6307\u4ee4\uff1a

reveal-md your-md-file.md --static your-static-dir\n

\u63a5\u4e0b\u6765\uff0c\u4f60\u4f1a\u5f97\u5230\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5305\u542b\u8fd9\u4e2a Slides \u6240\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\u3002\u4f60\u53ea\u9700\u8981\u5c06\u5b83\u4f20\u5230\u4f60\u7684 Repo \u91cc\u5373\u53ef\u3002 \u4f8b\u5982\u6211\u7684\u4ed3\u5e93\u4e2d\uff1a

\u8fdb\u5165repo/.../static-dir\uff0c\u4e5f\u5c31\u662f\u4e0a\u56fe\u7684slides\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u4e00\u4e9b\u6587\u4ef6\uff1a

\u5176\u4e2d\u7684 index.html \u548c slides.html \u90fd\u662f Slides \u7684 html \u6587\u4ef6\u3002\u533a\u522b\u8c8c\u4f3c\u662f index.html\u4f1a \u6709\u4e00\u4e2a\u5f39\u7a97\u544a\u8bc9\u4f60\u4f7f\u7528\u7684\u662f reveal.js\u3002

\u63a5\u4e0b\u6765\uff0c\u8bbe\u7f6e pages \u670d\u52a1\u4ee5\u540e\u901a\u8fc7 https://<github_id>.github.io/<repo_name>/.../slides.html \u5373\u53ef\u8bbf\u95ee\u5230\u9875\u9762\u5566\uff01 \u4f8b\u5982\u4e0a\u65b9\u8fd9\u4e2a\u4ed3\u5e93\u5bf9\u5e94\u7684 URL \u662f https://isshikihugh.github.io/myReveal-md/projectsTutorial_CNewbieHelper/slides/slides.html\u3002

\u5229\u7528 Pages \u670d\u52a1\uff0c\u5c31\u53ef\u4ee5\u5feb\u901f\u4fbf\u6377\u5730\u5206\u4eab\u4f60\u7684 Slides\uff0c\u5bf9\u4e8e\u4e0d\u61c2\u6280\u672f\u7684\u4eba\u6765\u8bf4\u4e0d\u4ec5\u8868\u73b0\u6548\u679c\u4e0d\u5dee\uff0c\u800c\u4e14\u8fd8\u6709\u4e00\u4e1d\u903c\u683c\u3002\u4e0d\u8fc7\u5728\u56fd\u5185\u6216\u8bb8\u8bbf\u95ee\u4e0d\u592a\u7a33\u5b9a\uff0c\u6240\u4ee5\u53ef\u4ee5\u8003\u8651\u4f7f\u7528 Gitee Pages \u6765\u5b9e\u73b0\u3002\u4e0d\u8fc7 Gitee Pages \u670d\u52a1\u6bcf\u4e00\u6b21\u90fd\u9700\u8981\u4f60\u81ea\u5df1\u53bb\u66f4\u65b0\u4e00\u4e0b\uff0c\u8fd8\u6709\u4e00\u4e9b\u5ba1\u6838\u673a\u5236\u3002

"},{"location":"others/reveal-md2Slides/#\u4e00\u4e9b\u5751","title":"\u4e00\u4e9b\u5751","text":"

reveal-md \u5df2\u7ecf\u6709\u5927\u6982\u4e00\u5e74\u7684\u65f6\u95f4\u6ca1\u6709\u7ef4\u62a4\u4e86\uff0c\u5176\u4e2d\u4e5f\u9047\u5230\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u9047\u5230\u4e86\u4e00\u4e9b\u5c31\u8bb0\u4e0b\u6765\u3002

"},{"location":"pape_read/","title":"\u6249\u9875","text":"

\u7ea6 31 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u4f60\u4eec\u8981\u52aa\u529b\u8fdb\u7a84\u95e8\uff0c\u56e0\u4e3a\u5bbd\u95e8\u548c\u9614\u8def\u5f15\u5411\u6c89\u6ca6\u3002 \u2014\u2014\u5b89\u5fb7\u70c8\u00b7\u7eaa\u5fb7\u300a\u7a84\u95e8\u300b

"},{"location":"pape_read/ACTOR/","title":"[ACTOR] Action-Conditioned 3D Human Motion Synthesis with Transformer VAE","text":"

\u7ea6 235 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

3DV Human-Motion Action-Control

\u6587\u7ae0\u4fe1\u606f

\u76f8\u5173\u5185\u5bb9

"},{"location":"pape_read/ACTOR/#introduction","title":"Introduction","text":"

In this work, our goal is to take a semantic action label like \u201cThrow\u201d and generate an infinite number of realistic 3D human motion sequences, of varying length, that look like realistic throwing (Figure 1).

\u5e76\u4e14\u53d7\u4f7f\u7528\u573a\u666f\u9650\u5236\uff0c\u5b83\u9700\u8981\u6709\u5f3a\u7ea6\u675f\u4ee5\u53ca\u76f8\u5bf9\u7684\u9ad8\u6548\u6027\u3002

\u6d89\u53ca\u4eba\u4f53\u76ae\u80a4\u8868\u9762\u4e0e\u4e3b\u5ba2\u4f53\u7684\u4ea4\u4e92\uff0c\u6240\u4ee5\u4f7f\u7528 SMPL \u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u9009\u62e9\u3002

noisy 3D body poses

\u540c\u6837\u91c7\u7528 Positional Encoding\uff0c\u8fd9\u4e0e NeRF \u8054\u7cfb\u8d77\u6765\u3002

"},{"location":"pape_read/ACTOR/#related-work","title":"Related Work","text":" \u7591\u60d1

his allows the generation of variable length sequences without the problem of the motions regressing to the mean pose. \u8fd9\u53e5\u8bdd\u662f\u4ec0\u4e48\u610f\u601d\uff1f

Translate

\u7ffb\u8bd1\u5185\u5bb9

"},{"location":"pape_read/ACTOR/trans/","title":"Translate","text":"

\u7ea6 4848 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 16 \u5206\u949f

"},{"location":"pape_read/ACTOR/trans/#abstract","title":"Abstract","text":"

\u6211\u4eec\u89e3\u51b3\u4e86\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u751f\u6210\u903c\u771f\u591a\u6837\u7684\u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\u7684\u95ee\u9898\u3002 \u4e0e\u5b8c\u6210\u6216\u6269\u5c55\u8fd0\u52a8\u5e8f\u5217\u7684\u65b9\u6cd5\u76f8\u6bd4\uff0c\u6b64\u4efb\u52a1\u4e0d\u9700\u8981\u521d\u59cb\u59ff\u52bf\u6216\u5e8f\u5217\u3002 \u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u901a\u8fc7\u8bad\u7ec3\u751f\u6210\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668 (VAE) \u6765\u5b66\u4e60\u4eba\u4f53\u52a8\u4f5c\u7684\u52a8\u4f5c\u611f\u77e5\u6f5c\u5728\u8868\u793a\u3002 \u901a\u8fc7\u4ece\u8fd9\u4e2a\u6f5c\u5728\u7a7a\u95f4\u4e2d\u91c7\u6837\u5e76\u901a\u8fc7\u4e00\u7cfb\u5217\u4f4d\u7f6e\u7f16\u7801\u67e5\u8be2\u67d0\u4e2a\u6301\u7eed\u65f6\u95f4\uff0c\u6211\u4eec\u5408\u6210\u4e86\u4ee5\u5206\u7c7b\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u53ef\u53d8\u957f\u5ea6\u8fd0\u52a8\u5e8f\u5217\u3002 \u5177\u4f53\u6765\u8bf4\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u67b6\u6784 ACTOR\uff0c\u7528\u4e8e\u7f16\u7801\u548c\u89e3\u7801\u4ece\u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6\u4f30\u8ba1\u7684\u4e00\u7cfb\u5217\u53c2\u6570\u5316 SMPL \u4eba\u4f53\u6a21\u578b\u3002 \u6211\u4eec\u5728 NTU RGB+D\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bc4\u4f30\u4e86\u6211\u4eec\u7684\u65b9\u6cd5\uff0c\u5e76\u5c55\u793a\u4e86\u5bf9\u73b0\u6709\u6280\u672f\u7684\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c55\u793a\u4e86\u4e24\u4e2a\u7528\u4f8b\uff1a\u901a\u8fc7\u5c06\u6211\u4eec\u7684\u5408\u6210\u6570\u636e\u6dfb\u52a0\u5230\u8bad\u7ec3\u4e2d\u6765\u6539\u8fdb\u52a8\u4f5c\u8bc6\u522b\uff0c\u4ee5\u53ca\u8fd0\u52a8\u53bb\u566a\u3002 \u4ee3\u7801\u548c\u6a21\u578b\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

"},{"location":"pape_read/ACTOR/trans/#introduction","title":"Introduction","text":"

\u5c3d\u7ba1\u5bf9\u4eba\u4f53\u8fd0\u52a8\u5efa\u6a21\u8fdb\u884c\u4e86\u6570\u5341\u5e74\u7684\u7814\u7a76 [4\u30015]\uff0c\u4f46\u5408\u6210\u903c\u771f\u4e14\u53ef\u63a7\u7684\u5e8f\u5217\u4ecd\u7136\u6781\u5177\u6311\u6218\u6027\u3002 \u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u91c7\u7528\u50cf\u201c\u6295\u63b7\u201d\u8fd9\u6837\u7684\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff0c\u5e76\u751f\u6210\u65e0\u9650\u6570\u91cf\u7684\u903c\u771f 3D \u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\uff0c\u957f\u5ea6\u5404\u4e0d\u76f8\u540c\uff0c\u770b\u8d77\u6765\u50cf\u771f\u5b9e\u7684\u6295\u63b7\uff08\u56fe 1\uff09\u3002\u5927\u91cf\u5148\u524d\u7684\u5de5\u4f5c\u90fd\u96c6\u4e2d\u5728\u91c7\u53d6\u4e00\u4e2a\u59ff\u52bf\u6216\u4e00\u7cfb\u5217\u59ff\u52bf\uff0c\u7136\u540e\u9884\u6d4b\u672a\u6765\u7684\u8fd0\u52a8 [3\u30016\u300122\u300171\u300174]\u3002 \u8fd9\u662f\u4e00\u4e2a\u8fc7\u4e8e\u53d7\u9650\u7684\u573a\u666f\uff0c\u56e0\u4e3a\u5b83\u5047\u8bbe\u5df2\u7ecf\u6709\u4e00\u4e2a\u8fd0\u52a8\u5e8f\u5217\u5e76\u4e14\u53ea\u9700\u8981\u66f4\u591a\u3002 \u53e6\u4e00\u65b9\u9762\uff0c\u8bb8\u591a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u865a\u62df\u73b0\u5b9e\u548c\u89d2\u8272\u63a7\u5236 [28\u300161] \u9700\u8981\u751f\u6210\u5177\u6709\u6307\u5b9a\u6301\u7eed\u65f6\u95f4\u7684\u7ed9\u5b9a\u7c7b\u578b\uff08\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff09\u7684\u52a8\u4f5c\u3002

\u56fe1\uff1a\u76ee\u6807\uff1a\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684 Transformer VAE\uff08ACTOR\uff09\u5b66\u4e60\u5408\u6210\u4ee5\u5206\u7c7b\u52a8\u4f5c\u548c\u6301\u7eed\u65f6\u95f4T\u4e3a\u6761\u4ef6\u7684\u4eba\u7c7b\u8fd0\u52a8\u5e8f\u5217\u3002\u5e8f\u5217\u662f\u901a\u8fc7\u4ece\u5355\u4e00\u7684\u8fd0\u52a8\u8868\u5f81\u6f5c\u4f0f\u5411\u91cfz\u4e2d\u53d6\u6837\u4ea7\u751f\u7684\uff0c\u800c\u4e0d\u662f\u5148\u524d\u5de5\u4f5c\u4e2d\u7684\u6846\u67b6\u7ea7\u5d4c\u5165\u7a7a\u95f4\u3002

\u6211\u4eec\u901a\u8fc7\u4f7f\u7528\u5177\u6709\u76f8\u5e94\u52a8\u4f5c\u6807\u7b7e\u7684 3D \u4eba\u4f53\u8fd0\u52a8\u6570\u636e\u8bad\u7ec3\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u7279\u522b\u662f\uff0c\u6211\u4eec\u6784\u5efa\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u7f16\u7801\u5668-\u89e3\u7801\u5668\u67b6\u6784\uff0c\u5e76\u4f7f\u7528 VAE \u76ee\u6807\u5bf9\u5176\u8fdb\u884c\u8bad\u7ec3\u3002 \u6211\u4eec\u4f7f\u7528 SMPL [46] \u5bf9\u4eba\u4f53\u8fdb\u884c\u53c2\u6570\u5316\uff0c\u56e0\u4e3a\u5b83\u53ef\u4ee5\u8f93\u51fa\u5173\u8282\u4f4d\u7f6e\u6216\u8eab\u4f53\u8868\u9762\u3002 \u8fd9\u4e3a\u66f4\u597d\u5730\u6a21\u62df\u4e0e\u73af\u5883\u7684\u76f8\u4e92\u4f5c\u7528\u94fa\u5e73\u4e86\u9053\u8def\uff0c\u56e0\u4e3a\u8868\u9762\u662f\u6a21\u62df\u63a5\u89e6\u6240\u5fc5\u9700\u7684\u3002 \u6b64\u5916\uff0c\u8fd9\u79cd\u8868\u793a\u5141\u8bb8\u4f7f\u7528\u591a\u79cd\u91cd\u5efa\u635f\u5931\uff1a\u7ea6\u675f\u8fd0\u52a8\u6811\u4e2d\u7684\u96f6\u4ef6\u65cb\u8f6c\u3001\u5173\u8282\u4f4d\u7f6e\u6216\u8868\u9762\u70b9\u3002\u6587\u732e [40] \u548c\u6211\u4eec\u7684\u7ed3\u679c\u8868\u660e\uff0c\u635f\u5931\u7684\u7ec4\u5408\u7ed9\u51fa\u4e86\u6700\u771f\u5b9e\u7684\u751f\u6210\u8fd0\u52a8\u3002

\u8fd0\u52a8\u5408\u6210\u7684\u5173\u952e\u6311\u6218\u662f\u751f\u6210\u5728\u611f\u77e5\u4e0a\u903c\u771f\u7684\u540c\u65f6\u5177\u6709\u591a\u6837\u6027\u7684\u5e8f\u5217\u3002\u8bb8\u591a\u8fd0\u52a8\u751f\u6210\u65b9\u6cd5\u90fd\u91c7\u7528\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u4f8b\u5982 LSTM [16] \u548c GRU [49]\u3002\u7136\u800c\uff0c\u8fd9\u4e9b\u65b9\u6cd5\u901a\u5e38\u4f1a\u5728\u4e00\u6bb5\u65f6\u95f4\u540e\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf [49] \u5e76\u4e14\u5bb9\u6613\u6f02\u79fb\u3002 \u6211\u4eec\u7684 Transformer \u6a21\u578b\u7684\u5173\u952e\u521b\u65b0\u662f\u4e3a\u89e3\u7801\u5668\u63d0\u4f9b\u4f4d\u7f6e\u7f16\u7801\u5e76\u7acb\u5373\u8f93\u51fa\u5b8c\u6574\u5e8f\u5217\u3002 \u6700\u8fd1\u5173\u4e8e\u795e\u7ecf\u8f90\u5c04\u573a\u7684\u5de5\u4f5c\u5df2\u7ecf\u666e\u53ca\u4e86\u4f4d\u7f6e\u7f16\u7801 [50]\uff1b \u6211\u4eec\u8fd8\u6ca1\u6709\u770b\u5230\u5b83\u50cf\u6211\u4eec\u4e00\u6837\u7528\u4e8e\u8fd0\u52a8\u751f\u6210\u3002 \u8fd9\u5141\u8bb8\u751f\u6210\u53ef\u53d8\u957f\u5ea6\u5e8f\u5217\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u8fd0\u52a8\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf\u7684\u95ee\u9898\u3002 \u6b64\u5916\uff0c\u636e\u6211\u4eec\u6240\u77e5\uff0c\u6211\u4eec\u7684\u65b9\u6cd5\u662f\u7b2c\u4e00\u4e2a\u521b\u5efa\u52a8\u4f5c\u6761\u4ef6\u5e8f\u5217\u7ea7\u5d4c\u5165\u7684\u65b9\u6cd5\u3002 \u6700\u63a5\u8fd1\u7684\u5de5\u4f5c\u662f Action2Motion [21]\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5b83\u63d0\u51fa\u4e86\u4e00\u79cd\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u5176\u4e2d\u6f5c\u5728\u8868\u793a\u5904\u4e8e\u5e27\u7ea7\u522b\u3002 \u83b7\u5f97\u5e8f\u5217\u7ea7\u5d4c\u5165\u9700\u8981\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\uff1a\u6211\u4eec\u4e3a\u6b64\u76ee\u7684\u5f15\u5165\u4e86\u4e00\u79cd\u7ed3\u5408 Transformers \u548c VAE \u7684\u65b0\u65b9\u6cd5\uff0c\u8fd9\u4e5f\u663e\u7740\u63d0\u9ad8\u4e86\u57fa\u7ebf\u7684\u6027\u80fd\u3002

\u6211\u4eec\u7684\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u95ee\u9898\u7684\u4e00\u4e2a\u7279\u5b9a\u6311\u6218\u662f\u5b58\u5728\u4e0e\u4e0d\u540c\u52a8\u4f5c\u6807\u7b7e\u914d\u5bf9\u7684\u6709\u9650\u52a8\u4f5c\u6355\u6349 (MoCap) \u6570\u636e\uff0c\u901a\u5e38\u5728 10 \u4e2a\u7c7b\u522b\u4e2d [31\u300163]\u3002 \u76f8\u53cd\uff0c\u6211\u4eec\u4f9d\u9760\u5355\u76ee\u8fd0\u52a8\u4f30\u8ba1\u65b9\u6cd5 [38] \u6765\u83b7\u5f97 3D \u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u5728 UESTC \u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6 [32] \u7684 40 \u4e2a\u7ec6\u7c92\u5ea6\u7c7b\u522b\u4e0a\u5448\u73b0\u6709\u5e0c\u671b\u7684\u7ed3\u679c\u3002 \u4e0e[21]\u76f8\u53cd\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u591a\u89c6\u89d2\u76f8\u673a\u6765\u8fdb\u884c\u5355\u76ee\u8f68\u8ff9\u4f30\u8ba1\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u7684\u6a21\u578b\u53ef\u80fd\u9002\u7528\u4e8e\u66f4\u5927\u7684\u5c3a\u5ea6\u3002 \u5c3d\u7ba1\u6709\u566a\u97f3\uff0c\u5355\u773c\u4f30\u8ba1\u88ab\u8bc1\u660e\u8db3\u4ee5\u7528\u4e8e\u8bad\u7ec3\uff0c\u5e76\u4e14\u4f5c\u4e3a\u6211\u4eec\u6a21\u578b\u7684\u989d\u5916\u597d\u5904\uff0c\u6211\u4eec\u80fd\u591f\u901a\u8fc7\u6211\u4eec\u5b66\u4e60\u7684\u8fd0\u52a8\u8868\u793a\u6765\u7f16\u7801\u89e3\u7801\u53bb\u566a\u4f30\u8ba1\u5e8f\u5217\u3002

\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u53ef\u4ee5\u589e\u5f3a\u73b0\u6709\u7684 MoCap \u6570\u636e\u96c6\uff0c\u8fd9\u4e9b\u6570\u636e\u96c6\u6602\u8d35\u4e14\u5927\u5c0f\u6709\u9650 [48,63]\u3002 \u6700\u8fd1\u7684\u7814\u7a76\u63d0\u4f9b\u4e86\u7528\u4e8e\u8bad\u7ec3\u52a8\u4f5c\u8bc6\u522b\u6a21\u578b\u7684\u5408\u6210\u4eba\u7c7b\u52a8\u4f5c\u89c6\u9891 [65]\uff0c\u663e\u793a\u4e86\u52a8\u4f5c\u591a\u6837\u6027\u548c\u6bcf\u4e2a\u52a8\u4f5c\u7684\u5927\u91cf\u6570\u636e\u7684\u91cd\u8981\u6027\u3002 \u8fd9\u79cd\u65b9\u6cd5\u53ef\u4ee5\u53d7\u76ca\u4e8e\u65e0\u9650\u6e90\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u5408\u6210\u3002 \u6211\u4eec\u901a\u8fc7\u52a8\u4f5c\u8bc6\u522b\u5b9e\u9a8c\u6765\u63a2\u8ba8\u8fd9\u4e2a\u95ee\u9898\u3002 \u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u5c3d\u7ba1\u5b58\u5728 domain gap\uff0c\u4f46\u751f\u6210\u7684\u8fd0\u52a8\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\uff0c\u5c24\u5176\u662f\u5728\u4f4e\u6570\u636e\u8bbe\u7f6e\u4e2d\u3002 \u6700\u540e\uff0c\u7d27\u51d1\u7684\u52a8\u4f5c\u611f\u77e5\u4eba\u4f53\u8fd0\u52a8\u6f5c\u5728\u7a7a\u95f4\u53ef\u4ee5\u7528\u4f5c\u5176\u4ed6\u4efb\u52a1\u7684\u5148\u51b3\u6761\u4ef6\uff0c\u4f8b\u5982\u89c6\u9891\u4e2d\u7684\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002

\u6211\u4eec\u7684\u8d21\u732e\u6709\u56db\u65b9\u9762\uff1a(i) \u6211\u4eec\u4ecb\u7ecd\u4e86 ACTOR\uff0c\u8fd9\u662f\u4e00\u79cd\u65b0\u578b\u7684\u57fa\u4e8e Transformer \u7684\u6761\u4ef6 VAE\uff0c\u5e76\u8bad\u7ec3\u5b83\u901a\u8fc7\u4ece\u5e8f\u5217\u7ea7\u6f5c\u5728\u5411\u91cf\u4e2d\u91c7\u6837\u6765\u751f\u6210\u52a8\u4f5c\u6761\u4ef6\u4eba\u4f53\u8fd0\u52a8\u3002 (ii) \u6211\u4eec\u8bc1\u660e\u53ef\u4ee5\u4f7f\u7528\u4ece\u5355\u773c\u89c6\u9891\u4f30\u8ba1\u7684\u5608\u6742 3D \u4eba\u4f53\u59ff\u52bf\u6765\u5b66\u4e60\u751f\u6210\u903c\u771f\u7684 3D \u4eba\u4f53\u8fd0\u52a8\uff1b (iii) \u6211\u4eec\u5bf9\u67b6\u6784\u548c\u635f\u5931\u7ec4\u4ef6\u8fdb\u884c\u5168\u9762\u7684\u6d88\u878d\u7814\u7a76\uff0c\u5728\u591a\u4e2a\u6570\u636e\u96c6\u4e0a\u83b7\u5f97\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff1b (iv) \u6211\u4eec\u4e3a\u52a8\u4f5c\u8bc6\u522b\u548c MoCap \u53bb\u566a\u6a21\u578b\u8bf4\u660e\u4e86\u4e24\u4e2a\u7528\u4f8b\u3002 \u8be5\u4ee3\u7801\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

"},{"location":"pape_read/ACTOR/trans/#related-work","title":"Related Work","text":"

\u6211\u4eec\u7b80\u8981\u56de\u987e\u4e86\u6709\u5173\u8fd0\u52a8\u9884\u6d4b\u3001\u8fd0\u52a8\u5408\u6210\u3001\u5355\u773c\u8fd0\u52a8\u4f30\u8ba1\u4ee5\u53ca VAE \u80cc\u666f\u4e0b\u7684 Transformers \u7684\u76f8\u5173\u6587\u732e\u3002

\u672a\u6765\u4eba\u4f53\u8fd0\u52a8\u9884\u6d4b\u3002\u4eba\u4f53\u8fd0\u52a8\u5206\u6790\u7684\u7814\u7a76\u5386\u53f2\u60a0\u4e45\uff0c\u53ef\u4ee5\u8ffd\u6eaf\u5230 20 \u4e16\u7eaa 80 \u5e74\u4ee3 [5,17,19,52]\u3002 \u7ed9\u5b9a\u8fc7\u53bb\u7684\u8fd0\u52a8\u6216\u521d\u59cb\u59ff\u52bf\uff0c\u9884\u6d4b\u672a\u6765\u7684\u5e27\u88ab\u79f0\u4e3a\u8fd0\u52a8\u9884\u6d4b\u3002 \u65e9\u671f\u7814\u7a76\u4e2d\u5df2\u7ecf\u91c7\u7528\u4e86\u7edf\u8ba1\u6a21\u578b [7, 18]\u3002 \u6700\u8fd1\uff0c\u968f\u7740 GANs [20] \u6216 VAEs [37] \u7b49\u795e\u7ecf\u7f51\u7edc\u751f\u6210\u6a21\u578b\u7684\u8fdb\u5c55\uff0c\u4e00\u4e9b\u5de5\u4f5c\u663e\u793a\u51fa\u53ef\u559c\u7684\u7ed3\u679c\u3002 \u793a\u4f8b\u5305\u62ec\u7528\u4e8e\u672a\u6765\u8fd0\u52a8\u9884\u6d4b\u7684 HP-GAN [6] \u548c\u5faa\u73af VAE [22]\u3002 \u5927\u591a\u6570\u5de5\u4f5c\u5c06\u8eab\u4f53\u89c6\u4e3a\u9aa8\u67b6\uff0c\u5c3d\u7ba1\u6700\u8fd1\u7684\u5de5\u4f5c\u5229\u7528\u4e86\u5b8c\u6574\u7684 3D \u8eab\u4f53\u5f62\u72b6\u6a21\u578b [3, 74]\u3002 \u4e0e [74] \u7c7b\u4f3c\uff0c\u6211\u4eec\u4e5f\u8d85\u8d8a\u4e86\u7a00\u758f\u5173\u8282\u5e76\u5c06\u9876\u70b9\u5408\u5e76\u5230\u8eab\u4f53\u8868\u9762\u3002 DLow [71] \u4fa7\u91cd\u4e8e\u4ece\u9884\u8bad\u7ec3\u6a21\u578b\u4e2d\u591a\u6837\u5316\u672a\u6765\u8fd0\u52a8\u7684\u91c7\u6837\u3002 [11] \u4f7f\u7528\u5173\u4e8e\u5bf9\u8c61\u4ea4\u4e92\u7684\u4e0a\u4e0b\u6587\u7ebf\u7d22\u6267\u884c\u6709\u6761\u4ef6\u7684\u672a\u6765\u9884\u6d4b\u3002 \u6700\u8fd1\uff0c[42] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e Transformer \u7684\u821e\u8e48\u751f\u6210\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u4ee5\u97f3\u4e50\u548c\u8fc7\u53bb\u7684\u52a8\u4f5c\u4e3a\u6761\u4ef6\u3002 \u6bb5\u7b49\u3002 [14] \u4f7f\u7528\u53d8\u5f62\u91d1\u521a\u5b8c\u6210\u8fd0\u52a8\u3002 \u6709\u4e00\u4e2a\u5173\u4e8e\u8fd0\u52a8\u201c\u4e2d\u95f4\u201d\u7684\u76f8\u5173\u5de5\u4f5c\uff0c\u5b83\u91c7\u7528\u8fc7\u53bb\u548c\u672a\u6765\u7684\u59ff\u52bf\uff0c\u5e76\u201c\u4fee\u590d\u201d\u5b83\u4eec\u4e4b\u95f4\u7684\u5408\u7406\u8fd0\u52a8\uff1b \u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 [23]\u3002 \u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5728\u6ca1\u6709\u4efb\u4f55\u8fc7\u53bb\u89c2\u5bdf\u7684\u60c5\u51b5\u4e0b\u5408\u6210\u8fd0\u52a8\u3002 \u4eba\u4f53\u8fd0\u52a8\u5408\u6210\u3002 \u867d\u7136\u6709\u5927\u91cf\u5173\u4e8e\u672a\u6765\u9884\u6d4b\u7684\u6587\u732e\uff0c\u4f46\u4ece\u5934\u5f00\u59cb\u7efc\u5408\u53d7\u5230\u7684\u5173\u6ce8\u76f8\u5bf9\u8f83\u5c11\u3002 \u975e\u5e38\u65e9\u671f\u7684\u5de5\u4f5c\u4f7f\u7528 PCA [51] \u548c GPLVM [64] \u6765\u5b66\u4e60\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u5faa\u73af\u8fd0\u52a8\u7684\u7edf\u8ba1\u6a21\u578b\u3002 \u5bf9\u591a\u79cd\u591a\u6837\u7684\u52a8\u4f5c\u8fdb\u884c\u6761\u4ef6\u7efc\u5408\u8981\u56f0\u96be\u5f97\u591a\u3002 DVGAN [43] \u8bad\u7ec3\u4e00\u4e2a\u751f\u6210\u6a21\u578b\uff0c\u8be5\u6a21\u578b\u4ee5\u8868\u793a MoCap \u6570\u636e\u96c6\u4e2d\u52a8\u4f5c\u7684\u77ed\u6587\u672c\u4e3a\u6761\u4ef6\uff0c\u4f8b\u5982 Human3.6M [30\u300131] \u548c CMU [63]\u3002 Text2Action [1] \u548c Language2Pose [2] \u540c\u6837\u63a2\u7d22\u4e86\u6839\u636e\u6587\u672c\u63cf\u8ff0\u8c03\u8282\u52a8\u4f5c\u751f\u6210\u3002 Music-to-Dance [39] \u548c [41] \u7814\u7a76\u97f3\u4e50\u6761\u4ef6\u751f\u6210\u3002 QuaterNet [56] \u4fa7\u91cd\u4e8e\u5728\u7ed9\u5b9a\u5730\u9762\u8f68\u8ff9\u548c\u5e73\u5747\u901f\u5ea6\u7684\u60c5\u51b5\u4e0b\u751f\u6210\u884c\u8d70\u548c\u8dd1\u6b65\u7b49\u8fd0\u52a8\u52a8\u4f5c\u3002 [69] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e\u5377\u79ef\u7684\u751f\u6210\u6a21\u578b\uff0c\u7528\u4e8e\u5728\u4e0d\u6307\u5b9a\u52a8\u4f5c\u7684\u60c5\u51b5\u4e0b\u5b9e\u73b0\u903c\u771f\u7684\u4f46\u4e0d\u53d7\u7ea6\u675f\u7684\u8fd0\u52a8\u3002 \u7c7b\u4f3c\u5730\uff0c[73] \u5408\u6210\u4efb\u610f\u5e8f\u5217\uff0c\u5173\u6ce8\u65f6\u95f4\u4e0a\u7684\u65e0\u754c\u8fd0\u52a8\u3002

\u65e0\u7ea6\u675f\u8fd0\u52a8\u5408\u6210\u7684\u8bb8\u591a\u65b9\u6cd5\u5f80\u5f80\u4ee5\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u52a8\u4f5c\u4e3a\u4e3b\u5bfc\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u6211\u4eec\u7684\u6a21\u578b\u80fd\u591f\u4ece\u66f4\u4e00\u822c\u7684\uff0c\u65e0\u5468\u671f\u7684\uff0c\u9884\u5b9a\u4e49\u7684\u884c\u52a8\u7c7b\u522b\uff0c\u4e0e\u884c\u52a8\u8bc6\u522b\u6570\u636e\u96c6\u517c\u5bb9\u7684\u6837\u672c\u3002\u5728\u8fd9\u65b9\u9762\uff0c[75]\u5f15\u5165\u4e86\u8d1d\u53f6\u65af\u65b9\u6cd5\uff0c\u5176\u4e2d\u9690\u85cf\u534a\u9a6c\u5c14\u53ef\u592b\u6a21\u578b\u7528\u4e8e\u8054\u5408\u8bad\u7ec3\u751f\u6210\u6a21\u578b\u548c\u5224\u522b\u6a21\u578b\u3002\u4e0e\u6211\u4eec\u7c7b\u4f3c\uff0c[75]\u8868\u660e\uff0c\u4ed6\u4eec\u751f\u6210\u7684\u52a8\u4f5c\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\u7684\u884c\u52a8\u8bc6\u522b\u3002\u7136\u800c\uff0c\u6839\u636e\u5224\u522b\u5668\u5206\u7c7b\u7ed3\u679c\uff0c\u5b83\u4eec\u751f\u6210\u7684\u5e8f\u5217\u662f\u4f2a\u6807\u8bb0\u7684\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u6211\u4eec\u7684\u6761\u4ef6\u6a21\u578b\u80fd\u591f\u4ee5\u4e00\u79cd\u53d7\u63a7\u7684\u65b9\u5f0f\u5408\u6210\u8fd0\u52a8\uff0c\u4f8b\u5982\u5e73\u8861\u8bad\u7ec3\u96c6\u3002\u4e0e\u6211\u4eec\u7684\u5de5\u4f5c\u6700\u76f8\u4f3c\u7684\u662f Action2Motion [21] \uff0c\u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e GRU \u67b6\u6784\u7684\u6bcf\u5e27\u64cd\u4f5c VAE\u3002\u6211\u4eec\u7684\u5e8f\u5217\u7ea7 VAE \u6f5c\u5728\u7a7a\u95f4\uff0c\u7ed3\u5408\u57fa\u4e8e\u53d8\u538b\u5668\u7684\u8bbe\u8ba1\u63d0\u4f9b\u4e86\u663e\u8457\u7684\u4f18\u52bf\uff0c\u5982\u6211\u4eec\u7684\u5b9e\u9a8c\u6240\u793a\u3002

\u5176\u4ed6\u6700\u8fd1\u7684\u5de5\u4f5c[25,72]\u4f7f\u7528\u89c4\u8303\u5316\u6d41\u6765\u89e3\u51b3\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u548c\u751f\u6210\u95ee\u9898\u3002\u51e0\u4e2a\u4f5c\u54c1[29,36,67]\u5b66\u4e60\u4e00\u4e2a\u8fd0\u52a8\u6d41\u5f62\uff0c\u5e76\u4f7f\u7528\u5b83\u7684\u8fd0\u52a8\u53bb\u566a\uff0c\u8fd9\u662f\u6211\u4eec\u7684\u7528\u4f8b\u4e4b\u4e00\u3002\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u56fe\u5f62\u6587\u732e\u7684\u4e3b\u9898\uff0c\u8fd9\u5f80\u5f80\u96c6\u4e2d\u5728\u52a8\u753b\u5e08\u63a7\u5236\u3002\u770b\uff0c\u4f8b\u5982\uff0c[27]\u5b66\u4e60\u52a8\u4f5c\u5339\u914d\u548c[40]\u89d2\u8272\u52a8\u753b\u3002\u8fd9\u91cc\u6700\u76f8\u5173\u7684\u662f\u76f8\u51fd\u6570\u795e\u7ecf\u7f51\u7edc[28]\u548c\u795e\u7ecf\u72b6\u6001\u673a[61]\u3002\u4e24\u8005\u90fd\u5229\u7528\u4e86\u7531\u6b63\u5f26\u51fd\u6570\u76f8\u4f4d\u9a71\u52a8\u7684\u52a8\u4f5c\u7684\u6982\u5ff5\u3002\u8fd9\u4e0e\u4f4d\u7f6e\u7f16\u7801\u7684\u601d\u60f3\u6709\u5173\uff0c\u4f46\u4e0e\u6211\u4eec\u7684\u65b9\u6cd5\u4e0d\u540c\uff0c\u5b83\u4eec\u7684\u65b9\u6cd5\u9700\u8981\u4eba\u5de5\u5206\u5272\u64cd\u4f5c\u5e76\u6784\u5efa\u8fd9\u4e9b\u76f8\u51fd\u6570\u3002

\u5355\u76ee\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002\u6765\u81ea\u89c6\u9891\u7684\u8fd0\u52a8\u4f30\u8ba1[35,38,47]\u6700\u8fd1\u53d6\u5f97\u4e86\u91cd\u5927\u8fdb\u5c55\uff0c\u4f46\u8d85\u51fa\u4e86\u6211\u4eec\u7684\u8303\u56f4\u3002\u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u91c7\u7528 VIBE [38]\u4ece\u52a8\u4f5c\u6807\u8bb0\u7684\u89c6\u9891\u6570\u636e\u96c6\u4e2d\u83b7\u5f97\u8bad\u7ec3\u8fd0\u52a8\u5e8f\u5217\u3002

Transformer VAE\u3002Transformer \u6700\u8fd1\u5728\u8bed\u8a00\u4efb\u52a1\u65b9\u9762\u53d6\u5f97\u7684\u6210\u529f\u589e\u52a0\u4e86\u4eba\u4eec\u5bf9\u57fa\u4e8e\u6ce8\u610f\u529b\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u5174\u8da3\u3002\u4e00\u4e9b\u5de5\u7a0b\u4f7f\u7528\u53d8\u538b\u5668\u7ed3\u5408\u751f\u6210 VAE \u57f9\u8bad\u3002\u5177\u4f53\u7684\u4f8b\u5b50\u5305\u62ec\u6545\u4e8b\u751f\u6210[15] \uff0c\u60c5\u611f\u5206\u6790[10] \uff0c\u53cd\u5e94\u751f\u6210[44]\u548c\u97f3\u4e50\u751f\u6210[33]\u3002[33]\u7684\u5de5\u4f5c\u5b66\u4e60\u6bcf\u4e2a\u65f6\u95f4\u6846\u67b6\u7684\u6f5c\u5728\u5d4c\u5165\uff0c\u800c[10]\u5e73\u5747\u7684\u9690\u85cf\u72b6\u6001\uff0c\u4ee5\u83b7\u5f97\u4e00\u4e2a\u5355\u4e00\u7684\u6f5c\u5728\u4ee3\u7801\u3002\u53e6\u4e00\u65b9\u9762\uff0c[15]\u6267\u884c\u6ce8\u610f\u529b\u5e73\u5747\u6c60\u968f\u7740\u65f6\u95f4\u7684\u63a8\u79fb\u3002\u4e0e\u8fd9\u4e9b\u5de5\u4f5c\u76f8\u53cd\uff0c\u6211\u4eec\u91c7\u7528\u53ef\u5b66\u4e60\u7684\u6807\u8bb0\uff0c\u5982[12,13]\u4e2d\u6240\u793a\uff0c\u5c06\u8f93\u5165\u603b\u7ed3\u4e3a\u5e8f\u5217\u7ea7\u5d4c\u5165\u3002

\u56fe2\uff1a\u65b9\u6cd5\u6982\u8ff0\u3002\u6211\u4eec\u8bf4\u660e\u4e86\u6211\u4eec\u57fa\u4e8eTransformer\u7684VAE\u6a21\u578b\u7684\u7f16\u7801\u5668\uff08\u5de6\uff09\u548c\u89e3\u7801\u5668\uff08\u53f3\uff09\uff0c\u8be5\u6a21\u578b\u751f\u6210\u4e86\u52a8\u4f5c\u6761\u4ef6\u7684\u8fd0\u52a8\u3002\u7ed9\u5b9a\u4e00\u4e32\u8eab\u4f53\u59ff\u52bfP1, ... , PT\u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7ea\uff0c\u7f16\u7801\u5668\u8f93\u51fa\u5206\u5e03\u53c2\u6570\uff0c\u6211\u4eec\u5728\u6b64\u57fa\u7840\u4e0a\u5b9a\u4e49KL\u635f\u5931\uff08LKL\uff09\u3002\u6211\u4eec\u4f7f\u7528\u6bcf\u4e2a\u52a8\u4f5c\u7684\u989d\u5916\u53ef\u5b66\u4e60\u6807\u8bb0\uff08\u00b5 token a \u548c \u03a3 token a \uff09\u4f5c\u4e3a\u4eceTransformer\u7f16\u7801\u5668\u83b7\u5f97\u00b5\u548c\u03a3\u7684\u65b9\u6cd5\u3002\u4f7f\u7528\u00b5\u548c\u03a3\uff0c\u6211\u4eec\u5bf9\u8fd0\u52a8\u7684\u6f5c\u5728\u8868\u5f81z\u2208M\u8fdb\u884c\u91c7\u6837\u3002\u89e3\u7801\u5668\u5c06\u6f5c\u4f0f\u5411\u91cfz\u3001\u52a8\u4f5c\u6807\u7b7ea\u548c\u6301\u7eed\u65f6\u95f4T\u4f5c\u4e3a\u8f93\u5165\u3002\u884c\u52a8\u51b3\u5b9a\u4e86\u53ef\u5b66\u4e60\u7684b\u6807\u8bb0a\u52a0\u6cd5\u6807\u8bb0\uff0c\u6301\u7eed\u65f6\u95f4\u51b3\u5b9a\u4e86\u8f93\u5165\u5230\u89e3\u7801\u5668\u7684\u4f4d\u7f6e\u7f16\u7801\uff08PE\uff09\u7684\u6570\u91cf\u3002\u89e3\u7801\u5668\u8f93\u51fa\u6574\u4e2a\u5e8f\u5217Pb1, . . . , PbT\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8ba1\u7b97\u91cd\u5efa\u635f\u5931LP\u3002\u6b64\u5916\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u53ef\u5fae\u5206\u7684SMPL\u5c42\u8ba1\u7b97\u9876\u70b9\uff0c\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u9876\u70b9\u635f\u5931\uff08LV \uff09\u3002\u5bf9\u4e8e\u8bad\u7ec3\u6765\u8bf4\uff0cz\u662f\u4f5c\u4e3a\u7f16\u7801\u5668\u7684\u8f93\u51fa\u5f97\u5230\u7684\uff1b\u5bf9\u4e8e\u751f\u6210\u6765\u8bf4\uff0c\u5b83\u662f\u4ece\u9ad8\u65af\u5206\u5e03\u4e2d\u968f\u673a\u62bd\u53d6\u7684\u3002

"},{"location":"pape_read/ACTOR/trans/#action-conditioned-motion-generation","title":"Action-Conditioned Motion Generation","text":"

\u95ee\u9898\u5b9a\u4e49\u3002\u8eab\u4f53\u8fd0\u52a8\u6240\u5b9a\u4e49\u7684\u52a8\u4f5c\u53ef\u4ee5\u662f\u8eab\u4f53\u90e8\u4f4d\u7684\u65cb\u8f6c\u62e5\u6709\u5c5e\u6027\uff0c\u4e0e\u8eab\u4efd\u7279\u5b9a\u7684\u8eab\u4f53\u5f62\u72b6\u65e0\u5173\u3002\u4e3a\u4e86\u80fd\u591f\u4ea7\u751f\u4e0e\u4e0d\u540c\u5f62\u6001\u7684\u884c\u4e3a\u8005\u7684\u8fd0\u52a8\uff0c\u8fd9\u662f\u7406\u60f3\u7684\u5206\u79bb\u59ff\u52bf\u548c\u5f62\u72b6\u3002\u56e0\u6b64\uff0c\u4e0d\u5931\u4e00\u822c\u6027\uff0c\u6211\u4eec\u91c7\u7528\u4e86 SMPL \u8eab\u4f53\u6a21\u578b[46] \uff0c\u8fd9\u662f\u4e00\u4e2a\u5206\u79bb\u7684\u8eab\u4f53\u8868\u793a(\u7c7b\u4f3c\u4e8e\u6700\u8fd1\u7684\u6a21\u578b[53,55,58,68])\u3002\u5ffd\u7565\u5f62\u72b6\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u751f\u6210\u4e00\u7cfb\u5217\u7684\u59ff\u6001\u53c2\u6570\u3002\u66f4\u6b63\u5f0f\u5730\u8bf4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a (\u6765\u81ea\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u52a8\u4f5c\u8303\u7574 a \u2208 A)\u548c\u4e00\u4e2a\u6301\u7eed\u65f6\u95f4 T\uff0c\u6211\u4eec\u751f\u6210\u4e00\u4e2a\u4f53\u6784\u6210\u7684\u5e8f\u5217 R1\uff0c... \uff0cRT \u548c\u4e00\u4e2a\u6839\u5173\u8282\u7684\u5e73\u79fb\u5e8f\u5217\u8868\u793a\u4e3a\u4f4d\u79fb\uff0cD1\uff0c... \uff0cDT (\u4e0e DT \u2208 R3\uff0csomething t \u2208{1\uff0c... \uff0cT })

\u52a8\u4f5c\u8868\u73b0\u6cd5\u3002\u6bcf\u5e27 SMPL \u59ff\u6001\u53c2\u6570\u8868\u793a\u8fd0\u52a8\u5b66\u6811\u4e2d\u768423\u4e2a\u5173\u8282\u65cb\u8f6c\u548c\u4e00\u4e2a\u5168\u5c40\u65cb\u8f6c\u3002\u91c7\u7528\u8fde\u7eed6D \u65cb\u8f6c\u8868\u793a\u6cd5\u8fdb\u884c\u8bad\u7ec3[76] \uff0c\u4f7f Rt \u2208 R24 \u00d7 6\u3002\u8bbe Pt \u662f Rt \u548c Dt \u7684\u7ec4\u5408\uff0c\u8868\u793a\u5355\u5e27\u4e2d\u8eab\u4f53\u7684\u59ff\u52bf\u548c\u4f4d\u7f6e t\u3002\u5b8c\u6574\u7684\u52a8\u4f5c\u662f P1\uff0c. . \uff0cPT\u3002\u7ed9\u5b9a\u4e00\u4e2a\u751f\u6210\u5668\u8f93\u51fa\u4f4d\u59ff Pt \u548c\u4efb\u610f\u5f62\u72b6\u53c2\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u7528[46]\u53ef\u5fae\u5730\u5f97\u5230\u4f53\u7f51\u683c\u9876\u70b9(Vt)\u548c\u4f53\u5173\u8282\u5750\u6807(Jt)\u3002

"},{"location":"pape_read/ACTOR/trans/#conditional-transformer-vae-for-motions","title":"Conditional Transformer VAE for Motions","text":"

\u6211\u4eec\u91c7\u7528\u6761\u4ef6\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668(CVAE)\u6a21\u578b[60] \uff0c\u5e76\u5c06\u52a8\u4f5c\u7c7b\u522b\u4fe1\u606f\u8f93\u5165\u5230\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u3002\u66f4\u5177\u4f53\u5730\u8bf4\uff0c\u6211\u4eec\u7684\u6a21\u578b\u662f\u4e00\u4e2a\u52a8\u4f5c\u6761\u4ef6\u53d8\u538b\u5668 VAE (ACTOR) \uff0c\u5176\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u7531\u53d8\u538b\u5668\u5c42\u7ec4\u6210(\u53c2\u89c1\u56fe2\u4ee5\u83b7\u5f97\u6982\u8ff0)\u3002

\u7f16\u7801\u5668\u3002\u8be5\u7f16\u7801\u5668\u91c7\u7528\u4efb\u610f\u957f\u5ea6\u7684\u59ff\u6001\u5e8f\u5217\uff0c\u4ee5\u52a8\u4f5c\u6807\u7b7e a \u4e3a\u8f93\u5165\uff0c\u8f93\u51fa\u8fd0\u52a8\u6f5c\u4f0f\u7a7a\u95f4\u7684\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3\u3002\u5229\u7528\u91cd\u53c2\u6570\u5316\u6280\u5de7[37] \uff0c\u6211\u4eec\u4ece\u8fd9\u4e2a\u5206\u5e03\u4e2d\u62bd\u6837\u51fa\u4e00\u4e2a\u6f5c\u5411\u91cf z \u2208 M\uff0c\u5176\u4e2d MdRd\u3002\u9996\u5148\u5c06\u6240\u6709\u8f93\u5165\u59ff\u6001\u53c2\u6570(R)\u548c\u5e73\u79fb(D)\u7ebf\u6027\u5d4c\u5165\u5230 Rd \u7a7a\u95f4\u4e2d\u3002\u5f53\u6211\u4eec\u5c06\u4efb\u610f\u957f\u5ea6\u7684\u5e8f\u5217\u5d4c\u5165\u5230\u4e00\u4e2a\u6f5c\u5728\u7a7a\u95f4(\u5e8f\u5217\u7ea7\u5d4c\u5165)\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5408\u5e76\u65f6\u95f4\u7ef4\u6570\u3002\u5728\u5176\u4ed6\u9886\u57df\u4e2d\uff0c\u5df2\u7ecf\u5f15\u5165\u4e86[\u7c7b]\u4ee4\u724c\u7528\u4e8e\u6c60\u7684\u76ee\u7684\uff0c\u4f8b\u5982\uff0c\u5728\u5e26\u6709 BERT [12]\u7684 NLP \u4e2d\uff0c\u4ee5\u53ca\u6700\u8fd1\u5728\u5e26\u6709 ViT [13]\u7684\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u3002\u53d7\u6b64\u65b9\u6cd5\u7684\u542f\u53d1\uff0c\u6211\u4eec\u7c7b\u4f3c\u5730\u5728\u8f93\u5165\u524d\u9762\u52a0\u4e0a\u53ef\u5b66\u4e60\u7684\u4ee4\u724c\uff0c\u5e76\u4e14\u53ea\u4f7f\u7528\u76f8\u5e94\u7684\u7f16\u7801\u5668\u8f93\u51fa\u4f5c\u4e3a\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\u7684\u65b9\u6cd5\u3002\u4e3a\u6b64\uff0c\u6211\u4eec\u5728\u6bcf\u4e2a\u64cd\u4f5c\u4e2d\u5305\u62ec\u4e24\u4e2a\u989d\u5916\u7684\u53ef\u5b66\u4e60\u53c2\u6570: \u03bc \u6807\u8bb0 a \u548c \u03a3 \u6807\u8bb0 a\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u201c\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u201d\u3002\u6211\u4eec\u5c06\u5d4c\u5165\u7684\u59ff\u52bf\u5e8f\u5217\u9644\u52a0\u5230\u8fd9\u4e9b\u6807\u8bb0\u3002\u4ea7\u751f\u7684\u53d8\u538b\u5668\u7f16\u7801\u5668\u8f93\u5165\u662f\u4f4d\u7f6e\u7f16\u7801\u7684\u6b63\u5f26\u51fd\u6570\u5f62\u5f0f\u7684\u603b\u548c\u3002\u6211\u4eec\u901a\u8fc7\u53d6\u7f16\u7801\u5668\u7684\u524d\u4e24\u4e2a\u8f93\u51fa\u5bf9\u5e94\u4e8e\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u6765\u83b7\u5f97\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3 (\u5373\u53bb\u6389\u5176\u4f59\u7684\u6807\u8bb0)\u3002\u89e3\u7801\u5668\u3002\u7ed9\u5b9a\u4e00\u4e2a\u6f5c\u5728\u5411\u91cf z \u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a\uff0c\u89e3\u7801\u5668\u5728\u4e00\u6b21\u62cd\u6444\u4e2d\u5728\u7ed9\u5b9a\u7684\u6301\u7eed\u65f6\u95f4\u5185\u751f\u6210\u4e00\u4e2a\u771f\u5b9e\u7684\u4eba\u4f53\u8fd0\u52a8(\u5373\uff0c\u4e0d\u662f\u81ea\u56de\u5f52)\u3002\u6211\u4eec\u4f7f\u7528\u53d8\u538b\u5668\u89e3\u7801\u5668\u6a21\u578b\uff0c\u5176\u4e2d\u6211\u4eec\u63d0\u4f9b\u7684\u65f6\u95f4\u4fe1\u606f\u4f5c\u4e3a\u4e00\u4e2a\u67e5\u8be2(\u5728 T \u6b63\u5f26\u4f4d\u7f6e\u7f16\u7801\u7684\u5f62\u5f0f) \uff0c\u548c\u6f5c\u5728\u7684\u5411\u91cf\u7ed3\u5408\u7684\u884c\u52a8\u4fe1\u606f\uff0c\u4f5c\u4e3a\u5173\u952e\u548c\u503c\u3002\u4e3a\u4e86\u5408\u5e76\u52a8\u4f5c\u4fe1\u606f\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6dfb\u52a0\u4e00\u4e2a\u53ef\u5b66\u4e60\u7684\u504f\u89c1 b \u6807\u8bb0 a \u6765\u5c06\u6f5c\u5728\u8868\u5f81\u8f6c\u79fb\u5230\u4e00\u4e2a\u52a8\u4f5c\u4f9d\u8d56\u7684\u7a7a\u95f4\u3002\u53d8\u538b\u5668\u89e3\u7801\u5668\u8f93\u51fa\u4e00\u7cfb\u5217\u7684 T \u77e2\u91cf\uff0c\u4ece\u4e2d\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684 Pb1\uff0c. . \uff0cPbT \u7684\u7ebf\u6027\u6295\u5f71\u3002\u5229\u7528\u53ef\u5fae SMPL \u5c42\u83b7\u5f97\u7ed9\u5b9a\u7684\u4f4d\u59ff\u53c2\u6570\u4f5c\u4e3a\u89e3\u7801\u5668\u8f93\u51fa\u7684\u9876\u70b9\u548c\u5173\u8282\u3002

"},{"location":"pape_read/ACTOR/trans/#training","title":"Training","text":"

\u6211\u4eec\u5b9a\u4e49\u4e86\u51e0\u4e2a\u635f\u5931\u9879\u6765\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b\uff0c\u5e76\u5728\u7b2c 4.2 \u8282\u4e2d\u8fdb\u884c\u4e86\u6d88\u878d\u7814\u7a76\u3002 \u59ff\u52bf\u53c2\u6570 (LP) \u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5728\u5730\u9762\u5b9e\u51b5\u59ff\u52bf P1,... \u4e4b\u95f4\u4f7f\u7528 L2 \u635f\u5931\u3002 . . , PT \u548c\u6211\u4eec\u7684\u9884\u6d4b Pb1, . . . , PbT \u4f5c\u4e3a LP = PT t=1\u2225Pt \u2212 Pbt\u2225 2 2 \u3002 \u8bf7\u6ce8\u610f\uff0c\u6b64\u635f\u5931\u5305\u542b SMPL \u65cb\u8f6c\u548c\u6839\u5e73\u79fb\u3002 \u5f53\u6211\u4eec\u901a\u8fc7\u4e22\u5f03\u5e73\u79fb\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u672f\u8bed\u5206\u6210\u4e24\u90e8\u5206\uff1aLR \u548c LD\uff0c\u5206\u522b\u7528\u4e8e\u65cb\u8f6c\u548c\u5e73\u79fb\u3002

\u9876\u70b9\u5750\u6807 (LV) \u4e0a\u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5c06 SMPL \u59ff\u52bf Pt \u548c Pbt \u9988\u9001\u5230\u5177\u6709\u5e73\u5747\u5f62\u72b6\uff08\u5373 \u03b2 = \u20d70\uff09\u7684\u53ef\u5fae\u5206 SMPL \u5c42\uff08\u6ca1\u6709\u53ef\u5b66\u4e60\u53c2\u6570\uff09\u4ee5\u83b7\u5f97\u7f51\u683c Vt \u548c Vbt \u7684\u6839\u4e2d\u5fc3\u9876\u70b9\u3002 \u6211\u4eec\u901a\u8fc7\u4e0e\u5730\u9762\u5b9e\u51b5\u9876\u70b9 Vt \u6bd4\u8f83\u6765\u5b9a\u4e49 L2 \u635f\u5931\uff0c\u5373 LV = PT t=1\u2225Vt \u2212 Vbt\u2225 2 2 \u3002 \u6211\u4eec\u8fdb\u4e00\u6b65\u5728\u4e00\u7ec4\u66f4\u7a00\u758f\u7684\u70b9\u4e0a\u4f7f\u7528\u635f\u5931 LJ \u8fdb\u884c\u5b9e\u9a8c\uff0c\u4f8b\u5982\u901a\u8fc7 SMPL \u8054\u5408\u56de\u5f52\u5668\u83b7\u5f97\u7684\u8054\u5408\u4f4d\u7f6e Jbt\u3002 \u7136\u800c\uff0c\u6b63\u5982\u7b2c 4.2 \u8282\u6240\u793a\uff0c\u6211\u4eec\u6ca1\u6709\u5728\u6700\u7ec8\u6a21\u578b\u4e2d\u5305\u542b\u8be5\u672f\u8bed\u3002 KL\u635f\u5931\uff08LKL\uff09\u3002 \u4e0e\u6807\u51c6 VAE \u4e00\u6837\uff0c\u6211\u4eec\u901a\u8fc7\u9f13\u52b1\u6f5c\u5728\u7a7a\u95f4\u7c7b\u4f3c\u4e8e\u9ad8\u65af\u5206\u5e03\u6765\u89c4\u8303\u5316\u6f5c\u5728\u7a7a\u95f4\uff0c\u5176\u4e2d \u00b5 \u662f\u7a7a\u5411\u91cf\uff0c\u03a3 \u662f\u8eab\u4efd\u77e9\u9635\u3002 \u6211\u4eec\u6700\u5c0f\u5316\u7f16\u7801\u5668\u5206\u5e03\u548c\u8be5\u76ee\u6807\u5206\u5e03\u4e4b\u95f4\u7684 Kullback\u2013Leibler (KL) \u6563\u5ea6\u3002 \u7531\u6b64\u4ea7\u751f\u7684\u603b\u635f\u5931\u88ab\u5b9a\u4e49\u4e3a\u4e0d\u540c\u9879\u7684\u603b\u548c\uff1aL = LP + LV + \u03bbKLLKL\u3002 \u6211\u4eec\u51ed\u7ecf\u9a8c\u8bc1\u660e\u4e86\u5728\u6211\u4eec\u7684\u5b9e\u9a8c\u4e2d\u4f7f\u7528 \u03bbKL\uff08\u76f8\u5f53\u4e8e \u03b2-VAE [26] \u4e2d\u7684 \u03b2 \u9879\uff09\u8fdb\u884c\u52a0\u6743\u4ee5\u83b7\u5f97\u591a\u6837\u6027\u548c\u73b0\u5b9e\u4e3b\u4e49\u4e4b\u95f4\u7684\u826f\u597d\u6743\u8861\u7684\u91cd\u8981\u6027\uff08\u53c2\u89c1\u9644\u5f55 A.1 \u8282\uff09 ). \u5269\u4f59\u7684\u635f\u5931\u9879\u53ea\u662f\u7b80\u5355\u5730\u540c\u7b49\u52a0\u6743\uff0c\u901a\u8fc7\u8c03\u6574\u53ef\u80fd\u4f1a\u8fdb\u4e00\u6b65\u6539\u8fdb\u3002 \u6211\u4eec\u4f7f\u7528\u56fa\u5b9a\u5b66\u4e60\u7387\u4e3a 0.0001 \u7684 AdamW \u4f18\u5316\u5668\u3002 \u5c0f\u6279\u91cf\u5927\u5c0f\u8bbe\u7f6e\u4e3a 20\uff0c\u6211\u4eec\u53d1\u73b0\u6027\u80fd\u5bf9\u8fd9\u4e2a\u8d85\u53c2\u6570\u5f88\u654f\u611f\uff08\u53c2\u89c1\u9644\u5f55 A.2 \u8282\uff09\u3002 \u6211\u4eec\u5206\u522b\u5728 NTU-13\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b 2000\u30015000 \u548c 1000 \u4e2a\u65f6\u671f\u3002 \u603b\u7684\u6765\u8bf4\uff0c\u66f4\u591a\u7684\u65f6\u671f\u4f1a\u4ea7\u751f\u66f4\u597d\u7684\u6027\u80fd\uff0c\u4f46\u6211\u4eec\u505c\u6b62\u8bad\u7ec3\u4ee5\u4fdd\u6301\u8f83\u4f4e\u7684\u8ba1\u7b97\u6210\u672c\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e3a\u4e86\u5141\u8bb8\u66f4\u5feb\u7684\u8fed\u4ee3\u3001\u635f\u5931\u548c\u67b6\u6784\u7684\u6d88\u878d\uff0c\u6211\u4eec\u5728 NTU-13 \u4e0a\u8bad\u7ec3\u4e86 1000 \u4e2a epoch\uff0c\u5728 UESTC \u4e0a\u8bad\u7ec3\u4e86 500 \u4e2a epoch\u3002 \u5176\u4f59\u7684\u5b9e\u65bd\u7ec6\u8282\u53ef\u4ee5\u5728\u9644\u5f55\u7684 C \u8282\u4e2d\u627e\u5230\u3002

"},{"location":"pape_read/ACTOR/trans/#experiments","title":"Experiments","text":"

\u6682\u7565

"},{"location":"pape_read/ACTOR/trans/#conclusions","title":"Conclusions","text":"

\u6211\u4eec\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u57fa\u4e8e Transformer \u7684 VAE \u6a21\u578b\u6765\u5408\u6210\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u4eba\u4f53\u8fd0\u52a8\u3002\u6211\u4eec\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u5206\u6790\u6765\u8bc4\u4f30\u6211\u4eec\u63d0\u8bae\u7684\u65b9\u6cd5\u7684\u4e0d\u540c\u7ec4\u6210\u90e8\u5206\u3002 \u6211\u4eec\u5728\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u751f\u6210\u65b9\u9762\u83b7\u5f97\u4e86\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff0c\u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\u6709\u4e86\u663e\u7740\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u63a2\u7d22\u4e86\u8fd0\u52a8\u53bb\u566a\u548c\u52a8\u4f5c\u8bc6\u522b\u4e2d\u7684\u5404\u79cd\u7528\u4f8b\u3002 \u6211\u4eec\u65b9\u6cd5\u7684\u4e00\u4e2a\u7279\u522b\u5438\u5f15\u4eba\u7684\u7279\u6027\u662f\u5b83\u5728\u5e8f\u5217\u7ea7\u6f5c\u5728\u7a7a\u95f4\u4e0a\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u672a\u6765\u7684\u5de5\u4f5c\u53ef\u4ee5\u5229\u7528\u6211\u4eec\u7684\u6a21\u578b\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u6216\u52a8\u4f5c\u8bc6\u522b\u95ee\u9898\u65bd\u52a0\u5148\u9a8c\u3002

"},{"location":"pape_read/EG3D/","title":"[EG3D] Efficient Geometry-aware 3D Generative Adversarial Networks","text":"

\u7ea6 479 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

3DV Generation

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/EG3D/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/EG3D/#tri-plane-hybrid-3d-representation","title":"Tri-plane hybrid 3D representation","text":"

\u8ba8\u8bba\u4e00\u4e0b NeRF \u548c Tri-plane hybrid 3D representation \u7684\u5173\u7cfb\u3002

NeRF \u6309 ray \u4f53\u79ef\u6e32\u67d3\u8fc7\u7a0b\u4e2d\u91c7\u6837\u7684\u70b9\u4ece\u8bad\u7ec3\u597d\u7684 MLP \u91cc\u62ff\uff1b\u800c EG3D \u5219\u662f\u5f97\u5230\u4e09\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\uff0c\u6bcf\u4e00\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\u90fd\u662f\u6cbf\u7740\u6d88\u5931\u7684\u90a3\u4e2a\u7ef4\u5ea6\u805a\u5408\u5f97\u5230\u7684\uff0c\u53ef\u4ee5\u770b\u4f5c\u662f\u62ff\u5230\u4e86\u7a7a\u95f4\u4e2d\u4e09\u6761\u6b63\u4ea4\u7684\u7ebf\u7684\u7279\u5f81\uff0c\u800c\u4e4b\u540e\u7528\u4e00\u4e2a\u8f7b\u91cf MLP \u53bb\u4ece\u8fd9\u4e09\u4e2a\u7279\u5f81\u5411\u91cf\u91cc\u628a\u8fd9\u4e2a\u70b9\u7684\u989c\u8272\u5bc6\u5ea6\u62ff\u51fa\u6765\uff0c\u7c7b\u4f3c\u4e8e\u6c42\u4e09\u6761\u7ebf\u7684\u4ea4\u70b9\u3002

\u76f8\u6bd4\u4e8e NeRF \u5c06\u6570\u636e\u53c2\u6570\u5316\uff0c\u6bcf\u6b21\u67e5\u8be2\u90fd\u9700\u8981\u8d70\u4e00\u8fb9 MLP\uff0cEG3D Sec3 \u5219\u663e\u793a\u7684\u5c06\u7279\u5f81\u5b58\u5728\u4e09\u4e2a\u4e8c\u7ef4\u8868\u91cc\uff0c\u6bcf\u6b21\u67e5\u8be2\u53ea\u9700\u8981 O(1) \u7684\u5f00\u9500\uff0c\u56e0\u6b64\u6548\u7387\u4e3b\u8981\u53d6\u51b3\u4e8e\u540e\u9762\u90a3\u4e2a\u8f7b\u91cf MLP\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6548\u7387\u4e0a\u7684\u63d0\u9ad8\u3002

\u800c\u5b9e\u73b0\u6548\u679c\u4e0a\uff0c\u6211\u80e1\u731c EG3D \u7684\u65b9\u6cd5\u597d\u7684\u539f\u56e0\uff1a

  1. \u7531\u4e8e\u4f7f\u7528\u4e86\u5ea7\u6807\u6295\u5f71\uff0c\u6240\u4ee5\u76f8\u5bf9\u4e8e NeRF \u7684\u53c2\u6570\u8868\u8fbe\uff0cEG3D \u5bf9\u4e8e\u67d0\u4e2a\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e\u5177\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\uff0c\u56e0\u800c\u53ef\u80fd\u5bf9\u7ec6\u8282\u7684\u628a\u63a7\u7ea6\u675f\u66f4\u76f4\u63a5\uff0c\u6216\u8005\u8bf4\u76f4\u89c9\u4e0a\u6211\u611f\u89c9 EG3D \u8fd9\u79cd\u8868\u8fbe\u5bf9\u201c\u7279\u5f81-\u5ea7\u6807\u201d\u7684\u5173\u7cfb\u66f4\u5177\u4f53\uff1b
  2. \u4e09\u4e2a\u6b63\u4ea4\u65b9\u5411\u585e\u8fdb\u5c0f MLP \u91cc\u5b66\uff0c\u53ef\u80fd\u4f1a\u66f4\u5bb9\u6613\u8ba9 MLP \u77e5\u9053\u53bb\u627e\u4ea4\u70b9\u9644\u8fd1\u7684\u90a3\u4e9b\u70b9\u53bb\u5b66\u4e60\uff0c\u611f\u89c9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5728\u4e00\u4e2a\u957f\u5f97\u50cf\u66fc\u54c8\u987f\u8ddd\u79bb\u90a3\u79cd\u7acb\u65b9\u4f53\u4e00\u6837\u7684\u7a7a\u95f4\u91cc\u53bb\u5b66\u4e60\u5468\u56f4\u7684\u4fe1\u606f\uff1b

\u53c2\u8003\u8d44\u6599

"},{"location":"pape_read/MAS/","title":"[MAS] Multi-view Ancestral Sampling for 3D Motion Generation Using 2D Diffusion","text":"

\u7ea6 211 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

3DV Motion Diffusion

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/MAS/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":"

\u5229\u7528\u4e00\u4e2a\u5728 2D \u5355\u76ee\u6570\u636e\u96c6\u4e0a train \u51fa\u6765\u7684 diffusion model \u505a 3D Motion \u7684\u751f\u6210\u3002

"},{"location":"pape_read/NSM/","title":"[NSM] Neural State Machine for Character-Scene Interactions","text":"

\u7ea6 1434 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

3DV Human-Motion Scene-Aware

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/NSM/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NSM/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

NSM \u63d0\u51fa\u4e00\u79cd\u65b0\u7684\u76ee\u6807\u5bfc\u5411\u81ea\u56de\u5f52\u6a21\u578b\u6765\u89e3\u51b3\u4eba\u4f53\u52a8\u4f5c\u751f\u6210\u95ee\u9898\uff0c\u80fd\u5b9e\u73b0\u8868\u73b0\u826f\u597d\u7684\u5750\u3001\u6301\u7269\u3001\u907f\u969c\u7684\u884c\u4e3a\u3002\u8be5\u95ee\u9898\u4e3b\u8981\u96be\u70b9\u5728\u4e8e\uff0c\u5b8c\u6210\u4e00\u9879\u4efb\u52a1\u6240\u9700\u8981\u751f\u6210\u7684\u52a8\u4f5c\u5e8f\u5217\u4e2d\u5305\u542b\u5468\u671f\u6027\u548c\u975e\u5468\u671f\u6027\u7684\u90e8\u5206\uff0c\u5e76\u4e14\u9700\u8981\u5bf9\u5468\u56f4\u73af\u5883\u8fdb\u884c\u611f\u77e5\u3002\u901a\u8fc7\u4f7f\u7528\u4e8c\u7ef4\u76f8\u4f4d\u8868\u793a\u7684 Kronecker \u4e58\u79ef\u3001\u4e00\u79cd\u53cc\u5411\u63a7\u5236\uff08\u76ee\u6807\u4e2d\u5fc3\u548c\u81ea\u6211\u4e2d\u5fc3\uff09\u89c4\u5219\u3001\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\u548c\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7b49\u6280\u672f\u6765\u589e\u5f3a\u6548\u679c\uff0c\u66f4\u5b8f\u89c2\u7684\u8bf4\uff0cNSM \u4f7f\u7528\u4e86\u4e00\u79cd\u76ee\u6807\u9a71\u52a8\u7684\u6a21\u578b\u6765\u5b9e\u73b0\u6548\u679c\u826f\u597d\u7684\u52a8\u4f5c\u751f\u6210\u3002

"},{"location":"pape_read/NSM/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u6574\u4e2a\u4efb\u52a1\u53ef\u4ee5\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u7b2c\u4e00\u90e8\u5206\u662f\u5bfb\u8def\u81f3\u76ee\u6807\uff0c\u8981\u6c42\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u89c4\u907f\u969c\u788d\u5e76\u627e\u5230\u76ee\u6807\u5e76\u4e14\u6700\u7ec8\u9762\u671d\u76ee\u6807\uff0c\u8fd9\u4e00\u90e8\u5206\u4e3b\u8981\u7684\u96be\u70b9\u5c31\u662f\u9700\u8981\u80fd\u591f\u5bf9\u73af\u5883\u8fdb\u884c\u611f\u77e5\uff0c\u4e3a\u6b64 NSM \u56e2\u961f\u9009\u62e9\u4e86\u4f53\u7d20\u8868\u8fbe\uff0c\u5e76\u8bbe\u8ba1\u4e86\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u2014\u2014\u5176\u8303\u56f4\u8986\u76d6\u4ee5\u4ee3\u7406\u4eba\u4e3a\u4e2d\u5fc3\u7684\u4e00\u4e2a\u5706\u67f1\u5f62\u533a\u57df\uff0c\u533a\u57df\u5185\u7684\u6240\u6709\u5177\u6709\u4f53\u7d20\u7684\u7269\u4f53\u90fd\u4f1a\u88ab\u7403\u5f62\u91c7\u6837\u4e3a\u4e00\u4e2a 0~1 \u548c\u4e4b\u95f4\u7684\u503c\uff0c\u5982\u8bba\u6587\u4e2d Fig5\u3002\u800c\u8fd9\u4e9b\u503c\u88ab\u79f0\u4e3a\u73af\u5883\u8f93\u5165\uff0c\u5728\u6a21\u578b\u7684 pipeline \u4e2d\u4f5c\u4e3a\u8f93\u5165\u3002\u73af\u5883\u8f93\u5165\u6709\u6548\u589e\u52a0\u4ee3\u7406\u4eba\u5bf9\u73af\u5883\u7684\u7406\u89e3\u80fd\u529b\uff0c\u6539\u5584\u4e86\u8bf8\u5982\u4e0e\u76ee\u6807\u4ea4\u4e92\u65f6\u4ece\u80cc\u540e\u7a7f\u900f\u6905\u5b50\u5750\u4e0b\u7684\u8fd9\u79cd\u95ee\u9898\uff0c\u5982 Fig14\u3002\u6b64\u5916\uff0cNSM \u56e2\u961f\u5b66\u4e60\u4e86 PFNN\uff0c\u4f7f\u7528 phase \u6765\u5b9e\u73b0\u72b6\u6001\u673a\uff0c\u4f46\u521b\u65b0\u6027\u7684\u4f7f\u7528\u4e86\u6807\u6ce8\u79bb\u6563\u7279\u5b9a\u76f8\u4f4d\uff08\u5982\u884c\u8d70\u65f6\u5de6\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\(2k\\pi\\)\uff0c\u53f3\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\((2k+1)\\pi\\)\uff0c\u800c\u4e2d\u95f4\u8fc7\u7a0b\u901a\u8fc7\u63d2\u503c\u8ba1\u7b97\uff09\uff0c\u901a\u8fc7\u7f51\u7edc\u5b66\u4e60\u63d2\u503c\u76f8\u4f4d\u7684\u5f62\u5f0f\uff0c\u89e3\u51b3\u4e86 PFNN \u4e2d\u5148\u9a8c\u76f8\u4f4d\u5e26\u6765\u7684\uff0c\u4ee3\u7406\u4eba\u8d8b\u5411\u4e8e\u4e0d\u884c\u52a8\u7684\u7f3a\u70b9\u3002\u800c\u5728\u5bfb\u627e\u76ee\u6807\u65f6\uff0c\u4f20\u7edf\u7684\u5355\u5411\u8868\u8fbe\u5bb9\u6613\u4ea7\u751f\u8bef\u5dee\u7d2f\u8ba1\uff0c\u5bfc\u81f4\u6700\u7ec8\u76ee\u6807\u5b9a\u4f4d\u504f\u79fb\uff0cNSM \u56e2\u961f\u4f7f\u7528\u76ee\u6807\u4e2d\u5fc3\u3001\u81ea\u6211\u4e2d\u5fc3\u53cc\u5411\u8868\u8fbe\uff0c\u663e\u8457\u6539\u5584\u4e86\u8be5\u95ee\u9898\uff0c\u5b9e\u9a8c\u6548\u679c\u5982 Fig11 \u4e0a\u56fe\u3002

\u7b2c\u4e8c\u90e8\u5206\u9700\u8981\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u7684\u548c\u76ee\u6807\u8fdb\u884c\u4ea4\u4e92\uff0c\u5982\u5728\u6905\u5b50\u4e0a\u5750\u4e0b\u3001\u6253\u5f00\u95e8\u3001\u7a7f\u8fc7\u5899\u4e0a\u7684\u6d1e\u3002\u8fd9\u9700\u8981\u4ee3\u7406\u4eba\u5bf9\u4ea4\u4e92\u76ee\u6807\u5177\u6709\u7cbe\u786e\u7684\u611f\u77e5\uff0c\u4e0e\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7c7b\u4f3c\uff0cNSM \u4e5f\u63d0\u51fa\u4e86\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\uff0c\u4e3a\u4e86\u63d0\u9ad8\u7cbe\u5ea6\uff0c\u4f53\u7d20\u4f20\u611f\u5668\u4ee5 8x8x8 \u7684\u4f53\u7d20\u4e3a\u5355\u4f4d\uff0c\u540c\u6837\u91c7\u6837\u4e3a 0~1 \u4e4b\u95f4\u7684\u503c\uff0c\u88ab\u4f5c\u4e3a\u6a21\u578b\u7684\u4e00\u90e8\u5206\u8f93\u5165\u3002

\u6574\u4f53\u6a21\u578b\u4f7f\u7528\u4e86 MoE \u6280\u672f\uff0c\u5373\u591a\u4e13\u5bb6\u6a21\u578b\uff0c\u901a\u8fc7 Gating Networks \u6765\u8ba1\u7b97\u5176\u6df7\u5408\u6743\u91cd\uff0c\u5176\u8f93\u5165\u4e3b\u8981\u4e3a\u5f53\u524d\u7684\u52a8\u4f5c\u6807\u7b7e\u548c\u4e8c\u7ef4\u76f8\u4f4d\uff08\u4ee5\u89e3\u51b3\u4e00\u7ef4\u76f8\u4f4d\u5e26\u6765\u7684\u4e0d\u53ef\u5fae\u7684\u95ee\u9898\uff09\u3002\u6a21\u578b\u9884\u6d4b\u7f51\u7edc\u5206\u4e3a\u7f16\u7801\u6a21\u5757\u548c\u9884\u6d4b\u6a21\u5757\u4e24\u90e8\u5206\uff0c\u6a21\u578b\u8f93\u5165\u5305\u542b\u56db\u4e2a\u90e8\u5206\uff1a\u5173\u4e8e\u4ee3\u7406\u4eba\u7684\u5f53\u524d\u5e27\uff08\u548c\u7a97\u53e3\u5185\u9644\u8fd1\u5e27\uff09\u7684\u4fe1\u606f\u3001\u76ee\u6807\u4fe1\u606f\uff08\u4f4d\u7f6e\u3001\u671d\u5411\u3001\u4ea4\u4e92\u52a8\u4f5c\u6807\u7b7e\uff09\u4ee5\u53ca\u5148\u524d\u63d0\u5230\u7684\u73af\u5883\u8f93\u5165\u548c\u4ea4\u4e92\u8f93\u5165\u3002\u5c06\u8f93\u51fa\u9884\u6d4b\u540e\u7684\u4ee3\u7406\u4eba\u52a8\u4f5c\u4fe1\u606f\u3001\u884c\u52a8\u8f68\u8ff9\u4fe1\u606f\u3001\u76f8\u4f4d\u4fe1\u606f\u3001\u4ea4\u4e92\u63a5\u89e6\u70b9\u4fe1\u606f\u7b49\u3002\u800c\u8fd9\u6837\u7684\u8bbe\u8ba1\u7ed9\u4e86\u6a21\u578b\u826f\u597d\u7684\u5728\u4e24\u79cd\u7528\u6237\u64cd\u4f5c\u6a21\u5f0f\uff08\u624b\u52a8\u63a7\u5236\u79fb\u52a8\u65b9\u5411\u548c\u53ea\u6307\u5b9a\u4ea4\u4e92\u76ee\u6807\uff09\u4e4b\u95f4\u5207\u6362\u7684\u80fd\u529b\uff0c\u53ea\u9700\u8981\u6539\u53d8\u76ee\u6807\u8f93\u5165\u7684\u5b9a\u4e49\u5373\u53ef\u65e0\u7f1d\u8854\u63a5\u3002

"},{"location":"pape_read/NSM/#\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","title":"\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","text":"

\u8fd9\u79cd\u8bbe\u8ba1\u901a\u8fc7\u4e86\u5b9e\u9a8c\u9a8c\u8bc1\uff0c\u5728 NSM \u56e2\u961f\u8bbe\u8ba1\u7684\u4e00\u79cd\u7279\u6b8a\u60c5\u51b5\u4e0b\u8868\u73b0\u826f\u597d\u2014\u2014\u5750\u4e0a\u4e00\u5f20\u534a\u63d2\u8fdb\u684c\u5b50\u7684\u6905\u5b50\u3002\u5e76\u4e14\u5728\u4e0e\u5176\u4ed6\u6a21\u578b\u7684\u5bf9\u6bd4\u4e2d\uff0c\u5728\u54cd\u5e94\u65f6\u95f4\u3001\u6ed1\u6b65\uff08\u4e0d\u81ea\u7136\u7684\u8d70\u52a8\uff09\u8868\u73b0\u3001\u4f4d\u7f6e\u7cbe\u5ea6\u3001\u65cb\u8f6c\u7cbe\u5ea6\u7b49\u65b9\u9762\u603b\u4f53\u8868\u73b0\u826f\u597d\uff0c\u51e0\u4e4e\u5b8c\u5168\u8d85\u8fc7\u4e86\u4ee5\u5f80\u7684\u540c\u7c7b\u5de5\u4f5c\uff0c\u6587\u7ae0\u4e5f\u5bf9\u8868\u73b0\u826f\u597d\u7684\u539f\u56e0\u8fdb\u884c\u4e86\u4e00\u4e9b\u5206\u6790\u3002

LSTM \u6a21\u578b\u901a\u8fc7\u751f\u6210\u5927\u91cf\u77ed\u7247\u6bb5\u7684\u52a8\u4f5c\u6765\u589e\u5f3a\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e5f\u662f\u901a\u8fc7\u5c06\u8fc7\u7a0b\u4ece\u8fd9\u4e9b\u7247\u6bb5\u4e2d\u5b66\u4e60\u7684\u5185\u5bb9\u8fdb\u884c\u7ec4\u5408\u5b9e\u73b0\uff0c\u56e0\u6b64\u6269\u5c55\u6027\u8f83\u5dee\uff0c\u4e0d\u9002\u5408\u8fd0\u52a8\u6570\u636e\u4e0d\u591f\u5145\u5206\u7684\u60c5\u51b5\u3002

\u800c\u4e0e PFNN \u76f8\u6bd4\uff0cNSM \u9650\u5236\u66f4\u5c11\uff0c\u56e0\u4e3a PFNN \u7684\u5148\u9a8c\u7684\u5916\u90e8 phase \u63a7\u5236\u673a\u5236\u8ba9\u5b83\u65e0\u6cd5\u5f88\u597d\u7684\u89e3\u51b3\u5bf9\u975e\u5468\u671f\u6027\u52a8\u4f5c\u751f\u6210\u3002

\u800c MANN \u867d\u7136\u76f8\u5e94\u901f\u5ea6\u5feb\uff0c\u4f46\u5b58\u5728\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\uff0c\u5e76\u4e14\u5728\u63a7\u5236\u6a21\u5f0f\u53d8\u5316\u7684\u65f6\u5019\u52a8\u4f5c\u5341\u5206\u50f5\u786c\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u52a8\u4f5c\u50f5\u786c\u800c\u4ee3\u7406\u4eba\u7684\u6839\u90e8\u79fb\u52a8\u4ecd\u7136\u5b58\u5728\uff0c\u624d\u51fa\u73b0\u4e86\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\u3002

"},{"location":"pape_read/NSM/#\u6570\u636e\u589e\u5f3a","title":"\u6570\u636e\u589e\u5f3a","text":"

\u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u5f3a\u6a21\u578b\u7684\u53ef\u6269\u5c55\u6027\u548c\u9002\u5e94\u6027\uff0cNSM \u56e2\u961f\u4e5f\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u6570\u636e\u589e\u5f3a\u65b9\u6848\u3002\u6784\u5efa\u573a\u666f\u540e\u91c7\u96c6\u4e00\u7cfb\u5217\u573a\u666f\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u901a\u8fc7\u955c\u50cf\u6765\u589e\u52a0\u6570\u636e\u4f53\u91cf\uff0c\u4eba\u5de5\u6807\u8bb0\u52a8\u4f5c\u6807\u7b7e\u548c\u76f8\u4f4d\u6807\u7b7e\u3002\u63a5\u4e0b\u6765\u901a\u8fc7\u6570\u636e\u589e\u5f3a\u7cfb\u7edf\u6765\u589e\u5f3a\u6570\u636e\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u5c31\u662f\u4f7f\u7528 ShapeNet \u6570\u636e\u96c6\u4e2d\u7b26\u5408\u6a21\u578b\u7684\u7269\u4f53\u4e0d\u65ad\u66ff\u6362\u8bad\u7ec3\u7269\u4f53\uff0c\u5e76\u8fdb\u884c\u53d8\u6362\uff0c\u540c\u65f6\u8981\u6ce8\u610f\u66f4\u65b0\u63a5\u89e6\u70b9\u548c\u4ea4\u4e92\u65b9\u5411\u7b49\u3002\u4ee5\u6b64\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u63d0\u9ad8\u6a21\u578b\u8303\u7528\u6027\u3002

"},{"location":"pape_read/NeRF/","title":"[NeRF] Representing Scenes as Neural Radiance Fields for View Synthesis","text":"

\u7ea6 1701 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

3DV Reconstruction

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/NeRF/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NeRF/#\u8d21\u732e","title":"\u8d21\u732e","text":"
  1. \u5c06\u590d\u6742\u96c6\u5408\u5f62\u72b6\u548c\u6750\u8d28\u7684\u8fde\u7eed\u573a\u666f\u8868\u8fbe\u4e3a 5D \u795e\u7ecf\u8f90\u5c04\u573a\u7684\u65b9\u6cd5\uff0c\u5c06\u5176\u53c2\u6570\u5316\u4e3a\u57fa\u672c\u7684 MLP \u7f51\u7edc\uff1b
  2. \u57fa\u4e8e\u7ecf\u5178\u4f53\u79ef\u6e32\u67d3\u6280\u672f\u7684\u53ef\u5fae\u5206\u6e32\u67d3\u7a0b\u5e8f\uff0c\u6211\u4eec\u7528\u5b83\u4ece\u6807\u51c6 RGB \u56fe\u50cf\u4e2d\u4f18\u5316\u8fd9\u4e9b\u8868\u793a\u3002\u8fd9\u5305\u62ec\u4e00\u79cd\u5206\u5c42\u91c7\u6837\u7b56\u7565\uff0c\u5c06 MLP \u7684\u5bb9\u91cf\u5206\u914d\u7ed9\u5177\u6709\u53ef\u89c1\u573a\u666f\u5185\u5bb9\u7684\u7a7a\u95f4\uff1b
  3. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\uff0c\u5c06 5D \u5ea7\u6807\u6620\u5c04\u5230\u66f4\u9ad8\u7ef4\u7684\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u9891\u7387\u7684\u573a\u666f\u5185\u5bb9\u7684\u8868\u793a\uff1b

\u63d0\u51fa\u7684\u8868\u793a\u65b9\u6cd5\u6709\u5982\u4e0b\u597d\u5904\uff1a

"},{"location":"pape_read/NeRF/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u4f7f\u7528\u5982\u4e0b\u4e00\u4e2a\u201c\u51fd\u6570\u201d\u6765\u8868\u793a\u4e00\u4e2a\u9759\u6001\u573a\u666f\uff1a

\\[ \\begin{aligned} & F_{\\Theta}:(\\mathrm{x}, \\mathrm{d}) \\rightarrow (\\mathrm{c}, \\sigma) \\\\ & \\text{where } \\mathrm{x} = (x,y,z), \\; \\mathrm{d} \\text{ is a 3D Cartesian unit vector}, \\; \\mathrm{c} = (r,g,b), \\; \\sigma \\text{ is the density}. \\end{aligned} \\]

\u4e3a\u4e86\u4fdd\u8bc1\u591a\u89c6\u89d2\u4e0b\u89c2\u5bdf\u5230\u7684\u5185\u5bb9\u5177\u6709\u4e00\u81f4\u6027\uff0c\u505a\u5982\u4e0b\u7ea6\u675f\uff1a

\u5229\u7528\u5982\u4e0a\u201c\u51fd\u6570\u201d\uff0c\u5177\u4f53\u6765\u8bf4\u64cd\u4f5c\u5982\u4e0b\uff1a

\u4e3a\u4e86\u80fd\u591f\u8ba9 MLP \u8868\u793a\u66f4\u9ad8\u9891\u7387\u7684\u51fd\u6570\uff0c\u5f15\u5165\u4e86\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u3002

\u6b64\u5916\uff0c\u5173\u4e8e\u6e32\u67d3\uff0c\u4f7f\u7528\u7684\u662f\u4f20\u7edf\u7684\u4f53\u79ef\u6e32\u67d3\u65b9\u6cd5\uff0c\u7d2f\u79ef\u4e00\u6761\u5149\u7ebf\u4e0a\u7684\u989c\u8272\u548c\u5bc6\u5ea6\uff0c\u5f97\u5230\u6700\u7ec8\u7684\u989c\u8272\uff0c\u6240\u4f7f\u7528\u7684\u516c\u5f0f\u5982\u4e0b\uff1a

\\[ \\begin{aligned} & \\mathrm{C}(\\mathrm{r})= \\int_{t_n}^{t_f} T(t) \\cdot \\sigma\\left( \\mathrm{r}(t) \\right) \\cdot \\mathrm{c} \\left( \\mathrm{r}(t), \\mathrm{d} \\right) \\cdot \\mathrm{d}t \\end{aligned},\\;\\; \\text{where } T(t) = \\exp\\left( -\\int_{t_n}^t \\sigma\\left(\\mathrm{r}(s)\\right) \\; \\mathrm{d}s \\right) \\]

\u5bf9\u8fd9\u4e2a\u5f0f\u5b50\u7a0d\u4f5c\u89e3\u91ca\uff0c\\(t_n\\) \u548c \\(t_f\\) \u5206\u522b\u8868\u793a near \u548c far \u7684\u5149\u7ebf\u8fb9\u754c(bound)\uff0c\u5149\u7ebf\u7ed3\u679c \\(C(\\mathrm{r})\\) \u901a\u8fc7\u7d2f\u79ef\u8fd9\u4e24\u4e2a\u7aef\u70b9\u4e4b\u95f4\u7684\u6309\u6743\u7d2f\u79ef\u5f97\u5230\uff0c\u5176\u6743\u91cd\u4e3a \\(T(t)\\)\uff0c\u89c2\u5bdf\u5176\u5b9a\u4e49\u5f0f\u53ef\u53d1\u73b0\uff0c\u968f\u7740 \\(t\\) \u7684\u589e\u5927\uff0c\\(T(t) \\rightarrow 0\\)\uff0c\u5373\u7ea6\u5f80\u540e\u7684\u70b9\u7ea6\u4e0d\u5bb9\u6613\u88ab\u770b\u5230\uff0c\u8fd9\u4e5f\u662f\u7b26\u5408\u5e38\u8bc6\u7684\u3002\u800c\u7d2f\u79ef\u7684\u5bf9\u8c61\u4e3a \\(\\sigma(\\mathrm{r}(t)) \\cdot \\mathrm{c}(\\mathrm{r}(t), \\mathrm{d})\\)\uff0c\u5373\u5bc6\u5ea6\u548c\u989c\u8272\u7684\u4e58\u79ef\uff0c\u6ce8\u610f\u4e24\u4e2a\u53c2\u6570\u2014\u2014\u5bc6\u5ea6\u8868\u5f81\u5f62\u72b6\u7279\u5f81\uff0c\u4ec5\u4e0e\u7a7a\u95f4\u4f4d\u7f6e\u6709\u5173\uff1b\u800c\u989c\u8272\u540c\u65f6\u4e0e\u89c2\u5bdf\u89d2\u5ea6\u6709\u5173\uff0c\u8fd9\u6697\u542b\u7740\u5149\u5f71\u4fe1\u606f\u3002

\u7136\u800c\uff0c\u7531\u4e8e\u79ef\u5206\u7684\u64cd\u4f5c\u6027\u5dee\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u79cd\u79bb\u6563\u7684\u62bd\u6837\u7d2f\u79ef\u6765\u5b9e\u73b0\u8fd9\u4ef6\u4e8b\uff0c\u5c06\u5149\u7ebf\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\uff0c\u6309\u5747\u5300\u5206\u5e03\u5728\u6bcf\u4e2a\u70b9\u91c7\u6837\u4e00\u4e2a\u70b9\uff0c\u8fdb\u884c\u7d2f\u79ef\uff0c\u5373\u5bf9\u4e8e\u533a\u95f4 \\(t_i\\)\uff1a

\\[ t_i \\sim U \\left[ t_n + \\frac{i-1}{N} \\left( t_f - t_n \\right), t_n + \\frac{i}{N} \\left( t_f - t_n \\right) \\right] \\]

\u5bf9\u5e94\u7684\u989c\u8272\u8ba1\u7b97\u516c\u5f0f\u6539\u5199\u4e3a\uff1a

\\[ \\begin{aligned} \\hat{C}(\\mathrm{r}) = \\sum_{i=1}^{N} T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\cdot \\mathrm{c}_i, \\;\\; \\text{where } T_i = \\exp\\left( -\\sum_{j=1}^{i-1} \\sigma_j \\delta_j \\right) \\text{ and } \\delta_i = t_{i+1} - t_i \\end{aligned} \\]

\u5176\u4e2d\uff0c\\(\\sigma(\\mathrm{r}(t))\\) \u522b\u66ff\u6362\u4e3a \\((1-\\exp(-\\sigma_i\\delta_i))\\)\uff0c\u5728\u7ed3\u5408\u4e86\u533a\u95f4\u957f\u5ea6\u7684\u60c5\u51b5\u4e0b\u53c8\u91cd\u65b0\u5c06\u5bc6\u5ea6\u6620\u5c04\u56de\u4e86 \\([0,1]\\)\u3002

\u5728\u4e4b\u540e\u7684\u7b56\u7565\u4e2d\uff0c\u8fd8\u4f1a\u5bf9\u91c7\u6837\u89c4\u5219\u505a\u8fdb\u4e00\u6b65\u4f18\u5316\u3002

\u81f3\u6b64\u4e3a\u6b62\u662f NeRF \u4e3b\u8981\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u8fd9\u4e9b\u65b9\u6cd5\u4ecd\u7136\u4e0d\u8db3\u4ee5\u8ba9\u5b83\u8fbe\u5230\u6700\u5148\u8fdb\u7684\u6548\u679c\uff0c\u56e0\u6b64\u8fd9\u91cc\u5f15\u5165\u4e24\u4e2a\u6539\u8fdb\u63aa\u65bd\u3002

  1. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u6765\u4f7f MLP \u80fd\u591f\u652f\u6301\u66f4\u9ad8\u9891\u7684\u56fe\u50cf\u4fe1\u606f\uff1b
  2. \u4f7f\u7528\u7ed3\u6784\u5316\u7684\u91c7\u6837(hierarchical sampling)\u4f7f\u80fd\u591f\u66f4\u6709\u6548\u5730\u5bf9\u8fd9\u79cd\u9ad8\u9891\u8868\u793a\u8fdb\u884c\u91c7\u6837\uff1b

\u4f4d\u7f6e\u7f16\u7801\u4e3a\u4e00\u4e2a \\(\\gamma : \\R \\rightarrow \\R^{2L}\\)\uff1a

\\[ \\gamma(p) = \\left( \\sin(2^0 \\pi p), \\cos(2^0 \\pi p), \\cdots, \\sin(2^{L-1} \\pi p), \\cos(2^{L-1} \\pi p) \\right) \\]

\u5c06 \\(\\gamma(\\cdot)\\) \u5e94\u7528\u4e8e \\(\\mathrm{x}\\) \u7684\u4e09\u4e2a\u5206\u91cf\uff08\u88ab\u6807\u51c6\u5316\u5230 \\([-1,1]\\) \u4e0a\uff09\u548c \\(\\mathrm{d}\\) \u7684\u4e24\u4e2a\u5206\u91cf\u4e0a\uff0c\u5b9e\u73b0\u7ef4\u5ea6\u63d0\u5347\uff0c\u4ee5\u6b64\u4f18\u5316\u5728\u9ad8\u9891\u5185\u5bb9\u4e0a\u7684\u8868\u73b0\u3002\u5728\u6587\u7ae0\u4e2d\u63d0\u5230\uff0c\\(L_\\mathrm{x} = 10, L_\\mathrm{d} = 4\\)\u3002

\u800c\u5206\u5c42\u91c7\u6837\uff0c\u9488\u5bf9\u7684\u662f\u4e4b\u524d\u7684\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\u8fdb\u884c\u5747\u5300\u91c7\u6837\u3002\u663e\u7136\uff0c\u67d0\u4e9b\u201c\u7a7a\u6c14\u201d\u533a\u57df\u548c\u88ab\u906e\u6321\u7684\u533a\u57df\u5bf9\u6e32\u67d3\u7ed3\u679c\u5e76\u4e0d\u4f1a\u6709\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u5728\u7a7a\u95f4\u4e0a\u8fd9\u4e9b\u5185\u5bb9\u53ef\u80fd\u5360\u4e86\u7edd\u5927\u90e8\u5206\uff08\u5c24\u5176\u662f\u6ca1\u6709\u534a\u900f\u660e\u7269\u4f53\u7684\u60c5\u51b5\u4e0b\uff09\uff0c\u5747\u5300\u91c7\u6837\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5c31\u663e\u5f97\u975e\u5e38\u4f4e\u6548\u3002

\u5206\u5c42\u91c7\u6837\u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u9996\u5148\u4f7f\u7528\u4e00\u4e2a\u7c97\u7565(coarse)\u7684\u7f51\u7edc\uff0c\u5229\u7528 \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u7684\u5747\u5300\u91c7\u6837\u70b9\uff0c\u901a\u8fc7\u8ba1\u7b97 \\(\\hat{w}_i = normalize\\left( T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\right)\\) \u5f97\u5230\u6bcf\u4e2a\u70b9\u7684\u6743\u91cd\uff0c\u800c\u8fd9\u4e2a\u6743\u91cd\u5219\u53cd\u5e94\u4e86\u6bcf\u4e00\u4e2a\u91c7\u6837\u70b9\u9644\u8fd1\u6709\u6548\u70b9\u7684\u5206\u5e03\u60c5\u51b5\uff0c\u53ef\u4ee5\u770b\u4f5c\u4e00\u4e2a\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(PDF)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u8fd9\u4e2a\u5206\u5e03\u7684\u57fa\u7840\u4e0a\u518d\u91c7\u6837\u5f97\u5230 \\(N_f\\) \u4e2a\u7cbe\u7ec6(fine)\u91c7\u6837\u70b9\uff0c\u4e0e \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u70b9\u4e00\u8d77\u653e\u5230\u7cbe\u7ec6(fine)\u7f51\u7edc\u4e2d\u8fdb\u884c\u8bad\u7ec3\u3002

\u4f7f\u7528\u7684 loss \u5982\u4e0b\uff1a

\\[ \\mathcal{L} = \\sum_\\mathrm{r\\in \\text{Rays}} \\left[ \\left\\| \\hat{C}_c(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 + \\left\\| \\hat{C}_f(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 \\right] \\] \u53c2\u8003\u8d44\u6599

\u793e\u533a Pytorch \u590d\u73b0\u4ee3\u7801\u7684\u6ce8\u91ca\uff1ahttps://github.com/IsshikiHugh/nerf-pytorch

"},{"location":"pape_read/SA-MHR/","title":"[SA-HMR] Learning Human Mesh Recovery in 3D Scenes","text":"

\u7ea6 1927 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

3DV HMR Scene-Aware

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/SA-MHR/#\u7b14\u8bb0","title":"\u7b14\u8bb0","text":""},{"location":"pape_read/SA-MHR/#\u4efb\u52a1\u5b9a\u4e49","title":"\u4efb\u52a1\u5b9a\u4e49","text":""},{"location":"pape_read/SA-MHR/#\u4f18\u52bf\u4e0e\u8d21\u732e","title":"\u4f18\u52bf\u4e0e\u8d21\u732e","text":"

\u6982\u62ec\u8d21\u732e\uff1a

  1. \u975e\u4f18\u5316\u505a\u6cd5\u7684\uff0c\u573a\u666f\u611f\u77e5\u7684\u3001\u5355\u7167\u7247\u3001\u9884\u7ed9\u573a\u666f\u7684\u4eba\u4f53\u7f51\u683c\u6062\u590d\u6846\u67b6\uff1b
  2. \u9884\u8bad\u7ec3\u7684 HMR \u7f51\u7edc\u4e0e\u5e73\u884c\u7f51\u7edc\u7684\u673a\u9047 cross-attention \u7684\u5904\u7406\u8bbe\u8ba1\uff0c\u662f\u897f\u5b89\u4e86\u5bf9\u4eba\u4f53\u59ff\u52bf\u548c\u573a\u666f\u51e0\u4f55\u7279\u5f81\u7684\u8054\u5408\u5b66\u4e60\uff1b
  3. \u5728\u51c6\u786e\u5ea6\u548c\u901f\u5ea6\u4e0a\u90fd\u8584\u7eb1\u4f18\u5316\u505a\u6cd5\u7684\u57fa\u7ebf\uff1b
"},{"location":"pape_read/SA-MHR/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":""},{"location":"pape_read/SA-MHR/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":""},{"location":"pape_read/SA-MHR/#\u6548\u679c\u5ea6\u91cfmetrics","title":"\u6548\u679c\u5ea6\u91cf(metrics)","text":""},{"location":"pape_read/SAMP/","title":"[SAMP] Stochastic Scene-Aware Motion Prediction","text":"

\u7ea6 1427 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

3DV Human-Motion Scene-Aware

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/SAMP/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/SAMP/#\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","title":"\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","text":"

\u52a8\u4f5c\u751f\u6210\u7684\u5b9e\u73b0\u5212\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a

  1. \u5bfc\u822a\u81f3\u4ea4\u4e92\u76ee\u6807\uff1b
  2. \u5bfb\u627e\u4ea4\u4e92\u63a5\u89e6\u70b9(contact point)\uff1b
  3. \u751f\u6210\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u4e14\u9700\u8981\u4fdd\u8bc1\u751f\u6210\u7ed3\u679c\u4f1a\u81ea\u7136\u53d8\u5316\uff08\u4ee5\u7b26\u5408\u73b0\u5b9e\u611f\u89c9\uff09\uff1b

\u7531\u4e8e\u8fd9\u4e9b\u52a8\u4f5c\u4e2d\u6709\u4e00\u90e8\u5206\u662f\u201c\u5faa\u73af\u7684(cyclic)\u201d\uff0c\u4e00\u90e8\u5206\u662f\u201c\u4e0d\u5faa\u73af\u7684(acyclic)\u201d\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e2a\u63a8\u7406\u7cfb\u7edf\u6765\u534f\u8c03\u4e24\u8005 -> \u63d0\u51fa SAMP\uff0c\u573a\u666f\u53ef\u611f\u77e5\u7684\u52a8\u4f5c\u9884\u6d4b\u7cfb\u7edf(Scene-Aware Motion Prediction)\uff1a

"},{"location":"pape_read/SAMP/#\u8d21\u732e","title":"\u8d21\u732e","text":"
  1. \u65b0\u9896\u7684\u968f\u673a\u6a21\u578b\u4ee5\u751f\u6210\u5b9e\u65f6\u7684\u3001\u591a\u6837\u7684\u3001goal driven \u7684\u4eba\u7269\u5bf9\u573a\u666f\u7684\u4ea4\u4e92\uff1b
  2. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u7ed9\u5b9a\u76ee\u6807\u51e0\u4f55\u4f53\u540e\u751f\u6210\u53ef\u4fe1\u7684\u3001\u52a8\u4f5c\u76f8\u5173\u7684\u4ea4\u4e92\u4f4d\u7f6e\u548c\u65b9\u5411\u7684\u65b0\u5efa\u6a21\u65b9\u6cd5\uff1b
  3. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u5c06\u5177\u4f53\u8def\u5f84\u89c4\u5212\u7eb3\u5165\u53d8\u5206\u8fd0\u52a8\u5408\u6210\u7f51\u7edc\uff0c\u5b9e\u73b0\u5728\u590d\u6742\u573a\u666f\u4e2d\u7684\u5bfc\u822a\uff1b
  4. \u5305\u542b\u591a\u6837\u4eba\u4f53\u573a\u666f\u4ea4\u4e92\u6570\u636e\u7684\u65b0\u7684 MoCap \u6570\u636e\u96c6\uff1b
"},{"location":"pape_read/SAMP/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u8fd9\u4e9b\u72ec\u7acb\u7ec4\u4ef6\u4f7f SAMP \u79f0\u4e3a\u7b2c\u4e00\u4e2a\u89e3\u51b3\u751f\u6210\u591a\u6837\u52a8\u6001\u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u4e14\u80fd\u771f\u5b9e\u5e94\u7528\u4e8e\u590d\u6742\u573a\u666f\u4e2d\u7684\u3002 - [x] \u95ee\u9898\uff1a\u8fd9\u91cc\u6700\u5173\u952e\u7684\u662f\u54ea\u4e00\u4e2a\u90e8\u5206\uff1f\u4e0e NSM \u76f8\u6bd4\u72ec\u521b\u6027\u7684\u5730\u65b9\u5177\u4f53\u5728\u54ea\u91cc\uff1f\u5230\u5e95\u5982\u4f55\u5b9a\u4e49\u201cdiverse human-scene interactions\u201d\uff0c\u548c Motion VAE \u90a3\u79cd\u751f\u6210\u5206\u5e03\u6a21\u578b\u7684\u6709\u4ec0\u4e48\u533a\u522b\uff1f\uff08Motion VAE \u662f\u5229\u7528\u5206\u5e03\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u5f97\u5230\u7ed3\u679c\u7684\uff0cMoGlow \u8c8c\u4f3c\u548c\u573a\u666f\u6ca1\u5173\u7cfb\uff09

\u56e0\u6b64\uff0c\u8bad\u7ec3 SAMP \u6240\u9700\u7684\u6570\u636e\u96c6\u9700\u8981\u4e30\u5bcc\u4e14\u4e0d\u540c\u7684\u573a\u666f\u4ea4\u4e92\uff0c\u73b0\u6709\u6570\u636e\u96c6\u7f3a\u5c11\u4ea4\u4e92\u884c\u4e3a -> \u81ea\u5df1\u505a\u4e86\u4e00\u4e2a\u3002

\u5982\u4f55\u8861\u91cf\u4eba\u4f53\u52a8\u4f5c\u7684\u968f\u673a\u6027(stochasticity)\u662f\u4e00\u4e2a\u6709\u5f85\u63a2\u7d22\u7684\u9886\u57df\u3002

"},{"location":"pape_read/SAMP/#\u8bad\u7ec3\u7b56\u7565","title":"\u8bad\u7ec3\u7b56\u7565","text":"

\u4f7f\u7528\u6b63\u5e38\u7684\u76d1\u7763\u8bad\u7ec3\u4f1a\u5bfc\u81f4\u9519\u8bef\u7d2f\u79ef(accumulation of error)\uff0c\u56e0\u4e3a\u4e00\u6b21\u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a\u8f93\u5165\u8fdb\u5165\u5230\u4e0b\u4e00\u4e2a\u7f51\u7edc\u3002\u6240\u4ee5 SAMP \u91c7\u7528\u9884\u8ba2\u91c7\u6837(scheduled sampling)\uff0c\u5b83\u80fd\u591f\u7a33\u5b9a\u751f\u6210\u957f\u65f6\u95f4\u7684\u52a8\u4f5c\u9884\u4f30\u3002

\u5177\u4f53\u6765\u8bf4\uff0c\u4e0a\u4e00\u6b21\u7684\u9884\u6d4b\u7ed3\u679c\u4ee5 \\(1-P\\) \u7684\u6982\u7387\u4f5c\u4e3a\u4e0b\u4e00\u6b21\u9884\u6d4b\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(P\\) \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

"},{"location":"pape_read/SAMP/#\u5b9e\u9a8c\u548c\u8bc4\u4f30","title":"\u5b9e\u9a8c\u548c\u8bc4\u4f30","text":"

\u5728\u540c\u521d\u59cb\u6761\u4ef6\u4e0b\u591a\u6b21\u6267\u884c\u540c\u4e00\u4efb\u52a1\uff0c\u4f7f\u7528 APD(Average Pairwise Distance) \u6765\u8861\u91cf\u5176\u8fd0\u52a8\u5e45\u5ea6\uff1a

"},{"location":"pape_read/SAMP/#\u4ee3\u7801\u9605\u8bfb","title":"\u4ee3\u7801\u9605\u8bfb","text":""},{"location":"pape_read/SAMP/#motionnet","title":"MotionNet","text":"

\u516c\u5f0f\u63a8\u5bfc\uff1a

\u6b63\u6001\u5206\u5e03\u7684\u71b5\u516c\u5f0f

\u5047\u8bbe \\(x\\sim N(\\mu, \\sigma^2)\\)\uff0c\u4e8e\u662f\u6709\uff1a

\u5e76\u4e14\u6709\u7ed3\u8bba\uff1a

\\[ \\int_{-\\infty}^{\\infty} e^{-x^2} \\mathrm{d}x = \\sqrt{\\pi} \\]

\u90a3\u4e48\u6709\u5176\u71b5\u516c\u5f0f\uff1a

\\[ \\begin{aligned} -\\int_{-\\infty}^{\\infty} p(x)\\ln p(x) \\mathrm{d}x &= -\\int_{-\\infty}^{\\infty}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\\left( -\\frac{(x-\\mu)^2}{\\sqrt{2\\sigma^2}} \\right) \\ln\\left[ \\frac{1}{\\sqrt{2\\pi\\sigma^2}} \\exp\\left( -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right) \\right] \\mathrm{d}x \\\\ &= \\frac{1}{2}\\left( \\ln\\left( 2\\pi\\sigma^2 \\right) + 1 \\right) \\end{aligned} \\]"},{"location":"pape_read/TRACE/","title":"[TRACE] 5D Temporal Regression of Avatars with Dynamic Cameras in 3D Environments","text":"

\u7ea6 1352 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

3DV HMR Global-Coordinates Track

\u6587\u7ae0\u4fe1\u606f

"},{"location":"pape_read/TRACE/#\u4efb\u52a1--\u6311\u6218","title":"\u4efb\u52a1 & \u6311\u6218","text":""},{"location":"pape_read/TRACE/#\u80cc\u666f","title":"\u80cc\u666f","text":"

\u867d\u7136\u76ee\u524d\u5bf9\u4e8e HPS(Human Pose & Shape) \u7684\u4f30\u8ba1\u5df2\u7ecf\u6709\u5f88\u591a\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u4f46\u662f\u90fd\u662f\u5f97\u5230\u76f8\u673a\u5ea7\u6807\u4e0b\u7684\u7ed3\u679c\uff0c\u65e0\u6cd5\u5f88\u597d\u7684\u5f97\u5230\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u7684\u7ed3\u679c\u3002\u5c24\u5176\u662f\u5728\u76f8\u673a\u79fb\u52a8\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4efb\u52a1\u5c24\u5176\u56f0\u96be\u3002\u800c\u5f97\u5230\u6062\u590d\u51fa\u6765\u7684 Human \u7684\u5168\u5c40\u5ea7\u6807\u5177\u6709\u91cd\u5927\u610f\u4e49\u3002

"},{"location":"pape_read/TRACE/#\u6311\u6218","title":"\u6311\u6218","text":"
  1. \u9700\u8981\u89e3\u5076 human \u7684\u8fd0\u52a8\u548c camera \u7684\u8fd0\u52a8\uff0c\u8fd9\u6837\u624d\u80fd\u5728\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u6062\u590d human \u7684\u8f68\u8ff9\uff1b
    1. \u4e00\u79cd\u65b9\u6cd5\uff1a\u4f7f\u7528 SfM \u6062\u590d\u51fa\u76f8\u673a\u5173\u4e8e rigid scene \u7684\u76f8\u5bf9\u8fd0\u52a8\uff0c\u4f46\u662f\u5728\u7279\u6b8a\u73af\u5883\uff08\u753b\u9762\u7684\u5927\u90e8\u5206\u90fd\u4e0d\u600e\u4e48 rigid\uff0c\u6bd4\u5982\u5927\u91cf\u4eba\u6d41\uff09\u4e0b\u975e\u5e38\u4e0d\u53ef\u9760\uff1b
    2. \u53e6\u5916\u4e00\u79cd\u6765\u81ea GLAMR \u7684\u65b9\u6cd5\uff1a\u901a\u8fc7\u5df2\u6709\u7684\u5c40\u90e8\u59ff\u6001\u6765\u63a8\u65ad\u5168\u5c40\u4f4d\u7f6e\uff0c\u5c31\u7c7b\u4f3c\u4e8e\u770b\u4f60\u8d70\u4e86\u51e0\u6b65\u7136\u540e\u4f30\u8ba1\u4f60\u52a8\u4e86\u51e0\u7c73\uff1b
    3. TRACE \u9009\u62e9\u4e86\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u7684\u53d8\u79cd\uff0c\u901a\u8fc7\u4f7f\u7528\u6574\u4e2a\u753b\u9762\u6765\u9884\u6d4b\u79fb\u52a8\u8ddd\u79bb\uff0c\u6539\u5584\u4e86 GLAMR \u539f\u672c\u4e0d\u600e\u4e48\u597d\u7684\u6548\u679c\u3002\u4e0d\u4ec5\u5982\u6b64\uff0cGLAMR \u662f\u591a\u9636\u6bb5\u7684\uff0c\u9c81\u68d2\u6027\u4e0d\u654c TRACE\uff1b
  2. \u5c24\u5176\u9488\u5bf9\u4e8e\u8ffd\u8e2a\u529f\u80fd\uff0c\u5728\u5bc6\u96c6\u4eba\u7fa4\u573a\u666f\uff0c\u5b58\u5728\u5f88\u4e25\u91cd\u7684\u906e\u6321\u95ee\u9898\uff1b
    1. \u6700\u5e38\u89c1\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4f7f\u7528\u65f6\u5e8f\u5148\u9a8c\u5047\u8bbe\uff0c\u5982 Kalman filter\uff0c\u4f46\u662f\u5728\u590d\u6742\u573a\u666f\u4e0b\u4e5f\u5f88\u5bb9\u6613\u5931\u6548\uff1b
    2. \u95ee\u9898\uff1aKalman filter \u597d\u50cf\u548c\u6ee4\u6ce2\u6709\u5173\uff1f\u4e3a\u4ec0\u4e48\u8bf4\u662f temporal priors\uff1f \u4f7f\u5e73\u6ed1\u3002
    3. PHALP \u662f\u4e3a\u6570\u4e0d\u591a\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u4f46\u662f\u5b83\u5e76\u975e one-stage\uff0c\u800c\u4e14\u5e76\u4e0d\u5bf9\u5e8f\u5217\u8fdb\u884c\u5168\u9762\u7684\u63a8\u7406\uff1b
    4. \u95ee\u9898\uff1a\u9700\u8981\u4e86\u89e3\u8fd9\u4e2a\u5417\uff1f \u8df3\u8fc7\u3002
"},{"location":"pape_read/TRACE/#\u4efb\u52a1\u4e0e\u6210\u679c","title":"\u4efb\u52a1\u4e0e\u6210\u679c","text":"

\u672c\u5de5\u4f5c\u5b9e\u73b0\u4e86\u52a8\u6001\u76f8\u673a\u89c6\u9891\uff08DC-videos\uff09\u4e0b\u5728\uff08\u865a\u62df\u7684\uff09\u7a7a\u95f4\u4e2d\u7684\u65f6\u5e8f\u7684\u5bf9\u4e8e K \u76ee\u6807\u7684\u5b9a\u4f4d\u68c0\u6d4b\u3001\u59ff\u6001\u4f30\u8ba1\u3001\u8ffd\u8e2a\u548c\u51b2\u7a81\u9002\u914d\uff0c\u5e76\u4e14\u80fd\u591f\u5f97\u5230\u5168\u5c40\u7684\u5ea7\u6807\u3002 - \u65f6\u5e8f & \u5168\u5c40\u5ea7\u6807 & \u8ffd\u8e2a\uff1b

\u5bf9 K \u4e2a\u6709\u9650\u76ee\u6807\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5373\u4f7f\u4e2d\u9014\u77ed\u6682\u7684\u5931\u914d\uff0c\u4e5f\u80fd\u5728\u4e4b\u540e\u88ab\u91cd\u65b0\u8bc6\u522b\uff08\u4e00\u5f00\u59cb\u51b3\u5b9a\u4e86\u54ea K \u4e2a\u5c31\u4e00\u76f4\u662f\u54ea K \u4e2a\u4eba\uff09\u3002

"},{"location":"pape_read/TRACE/#\u521b\u65b0\u70b9--\u8d21\u732e","title":"\u521b\u65b0\u70b9 & \u8d21\u732e","text":""},{"location":"pape_read/TRACE/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\u53c2\u8003\u6d41\u7a0b\u56fe\u505a\u89e3\u91ca\u3002

"},{"location":"pape_read/TRACE/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":"

\u7565\u3002

"},{"location":"pape_read/TRACE/#loss","title":"Loss","text":"

\u7565\u3002

"},{"location":"tech_accu/","title":"\u6249\u9875","text":"

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/ai/","title":"\u6249\u9875","text":"

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/ai/hydra/","title":"Hydra","text":"

\u7ea6 1136 \u4e2a\u5b57 42 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u76f8\u5173\u94fe\u63a5

\u7b80\u4ecb

Hydra \u4ea6\u53ef\u7528\u4e8e\u5176\u5b83 Python APP\uff0c\u4f46\u672c\u6587\u53ea\u4ee5 Research \u7684\u89c6\u89d2\u6765\u8c08\u8fd9\u4e2a\u5de5\u5177\u3002

\u5728\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u53ef\u80fd\u4f1a\u5e0c\u671b\u4e00\u4e2a\u9879\u76ee\u80fd\u652f\u6301\u5207\u6362\u5176\u4e2d\u7684\u82e5\u5e72\u90e8\u4ef6\uff0c\u5c31\u597d\u50cf\u7ed9\u673a\u5668\u4eba\u66f4\u6362\u4e0d\u540c\u7684\u90e8\u4ef6\uff0c\u6765\u6d4b\u8bd5\u5176\u6027\u80fd\u3002\u800c\u6bcf\u4e00\u4e2a\u90e8\u4ef6\u90fd\u6709\u53ef\u80fd\u6709\u81ea\u5df1\u7684\u8d85\u53c2\u6570\u9700\u8981\u8bbe\u7f6e\u3002

\u786c\u7f16\u7801\u8bbe\u7f6e\u5f53\u7136\u4e0d\u53ef\u53d6\uff0c\u8fd9\u592a\u4e0d\u4f18\u96c5\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u901a\u5e38\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u5373 args \u6765\u5b9e\u73b0\u8d85\u53c2\u6570\u7684\u4f20\u5165\u3002\u4f46\u968f\u7740\u6a21\u578b\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u9700\u8981\u7684\u8d85\u53c2\u6570\u8d8a\u6765\u8d8a\u591a\uff0c\u547d\u4ee4\u884c\u5c31\u4f1a\u8d8a\u6765\u8d8a\u957f\uff1b\u800c\u4e14\u4e0d\u540c\u7684\u201c\u90e8\u4ef6\u201d\u53ef\u80fd\u9700\u8981\u4e0d\u540c\u7684\u8d85\u53c2\u6570\uff0c\u56e0\u6b64\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\u7075\u6d3b\u6027\u5c31\u5927\u5927\u4e0b\u964d\u4e86\u3002

\u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u628a\u8fd9\u4e9b\u4e1c\u897f\u653e\u5728\u6587\u4ef6\u91cc\uff0c\u9700\u8981\u4fee\u6539\u65f6\u5c31\u76f4\u63a5\u4fee\u6539\u6587\u4ef6\uff0c\u8fd9\u6837\u4fee\u6539\u53c2\u6570\u76f8\u5bf9\u5c31\u7075\u6d3b\u4e00\u4e9b\u3002\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5c06\u4e0d\u540c\u7684\u7ec4\u5408\u5206\u522b\u4fdd\u5b58\u4e3a\u4e00\u4e2a\u6587\u4ef6\uff0c\u7528\u6307\u5b9a\u7279\u5b9a\u6587\u4ef6\u7684\u65b9\u5f0f\u6765\u9009\u62e9\u4e00\u4e2a\u5df2\u7ecf\u8bbe\u7f6e\u597d\u7684 pipeline\u3002

\u4f46\u662f\u8fd9\u6837\u8fd8\u6709\u4e24\u4e2a\u95ee\u9898\uff0c\u9996\u5148\uff0c\u8fd9\u6837\u5199\u7684\u8bdd\uff0c\u914d\u7f6e\u6587\u4ef6\u7684\u590d\u7528\u7387\u662f\u6bd4\u8f83\u4f4e\u7684\uff0c\u56e0\u4e3a\u5404\u4e2a\u914d\u7f6e\u4e4b\u95f4\u5dee\u522b\u53ef\u80fd\u4e0d\u5927\uff0c\u53ef\u80fd\u4e92\u76f8\u53ea\u6709\u4e00\u5c0f\u90e8\u5206\u7684\u4e0d\u540c\uff0c\u800c\u590d\u7528\u7387\u4f4e\u7684\u574f\u5904\u5c31\u4e0d\u5fc5\u591a\u8bf4\u4e86\uff1b\u5176\u6b21\uff0c\u5c31\u7b97\u6211\u4eec\u7528\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\u6765\u89e3\u51b3\u590d\u7528\u7684\u95ee\u9898\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u4ee3\u7801\u91cc\u4e5f\u9700\u8981\u4f7f\u7528\u7e41\u590d\u7684\u5206\u652f\u8bed\u53e5\u624d\u80fd\u5f88\u597d\u5730\u63a7\u5236\u914d\u7f6e\u7684\u9009\u62e9\u3002

\u4e8e\u662f\uff0cHydra \u5e94\u8fd0\u800c\u751f\u3002Hydra \u4f1a\u4ee5\u7279\u5b9a\u7684\u65b9\u5f0f\u5904\u7406\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5b83\u7684\u884c\u4e3a\u5f88\u50cf Cpp \u7684 #include\uff0c\u4f1a\u628a\u9009\u4e2d\u7684\u540e\u4ee3 Group \u91cc\u7684\u914d\u7f6e\u6587\u4ef6\u5d4c\u5165\u5230\u5f53\u524d\u914d\u7f6e\u6587\u4ef6\u91cc\u3002

\u66f4\u5177\u4f53\u7684\u5173\u4e8e Hydra \u7684\u89c4\u8303\uff0c\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff0c\u672c\u6587\u4e3b\u8981\u5bf9\u5b98\u65b9\u6587\u6863\u505a\u4e00\u4e9b\u8865\u5145\uff0c\u901a\u8fc7\u5b9e\u9a8c\u63a2\u7d22\u4e00\u4e9b Hydra \u6587\u6863\u4e2d\u6ca1\u6709\u63d0\u5230\u7684\u6027\u8d28\u3002

"},{"location":"tech_accu/ai/hydra/#\u5173\u4e8e-ab-\u8bed\u6cd5","title":"\u5173\u4e8e +A=B \u8bed\u6cd5","text":"

\u5728\u6587\u6863\u4e2d\uff0c\u6709\u4e24\u4e2a\u5730\u65b9\u63d0\u5230\u4e86 +A=B \u7684\u8bed\u6cd5\u3002\u7b2c\u4e00\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

You can add config values via the command line. The + indicates that the field is new.

$ python my_app.py +db.driver=mysql +db.user=omry +db.password=secret\ndb:\n  driver: mysql\n  user: omry\n  password: secret\n
files my_app.py
from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

\u7b2c\u4e8c\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

Select an item from a config group with +GROUP=OPTION, e.g:

$ python my_app.py +db=postgresql\ndb:\n  driver: postgresql\n  pass: drowssap\n  timeout: 10\n  user: postgres_user\n
files Directory layout
    \u251c\u2500 conf\n    \u2502  \u2514\u2500 db\n    \u2502      \u251c\u2500 mysql.yaml\n    \u2502      \u2514\u2500 postgresql.yaml\n    \u2514\u2500\u2500 my_app.py\n
db/mysql.yaml
driver: mysql\nuser: omry\npassword: secret\n
db/postgresql.yaml
driver: postgresql\nuser: postgres_user\npassword: drowssap\ntimeout: 10\n
my_app.py
from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

\u524d\u8005\u8868\u793a\u589e\u52a0\u4e00\u4e2a field\uff0c\u540e\u8005\u8868\u793a\u6307\u5b9a\u4e00\u4e2a group\uff0c\u5176\u542b\u4e49\u662f\u4e0d\u540c\u7684\uff0c\u800c\u770b\u8d77\u6765\u662f\u6709\u6b67\u4e49\u7684\u3002

\u6839\u636e\u6211\u7684\u6d4b\u8bd5\uff0c+A=B \u5177\u4f53\u662f\u54ea\u4e00\u79cd\uff0c\u53d6\u51b3\u4e8e\u662f\u5426\u5b58\u5728\u540d\u4e3a A \u7684 folder\u3002\u5373\uff1a

\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ea\u8981\u5f53\u524d\u76ee\u5f55\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u90a3\u4e48\u5728\u5f53\u524d yaml \u6587\u4ef6\u4e2d\u5c31\u65e0\u6cd5\u5c06 A \u4f5c\u4e3a\u4e00\u4e2a field \u7684 key\u3002

\u4e4b\u6240\u4ee5\u5f3a\u8c03\u5f53\u524d\uff0c\u662f\u56e0\u4e3a\u5b83\u53ef\u4ee5\u88ab\u7236\u6bcd\u7684 yaml \u6587\u4ef6\u4e2d\u7684\uff0c\u4ee5 A \u4e3a key \u7684 k-v \u5bf9\u8986\u76d6\u3002

\u4f8b\u5982\uff0c\u867d\u7136\u6dfb\u52a0 A=1 \u66ff\u6362\u4f5c\u4e3a group \u7684 A \u4f1a\u62a5\u9519\uff0c\u4f46\u662f\u6dfb\u52a0 A.B=1 \u5374\u53ef\u4ee5\u8986\u76d6 A \u4e0b\u7684\u4f5c\u4e3a group \u7684 B\uff1b\u4ea6\u6216\u5728\u6700\u7684 config.yaml \u91cc\u6dfb\u52a0\u8fd9\u6837\u4e00\u6bb5\u4e5f\u53ef\u4ee5\u8d77\u5230\u540c\u6837\u7684\u6548\u679c\uff1a

A:\nB: 1\n

\u5373\uff0c\u5bf9\u4e8e\u201c\u65e0\u6cd5\u5c06 group \u8986\u76d6\u4e3a field\u201d\u8fd9\u4ef6\u4e8b\u7684\u4fdd\u62a4\uff0c\u53ea\u6709\u76ee\u5f55\u4e00\u5c42\u5185\u6709\u6548\u3002

"},{"location":"tech_accu/ai/hydra/#\u8986\u76d6\u5173\u7cfb","title":"\u8986\u76d6\u5173\u7cfb","text":"

\u9996\u5148\uff0c\u9664\u4e86\u5728\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u5173\u4e8e field \u548c group \u7684\u8986\u76d6\u5173\u7cfb\uff0c\u66f4\u91cd\u8981\u7684\u662f\u5728\u4e0d\u540c\u5c42\u7684 yaml \u4e4b\u95f4\uff0c\u76f8\u540c\u952e\u7684\u503c\u7684\u8986\u76d6\u5173\u7cfb\u3002

\u9996\u5148\uff0c\u5355\u770b defaults\uff0c\u5b98\u65b9\u5728\u6587\u6863\u4e2d\u6709\u63d0\u5230\u89c4\u5219\uff1a

The defaults are ordered:

\u6b64\u5916\uff0c\u5982\u679c\u5df2\u7ecf\u5728\u5185\u5c42 defaults \u8bbe\u7f6e\u4e86\u952e\u7684\u9ed8\u8ba4\u503c\uff0c\u5c31\u4e0d\u80fd\u5728\u5916\u5c42\u4e3a\u8fd9\u4e2a\u952e\u8bbe\u7f6e\u9ed8\u8ba4\u503c\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

\ud83c\udf30

\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e24\u4e2a\u6587\u4ef6\u4e2d\uff0c- group1/group2: option1_1 \u548c - group2: option1_1 \u8fd9\u4e24\u884c\u662f\u51b2\u7a81\u7684\uff0c\u53ea\u80fd\u9009\u5176\u4e00\u7684\u3002

config.yaml
defaults:\n- group1: option1\n- group1/group2: option1_1\n
group1/option1.yaml
defaults:\n- group2: option1_1\n

\u56e0\u6b64\uff0c\u4e00\u822c\u6765\u8bf4\u5c3d\u91cf\u907f\u514d\u8ba9\u914d\u7f6e\u5c42\u6570\u8d85\u8fc7\u4e24\u5c42\u3002

\u800c\u5173\u4e8e defaults \u4ee5\u5916\u7684\u90e8\u5206\uff0c\u89c4\u5219\u5982\u4e0b\uff1a

  1. \u5f53\u6700\u5916\u5c42\u7684 config.yaml \u548c\u5728 defaults: \u91cc\u6307\u5b9a\u7684 yaml \u914d\u7f6e\u6587\u4ef6\u5b58\u5728\u51b2\u7a81\u7684\u952e\u65f6\uff0c\u4ee5 config.yaml \u91cc\u7684\u4e3a\u51c6\uff0c\uff08\u65e0\u8bba\u662f\u5426\u6709 GROUP=OPTION \u9009\u9879\uff09\uff1b
  2. \u5f53\u952e\u4e0d\u5b58\u5728\u4e8e defaults: \u4e2d\uff0c\u800c\u53ea\u5728\u547d\u4ee4\u884c\u4e2d\u901a\u8fc7 +GROUP=OPTION \u9009\u4e2d\u65f6\uff0c\u4ee5 OPTION.yaml \u91cc\u7684\u4e3a\u51c6\uff1b
"},{"location":"tech_accu/ai/pytorch/","title":"PyTorch","text":"

\u7ea6 565 \u4e2a\u5b57 48 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

\u5f03\u5751\u4e86\uff0c\u611f\u89c9\u6ca1\u5565\u5199\u7684\u5fc5\u8981

\u53c2\u8003\u8d44\u6599 "},{"location":"tech_accu/ai/pytorch/#\u5b89\u88c5","title":"\u5b89\u88c5","text":"

\u6839\u636e \u8fd9\u91cc \u63d0\u4f9b\u7684\u65b9\u6cd5\u83b7\u53d6\u5b89\u88c5\u9014\u5f84\uff0c\u6ce8\u610f\u9009\u62e9\u4e0e\u60a8\u7684\u73af\u5883\u76f8\u7b26\u7684\u6761\u4ef6\u3002

\u4f9d\u8d56\u4e4b\u7c7b\u7684\u90fd\u5df2\u7ecf\u5728\u8be5\u9875\u9762\u5199\u7684\u5f88\u6e05\u695a\u4e86\u3002

\u5b8c\u6210\u5b89\u88c5\u540e\uff0c\u6211\u4eec\u901a\u8fc7\u5982\u4e0b\u65b9\u6cd5\u6765\u68c0\u6d4b\u662f\u5426\u5b89\u88c5\u6210\u529f\uff1a

$ python\n>>> import torch\n>>> x = torch.rand(5, 3)\n>>> print(x)\ntensor([[0.8577, 0.6416, 0.2632],\n        [0.3853, 0.8534, 0.4877],\n        [0.0628, 0.2360, 0.8810],\n        [0.1766, 0.8024, 0.5447],\n        [0.3938, 0.9232, 0.4407]])\n
"},{"location":"tech_accu/ai/pytorch/#\u5f20\u91cf--tensors","title":"\u5f20\u91cf | Tensors","text":"

Tensors \u662f NumPy \u4e2d ndarrys \u7684\u4e00\u79cd\u65e0\u75db\u66ff\u4ee3\uff0c\u53ea\u4e0d\u8fc7 tensors \u80fd\u591f\u6709\u6548\u5229\u7528 GPU \u8fdb\u884c\u52a0\u901f\u3002

"},{"location":"tech_accu/ai/pytorch/#\u521d\u59cb\u5316","title":"\u521d\u59cb\u5316","text":"

\u663e\u7136\uff0c\u521d\u59cb\u5316\u6709\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u63d0\u4f9b\u51e0\u79cd\u3002

\u901a\u8fc7\u6570\u636e\u751f\u6210\u901a\u8fc7 NumPy array \u751f\u6210\u901a\u8fc7\u53e6\u5916\u4e00\u4e2a tensor \u751f\u6210\u4f7f\u7528\u5e38\u6570\u6216\u968f\u673a\u521d\u59cb\u5316

data = [[1, 2], [3, 4]]\nx_data = torch.tensor(data)\nprint(x_data)\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

tensor([[1, 2],\n        [3, 4]])\n

np_array = np.array(data)\nx_np = torch.from_numpy(np_array)\nprint(x_np)\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

tensor([[1, 2],\n        [3, 4]])\n

x_ones = torch.ones_like(x_data) # retains the properties of x_data\nprint(f\"Ones Tensor: \\n {x_ones} \\n\")\n\nx_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data\nprint(f\"Random Tensor: \\n {x_rand} \\n\")\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

Ones Tensor:\ntensor([[1, 1],\n        [1, 1]])\n\nRandom Tensor:\ntensor([[0.4557, 0.7406],\n        [0.5935, 0.1859]])\n

    shape = (2, 3)\n    rand_tensor = torch.rand(shape)\n    ones_tensor = torch.ones(shape)\n    zeros_tensor = torch.zeros(shape)\n\n    print(f\"Random Tensor: \\n {rand_tensor} \\n\")\n    print(f\"Ones Tensor: \\n {ones_tensor} \\n\")\n    print(f\"Zeros Tensor: \\n {zeros_tensor}\")\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

Random Tensor:\n tensor([[0.4434, 0.1717, 0.7331],\n        [0.4211, 0.8945, 0.2239]])\n\nOnes Tensor:\n tensor([[1., 1., 1.],\n        [1., 1., 1.]])\n\nZeros Tensor:\n tensor([[0., 0., 0.],\n        [0., 0., 0.]])\n
"},{"location":"tech_accu/ai/pytorch/#\u5c5e\u6027","title":"\u5c5e\u6027","text":"

\u8fd9\u91cc\u4e3b\u8981\u6d89\u53ca\u7684\u5f20\u91cf\u7684\u5c5e\u6027\u4e3a \u5f62\u72b6(shape)\u3001\u6570\u636e\u7c7b\u578b(dtype) \u548c \u6570\u636e\u6240\u5b58\u50a8\u5728\u7684\u786c\u4ef6\u8bbe\u5907(device)\u3002

tensor = torch.rand(3, 4)\n\nprint(f\"Shape of tensor: {tensor.shape}\")\nprint(f\"Datatype of tensor: {tensor.dtype}\")\nprint(f\"Device tensor is stored on: {tensor.device}\")\n

\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

Shape of tensor: torch.Size([3, 4])\nDatatype of tensor: torch.float32\nDevice tensor is stored on: cpu\n
"},{"location":"tech_accu/ai/pytorch/#\u65b9\u6cd5\u4e0e\u64cd\u4f5c","title":"\u65b9\u6cd5\u4e0e\u64cd\u4f5c","text":"

\u5bf9\u5f20\u91cf\u7684\u64cd\u4f5c\u65b9\u6cd5\u975e\u5e38\u4e4b\u591a\uff0c\u5f88\u96be\u5728\u672c\u6587\u4e2d\u5168\u90e8\u6d89\u53ca\uff0c\u56e0\u800c\u4e5f\u53ea\u662f\u653e\u4e2a \u6587\u6863 \u5728\u8fd9\u8fb9\uff0c\u5728\u6b64\u53ea\u4ecb\u7ecd\u6bd4\u8f83\u57fa\u7840\u7684\u51e0\u4e2a\u3002

"},{"location":"tech_accu/ai/pytorch/#\u4f7f\u7528-gpu-\u52a0\u901f","title":"\u4f7f\u7528 GPU \u52a0\u901f","text":"

\u4ee4\u4eba\u5e78\u559c\u7684\u662f\uff0c\u5bf9\u5f20\u91cf\u7684\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u53ef\u4ee5\u4f7f\u7528 GPU \u6765\u8fdb\u884c\u52a0\u901f\uff0c\u5f53\u7136\u5728\u6b64\u4e4b\u524d\u6211\u4eec\u9700\u8981\u5c06\u5b83\u8f6c\u79fb\u5230 GPU \u4e0a\u2014\u2014\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\u3002

# We move our tensor to the GPU if available\nif torch.cuda.is_available():\n    tensor = tensor.to('cuda')\n    print(f\"Device tensor is stored on: {tensor.device}\")\n

Output

Device tensor is stored on: cuda:0\n
"},{"location":"tech_accu/ai/pytorch/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":"

\u6ce8\u610f

\u5982\u679c\u4e00\u4e2a tensor \u7684\u65b9\u6cd5\u4ee5 _ \u7ed3\u5c3e\uff0c\u90a3\u4e48\u8bf4\u660e\u8fd9\u4e2a\u8fd0\u7b97\u4f1a\u4fee\u6539\u8fd9\u4e2a tensor \u81ea\u8eab\u3002

\u5373\uff0cx.method_(...) \u5c06\u4f1a\u4fee\u6539 x \u672c\u8eab\u3002

PyTorch \u5bf9\u56db\u5219\u8fd0\u7b97\u7b26\u8fdb\u884c\u4e86\u4e00\u4e9b\u91cd\u8f7d\uff0c\u5176\u4e0e\u6b63\u5e38\u65b9\u6cd5\u7684\u6620\u5c04\u5173\u7cfb\u5982\u4e0b\uff1a

\u8fd0\u7b97\u7b26 \u7b49\u4ef7\u65b9\u6cd5 + torch.add() - torch.sub() * torch.mul() / torch.div()"},{"location":"tech_accu/ai/pytorch/#\u7d22\u5f15\u4e0e\u5207\u7247","title":"\u7d22\u5f15\u4e0e\u5207\u7247","text":"

tensor = torch.ones(4, 4)\ntensor[:,1] = 0\nprint(tensor)\n
\u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

Output

tensor([[1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.]])\n
"},{"location":"tech_accu/language/cpp/","title":"Cpp about OOP","text":"

\u7ea6 53 \u4e2a\u5b57

\u76f8\u5173\u4fe1\u606f

\u8fd9\u4e2a\u6761\u76ee\u653e\u7684\u4e3b\u8981\u662f Cpp \u5173\u4e8e OOP \u7684\u4e00\u4e9b\u8bed\u6cd5\u3002

\u4e3b\u8981\u8fc1\u79fb\u81ea\u5927\u4e00\u7684 yuque \u6587\u6863\uff0c\u518d\u4e4b\u540e\u4e5f\u4f1a\u6709\u4e00\u4e9b\u4fee\u6539\u3002

\u8fc1\u79fb\u524d\u7684\u6587\u4ef6

"},{"location":"tech_accu/language/cpp/Part0/","title":"[pre] \u524d\u7f6e\u4e0e\u6742\u9879","text":"

\u7ea6 1746 \u4e2a\u5b57 74 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

"},{"location":"tech_accu/language/cpp/Part0/#1x-\u5f15\u7528reference","title":"[1.x] \u5f15\u7528reference","text":"

1.\u521b\u5efabinding\u5173\u7cfb

\u9700\u8981\u7406\u89e3\u7684\u662f\uff0c\u5f15\u7528\u672c\u8d28\u5c31\u662f\u6307\u9488\u3002\u5b83\u662f\u6307\u9488\u7684\u7cd6\u3002

typename & refname = name; \u521b\u5efa\u4e86 (typename)name \u7684\u5f15\u7528 (reference)refname

\u5728bingding\u5173\u7cfb\u5efa\u7acb\u540e\uff0c\u5728 name \u548c refname \u7684\u4f5c\u7528\u57df\u5185 refname \u548c name \u57fa\u672c\u7b49\u6548\uff08\u662f\u53d8\u91cf\u7684\u7ed1\u5b9a\u5173\u7cfb\uff0c\u800c\u975e\u50cf #define \u90a3\u6837\u7684\u5b57\u7b26\u66ff\u6362\u5173\u7cfb

int x = 1, y = 10, *p = &x, &ref = *p;\n// \u6b64\u65f6 x = 1, y = 10, *p = 1, ref = 1\n\n*p = 2;\n// \u6b64\u65f6 x = 2, y = 10, *p = 2, ref = 2\n\np = &y;\n// \u6b64\u65f6 x = 2, y = 10, *p = 10, ref = 2\n

2.\u5229\u7528reference\u4f20\u53c2

\u5229\u7528reference\u53ef\u4ee5\u7c7b\u4f3c\u4f20\u6307\u9488\u4e00\u6837\uff0c\u5728\u53d8\u91cf\u539f\u672c\u7684\u4f5c\u7528\u57df\u5916\u5bf9\u53d8\u91cf\u8fdb\u884c\u4fee\u6539

void f(int &x){\nx = 1;\n}\n\nint main(){\nint p = 0;\n// \u6b64\u65f6 p = 0\nf(p);\n// \u6b64\u65f6 p = 1\n}\n

\u4f46\u6b64\u65f6\uff0c\u4f20\u5165 f(p) \u7684\u5b9e\u53c2 p \u5fc5\u987b\u4e3a\u4e00\u4e2a\u53d8\u91cf\uff0c\u4e0d\u53ef\u4ee5\u662f\u5e38\u91cf\u3001\u8868\u8fbe\u5f0f\u7b49\u3002

3.reference \u4e0e const

\u8fdb\u884c const int &refA = A; \u64cd\u4f5c\u540e\uff0c\u6211\u4eec\u53d1\u73b0 refA \u4e0d\u53ef\u4fee\u6539\uff0c\u4f46 A \u53ef\u4ee5\u4fee\u6539

\u5982\u679c A \u5982\u6b64\u5b9a\u4e49\uff1aconst int A = 1;\uff0c\u90a3\u4e48\uff1a

"},{"location":"tech_accu/language/cpp/Part0/#2x-\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","title":"[2.x] \u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","text":"
#include<iostream>\nusing namespace std;\n\nclass S{\npublic:\nvoid f();\nprivate:\nint a;\n};\n\nint a;\n\nvoid f(){\ncout << \"qwq\\n\";\n}\n\nvoid S::f(){ // \u8fd9\u91cc\u6b63\u5728\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u4e8e\u7c7bS\u7684\u7684\u51fd\u6570\n++a;     // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u7c7bS\u7684\u6210\u5458\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\n::f();   // \u8fd9\u91cc\u8c03\u7528\u4e86\u4e00\u4e2a\u5168\u5c40\u4e0b\u7684\u81ea\u7531\u51fd\u6570\n++::a;   // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u5168\u5c40\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\ncout << a << \" \" << ::a << \"\\n\";\n}\n\nint main(){\nS k;\nk.f(); }\n
"},{"location":"tech_accu/language/cpp/Part0/#3x-\u51fd\u6570\u7684\u91cd\u8f7doverload","title":"[3.x] \u51fd\u6570\u7684\u91cd\u8f7dOverload","text":"

\u53ef\u4ee5\u5b58\u5728\u51fd\u6570\u540d\u76f8\u540c\u4f46\u662f\u53c2\u6570\u8868\u4e0d\u540c\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5373\u51fd\u6570\u7684\u91cd\u8f7d\u3002

\u7c7b\u4f3cGolang\u7684interface\uff0c\u53c2\u6570\u8868\u5b8c\u5168\u7b26\u5408\u54ea\u4e2a\u5c31\u6267\u884c\u54ea\u4e2a(\u51fa\u73b0\u6b67\u4e49\u65f6\u4f1a\u629b\u51fa\u9519\u8bef)

int k(int x){ return x; }\n\nchar k(long x){ return 'a'; }\n\nint main(){\ncout << k(1L);   // \u8f93\u51fa\uff1aa\ncout << k(1);    // \u8f93\u51fa\uff1a1\n}\n
"},{"location":"tech_accu/language/cpp/Part0/#4x-\u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570default-argument","title":"[4.x] \u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570Default Argument","text":"

\u5f62\u5f0f\uff1avoid fun(int a = 0);

// \u5408\u6cd5\nvoid fun(int x,int y);\n\nvoid fun(int x = 1,int y = 2){\n// ...\n}\n
// \u975e\u6cd5\uff0c\u56e0\u4e3ax\u4e0d\u80fd\u5728y\u524d\nvoid fun(int x = 1,int y); void fun(int x,int y = 2){\n// ...\n}\n
// \u5408\u6cd5\nvoid fun(int x = 1,int y = 2);\n\nvoid fun(int x,int y){\n// ...\n}\n
"},{"location":"tech_accu/language/cpp/Part0/#5x-\u5185\u8054\u51fd\u6570inline","title":"[5.x] \u5185\u8054\u51fd\u6570inline","text":"

\u4e3b\u8981\u4f5c\u7528\u662f\u5728\u51fd\u6570\u4f18\u5316\u4e0a\uff0c\u6548\u679c\u662f\u727a\u7272\u7a7a\u95f4\u6362\u6548\u7387\uff0c\u9002\u7528\u4e8e\u77ed\u5c0f\u4e14\u9891\u7e41\u4f7f\u7528\u7684\u51fd\u6570\u4ee3\u7801

\u5b9e\u73b0\u5c31\u662f\u7f16\u8bd1\u5668\u628a\u51fd\u6570\u5185\u5bb9\u8d34\u5230\u8c03\u7528\u51fd\u6570\u7684\u5730\u65b9\u6765\u51cf\u5c11\u6808\u6d88\u8017

"},{"location":"tech_accu/language/cpp/Part0/#6x-const","title":"[6.x] const","text":"

const\u5bf9\u6570\u636e\u7684\u4fdd\u62a4\u51fa\u73b0\u5728\u7f16\u8bd1\u65f6\u523b\uff0c\u5982\u679c\u5f3a\u884c\u901a\u8fc7\u67d0\u79cd\u624b\u6bb5\u83b7\u53d6\u5176\u5730\u5740\uff0c\u4ecd\u7136\u53ef\u4ee5\u4fee\u6539\uff0c\u7f16\u8bd1\u5668\u4ec5\u4ec5\u4fdd\u8bc1const\u4fee\u9970\u8fc7\u7684\u53d8\u91cf\u9664\u4e86\u5b9a\u4e49\u65f6\uff0c\u4e0d\u80fd\u4f5c\u4e3a\u5de6\u503c

"},{"location":"tech_accu/language/cpp/Part0/#7x-static","title":"[7.x] static","text":"

\u867d\u7136\u5728\u5355\u4e2a\u6587\u4ef6\u5185\uff0c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u58f0\u660e\u987a\u5e8f\u53ef\u4ee5\u786e\u8ba4\uff0c\u4f46\u6587\u4ef6\u95f4\u7684\u987a\u5e8f\u65e0\u6cd5\u786e\u8ba4\uff0c\u8fd9\u53ef\u80fd\u9020\u6210\u4f9d\u8d56\u95ee\u9898\uff0c\u6240\u4ee5\u5c3d\u53ef\u80fd\u907f\u514d\u591a\u6587\u4ef6\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f9d\u8d56\u5173\u7cfb

"},{"location":"tech_accu/language/cpp/Part0/#8x-\u547d\u540d\u7a7a\u95f4namespace--using\u5173\u952e\u5b57","title":"[8.x] \u547d\u540d\u7a7a\u95f4namespace & using\u5173\u952e\u5b57","text":"

\u53ef\u4ee5\u7528namespace\u6765\u5c01\u88c5\u4ee3\u7801

namespace <Space Name>{\n// \u5185\u5bb9\n} 

\u5728\u4e4b\u540e\u4f7f\u7528\u91cc\u9762\u7684\u53d8\u91cf/\u51fd\u6570\u9700\u8981\u4f7f\u7528\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26::\uff0c\u5373<Space Name>::<Function Name>();

"},{"location":"tech_accu/language/cpp/Part0/#9x-\u5de6\u503c\u4e0e\u53f3\u503c\u53f3\u503c\u5f15\u7528","title":"[9.x] \u5de6\u503c\u4e0e\u53f3\u503c&\u53f3\u503c\u5f15\u7528","text":""},{"location":"tech_accu/standard/","title":"\u6249\u9875","text":"

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/standard/BVH_format/","title":"BVH \u683c\u5f0f\u8be6\u89e3","text":"

\u7ea6 1312 \u4e2a\u5b57 116 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

"},{"location":"tech_accu/standard/BVH_format/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

BVH \u8868\u793a Biovision Hierarchy Data\uff0c\u662f Biovision \u52a8\u6355\u8bbe\u5907\u7684\u6570\u636e\u8f93\u51fa\u683c\u5f0f\uff0c\u662f BVA \u683c\u5f0f\u7684\u6539\u8fdb\uff0c\u5e7f\u6cdb\u5e94\u7528\u4e8e\u52a8\u753b\u5236\u4f5c\u8f6f\u4ef6\u3002\u800c\u8be5\u683c\u5f0f\u4ee5\u6587\u672c\u5f62\u5f0f\u50a8\u5b58\uff0c\u6240\u4ee5\u4fbf\u4e8e\u5f00\u53d1\u3002 \u4ece\u9700\u6c42\u7684\u89d2\u5ea6\u6765\u8bb2\uff0c\u4e3a\u4e86\u4f18\u96c5\u5730\u89e3\u51b3\u52a8\u753b\u5236\u4f5c\u95ee\u9898\uff0c\u5b83\u88ab\u5206\u4e3a\u4e86\u201c\u8499\u76ae\u201d\u548c\u201c\u9aa8\u9abc\u201d\u4e24\u4e2a\u90e8\u5206\u3002\u800c BVH \u5c31\u8d1f\u8d23\u5b58\u50a8 \u9aa8\u9abc\u67b6\u7ed3\u6784 \u548c \u52a8\u4f5c\u4fe1\u606f\u3002 BVH \u683c\u5f0f\u603b\u4f53\u6765\u8bf4\u6bd4\u8f83\u4f18\u79c0\uff0c\u4f46\u662f\u7f3a\u4e4f\u5bf9\u8fd0\u52a8\u65f6\u7684\u9aa8\u67b6\u59ff\u52bf\u7684\u5b8c\u6574\u89e3\u91ca\u3002\u56e0\u4e3a BVH \u662f\u901a\u8fc7 \u504f\u79fb(Offset) \u6765\u63cf\u8ff0\u8fd0\u52a8\u7684\uff0c\u5373\u4fdd\u5b58\u7684\u662f\u6bcf\u4e00\u5e27\u5173\u952e\u8282\u70b9\u5bf9\u4e8e\u7236\u8282\u70b9\u7684\u76f8\u5bf9\u4f4d\u79fb\u3002

"},{"location":"tech_accu/standard/BVH_format/#\u6587\u4ef6\u89e3\u6790","title":"\u6587\u4ef6\u89e3\u6790","text":"

A BVH file has two parts, a header section which describes the hierarchy and initial pose of the skeleton; and a data section which contains the motion data.

BVH \u6587\u4ef6\u6570\u636e\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

\u5e76\u4e14\u4ee5\u9012\u5f52\u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002 \u4e0b\u9762\u7ed9\u51fa\u4e00\u4e2a\u793a\u4f8b\u6587\u4ef6\uff0c\u7136\u540e\u505a\u8fdb\u4e00\u6b65\u5206\u6790\u3002

Summary
HIERARCHY\nROOT Hips\n{\nOFFSET  0.00    0.00    0.00\nCHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation\nJOINT Chest\n{\nOFFSET   0.00    5.21    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Neck\n{\nOFFSET   0.00    18.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Head\n{\nOFFSET   0.00    5.45    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00    3.87    0.00\n}\n}\n}\nJOINT LeftCollar\n{\nOFFSET   1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftUpArm\n{\nOFFSET   5.54    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowArm\n{\nOFFSET   0.00   -11.96   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftHand\n{\nOFFSET   0.00   -9.93    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\nJOINT RightCollar\n{\nOFFSET  -1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightUpArm\n{\nOFFSET  -6.07    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowArm\n{\nOFFSET   0.00   -11.82   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightHand\n{\nOFFSET   0.00   -10.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\n}\nJOINT LeftUpLeg\n{\nOFFSET   3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowLeg\n{\nOFFSET   0.00   -18.34   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftFoot\n{\nOFFSET   0.00   -17.37   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.46    0.00\n}\n}\n}\n}\nJOINT RightUpLeg\n{\nOFFSET  -3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowLeg\n{\nOFFSET   0.00   -17.63   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightFoot\n{\nOFFSET   0.00   -17.14   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.75    0.00\n}\n}\n}\n}\n}\nMOTION\nFrames:    2\nFrame Time: 0.033333\n8.03     35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.00   7.81     35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00   

\u8be5\u6837\u4f8b\u7ed9\u51fa\u4e86\u8fd9\u6837\u4e00\u4e2a\u9aa8\u67b6\uff1a

\\[ vR = vYXZ\\\\ vM= vM_{child}M_{parent}M_{grandparent}... \\]"},{"location":"tech_accu/standard/BVH_format/#header-section","title":"header section","text":"

HIERARCHY\u5173\u952e\u5b57\u6807\u8bc6header section\u7684\u5f00\u59cb\uff0c\u968f\u540e\u5728\u4e0b\u4e00\u884c\u5b9a\u4e49\u4e86\u6839\u8282\u70b9ROOT\uff0c\u800cHips\u5219\u662f\u8be5\u8282\u70b9\u7684\u540d\u79f0\u3002\u89c2\u5bdf\u4e0a\u65b9\u7ed9\u51fa\u7684\u9aa8\u67b6\u793a\u610f\u56fe\uff0cHips\u8282\u70b9\u4f5c\u4e3a\u6574\u4e2a\u9aa8\u67b6\u7684\u6839\u8282\u70b9\uff0c\u4fdd\u8bc1\u4e86\u6574\u4e2a\u6811\u5f62\u56fe\u7684\u6700\u5927\u6df1\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff0c\u51cf\u5c0f\u8bef\u5dee\u3002

\u5176\u540e\u7ed9\u51fa\u4e86OFFSET\u548cCHANNELS\u4e24\u4e2a\u5c5e\u6027\u3002

\u800c\u5728\u5176\u540e\uff0c\u4ee5JOINT\u4e3a\u5173\u952e\u5b57\u53c8\u8868\u793a\u4e86\u5176\u5b50\u8282\u70b9\u7684\u5b9a\u4e49\uff0c\u5373\u4ee5 \u9012\u5f52 \u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002

\u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a

\u800c\u5728\u9012\u5f52\u5b9a\u4e49\u7684\u672b\u7aef\uff0c\u4f60\u4f1a\u53d1\u73b0\u4e00\u4e2aEnd Site\uff0c\u5b83\u53ea\u6709OFFSET\u5c5e\u6027\u800c\u6ca1\u6709CHANNELS\u5c5e\u6027\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

One last note about the BVH hierarchy, the world space is defined as a right handed coordinate system with the Y axis as the world up vector. Thus you will typically find that BVH skeletal segments are aligned along the Y or negative Y axis (since the characters are often have a zero pose where the character stands straight up with the arms straight down to the side).

\u5373\u4e16\u754c\u5750\u6807\u7cfb\u4e00\u822c\u662f\u4e00\u4e2a\\(y\\)\u8f74\u671d\u4e0a\u7684\u53f3\u624b\u7cfb\uff0c\u5e76\u4e14\u9aa8\u67b6\u7684\u521d\u59cb\u59ff\u52bf\u603b\u662f T-Pose \uff0c\u5373\u4eba\u6253\u5f00\u53cc\u624b\uff0c\u50cf\u5b57\u6bcdT\u4e00\u6837\u7ad9\u5728\u5730\u4e0a\u3002

"},{"location":"tech_accu/standard/BVH_format/#data-section","title":"data section","text":"

MOTION\u5173\u952e\u5b57\u6807\u8bc6data section\u7684\u5f00\u59cb\uff0c\u4e4b\u540e\u4e24\u884c\u5206\u522b\u662fFrames\u548cFrame Time\uff0c\u8868\u793a \u5e27\u6570 \u548c \u5e27\u6570\u957f\u5ea6\uff08\u5373\u5e27\u7387\u5012\u6570\uff0c0.033333\u5c31\u662f30\u5e27\uff09\u3002 \u800c\u518d\u4e4b\u540e\uff0c\u5219\u662f\u771f\u6b63\u7684\u52a8\u753b\u6570\u636e\uff0c\u6839\u636eheader section\u7ed9\u51fa\u7684\u901a\u9053\u5b9a\u4e49\u4f9d\u6b21\u6765\u7ed9\u51fa\u6bcf\u4e00\u5e27\u7684\u76f8\u5bf9\u53d8\u5316\u6570\u636e\u3002

"},{"location":"tech_accu/standard/BVH_format/#\u7406\u89e3","title":"\u7406\u89e3","text":"

\u6839\u636e\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0cheader section\u7c7b\u4f3c\u4e8e\u5c06\u4e00\u6839\u6839\u68d2\u710a\u63a5\u5728\u80fd\u591f\u81ea\u7531\u65cb\u8f6c\u7684\u8282\u70b9\u4e0a\uff0c\u5e76\u89c4\u5b9a\u6570\u636e\u7684\u7ec4\u7ec7\u987a\u5e8f\uff0c\u5373\u89e3\u51b3\u4e86\u9aa8\u67b6\u201c\u957f\u4ec0\u4e48\u6837\u201d\u7684\u95ee\u9898\uff0c\u5e76\u6307\u5bfc\u5982\u4f55\u63cf\u8ff0\u9aa8\u67b6\u201c\u600e\u4e48\u52a8\u201d\uff1b \u800cdata section\u5219\u7c7b\u4f3c\u4e8e\u6309\u7167header section\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0c\u5177\u4f53\u8be5\u5982\u4f55\u6539\u53d8\u5404\u4e2a\u8282\u70b9\u7684\u72b6\u6001\u3002 \u9664\u4e86\u53d1\u9001\u7ed9ROOT\u7684\u4f4d\u7f6e\u5750\u6807\u6765\u8868\u793a\u9aa8\u67b6\u7684\u4f4d\u79fb\uff08\u5e73\u79fb\u77e9\u9635\uff09\uff0c\u4e4b\u540e\u7684\u4e00\u7cfb\u5217\u6570\u636e\u90fd\u8868\u793a\u8be5\u8282\u70b9\u8be5\u5982\u4f55\u65cb\u8f6c\uff08\u65cb\u8f6c\u77e9\u9635\uff09\uff0c\u90a3\u4e48\u7406\u6240\u5f53\u7136\u7684\uff0c\u8fd9\u4e2a\u8282\u70b9\u7684\u6240\u6709\u5b50\u8282\u70b9\u90fd\u4f1a\u4ee5\u8fd9\u4e2a\u8282\u70b9\u4e3a\u4e2d\u5fc3\u8fdb\u884c\u76f8\u5e94\u7684\u65cb\u8f6c\uff1b\u6bcf\u6b21\u9012\u5f52\u90fd\u91cd\u590d\u8fd9\u6837\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u6307\u6325\u6574\u4e2a\u9aa8\u67b6\u7684\u53d8\u6362\u3002 \u90a3\u4e48\uff0c\u5b9e\u9645\u4e0a\uff0c\u6bcf\u4e00\u4e2a\u8282\u70b9\u76f8\u5bf9\u4e8e\u6839\u8282\u70b9\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e9b\u53d8\u6362\u77e9\u9635\u6309\u7167\u987a\u5e8f\u7d2f\u4e58\u5f97\u5230\u3002

"},{"location":"tech_accu/standard/BVH_format/#\u53c2\u8003\u8d44\u6599","title":"\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/","title":"\u6249\u9875","text":"

\u7ea6 15 \u4e2a\u5b57

\u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

"},{"location":"tech_accu/tool/Colab/","title":"Google Colaboratory","text":"

\u7ea6 477 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

\u7b80\u4ecb

Google Colab \u662f\u4e00\u4e2a\u5141\u8bb8\u7f16\u5199\u548c\u6267\u884c\u4ee3\u7801\u7684\u4ea4\u4e92\u5f0f\u73af\u5883\uff0c\u4ee5\u4e0b\u662f\u5206\u522b\u4e3a Colab \u7684\u7f51\u5740\u4ee5\u53ca\u5b98\u65b9 Q&A\u3002

\u5bf9\u6211\u6765\u8bf4\uff0cGolab \u4e3a\u6211\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6bd4\u8f83\u65b9\u4fbf\u4e14\u6709\u4e00\u5b9a\u7b97\u529b\u7684\u5728\u7ebf\u5e73\u53f0\uff0c\u800c\u4e14\u6211\u89c9\u5f97\u4f5c\u4e3a\u7b14\u8bb0\u672c\u8c8c\u4f3c\u4e5f\u633a\u597d\u7528\u7684\u3002

\u7b80\u5355\u6765\u8bf4\uff0cColab \u4e2d\u5b58\u5728 \u6587\u672c\u5355\u5143 \u548c \u4ee3\u7801\u5355\u5143 \u8fd9\u4e24\u79cd\u6a21\u5757\u3002

\u4ece\u7528\u9014\u4e0a\u6765\u8bb2\uff0cColab \u5728\u6570\u636e\u79d1\u5b66\u548c\u673a\u5668\u5b66\u4e60\u8fd9\u4e24\u65b9\u9762\u6709\u8f83\u5927\u7528\u5904\u3002

"},{"location":"tech_accu/tool/Colab/#\u6587\u4ef6\u4e92\u52a8","title":"\u6587\u4ef6\u4e92\u52a8","text":"

Colab \u81ea\u5e26\u6587\u4ef6\u6d4f\u89c8\u754c\u9762

\u901a\u8fc7\u8fd9\u4e09\u4e2a\u6309\u94ae\u53ef\u4ee5\u5b9e\u73b0 \u4e0a\u4f20\u6587\u4ef6\u3001\u5237\u65b0\u3001\u88c5\u8f7d Google \u4e91\u76d8\uff1a

"},{"location":"tech_accu/tool/Colab/#\u786c\u4ef6\u52a0\u901f","title":"\u786c\u4ef6\u52a0\u901f","text":"

\u5173\u4e8eGPU\u52a0\u901f\u7684\u5177\u4f53\u4fe1\u606f\uff0c\u8bf7\u67e5\u770b\u8fd9\u91cc \ud83d\udd17\u3002

"},{"location":"tech_accu/tool/Colab/#\u8d44\u6e90\u9650\u5236","title":"\u8d44\u6e90\u9650\u5236","text":""},{"location":"tech_accu/tool/Colab/#\u5947\u6280\u6deb\u5de7","title":"\u5947\u6280\u6deb\u5de7","text":""},{"location":"tech_accu/tool/Colab/#\u5360\u7528\u663e\u5b58","title":"\u5360\u7528\u663e\u5b58","text":"

\u5f53\u4f60\u7684\u6574\u4e2a\u9879\u76ee\u9700\u8981GPU\u4f46\u662f\u73b0\u5728\u4e0d\u592a\u9700\u8981\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u8fd9\u6837\u4e00\u6bb5\u4ee3\u7801\u6765\u5148\u5360\u7528\u4e00\u90e8\u5206\u663e\u5b58\u3002

import torch\n## about 1.1 GB\na = torch.Tensor([1000, 1000, 1000]).cuda()\n
"},{"location":"tech_accu/tool/Colab/#\u67e5\u770b\u663e\u5361\u4fe1\u606f","title":"\u67e5\u770b\u663e\u5361\u4fe1\u606f","text":"
!nvidia-smi\n
"},{"location":"tech_accu/tool/Colab/#\u6302\u8f7d-google-drive","title":"\u6302\u8f7d Google Drive","text":"
from google.colab import drive\ndrive.mount('/content/drive/')\n
"},{"location":"tech_accu/tool/Colab/#\u53ef\u53c2\u8003\u8d44\u6599","title":"\u53ef\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/Colab/#\u5176\u4ed6\u8d44\u6599","title":"\u5176\u4ed6\u8d44\u6599","text":""},{"location":"tech_accu/tool/Git/","title":"Git","text":"

\u7ea6 67 \u4e2a\u5b57

Git \u662f\u4ee3\u7801\u534f\u4f5c\u7684\u91cd\u8981\u5de5\u5177\uff0c\u540c\u65f6\u4e5f\u5bf9\u4e2a\u4eba\u4ee3\u7801\u7684\u7248\u672c\u7ba1\u7406\u6709\u91cd\u8981\u4f5c\u7528\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bf4 Git \u662f\u7834\u5199\u4ee3\u7801\u7684\u4eba\u7684\u5fc5\u5907\u6280\u80fd\u4e4b\u4e00\u3002

List

"},{"location":"tech_accu/tool/Git/Commands/","title":"Git Commands","text":"

\u7ea6 1464 \u4e2a\u5b57 110 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 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\u5c06\u628a\u76ee\u5149\u653e\u5728\u5177\u4f53\u7684git \u547d\u4ee4 \u7684\u4ecb\u7ecd\u4e0e\u4f7f\u7528\uff0c\u65e8\u5728\u6307\u5bfc\u8fdb\u884c\u5177\u4f53\u7684\u5de5\u4f5c\u3002

Git \u6709\u8bb8\u591a\u547d\u4ee4\uff0c\u4f46\u662f\u5176\u5b9e\u5e38\u7528\u7684\u5c31\u56fe\u4e2d\u7684\u8fd9\u4e48\u51e0\u4e2a\uff0c\u751a\u81f3\u5728 \u521a\u5f00\u59cb \u5b66\u4e60\u4f7f\u7528\u7684\u65f6\u5019\u53ea\u9700\u8981\u8bb0\u4f4f\u5176\u4e2d\u7684\u4e00\u4e24\u4e2a\uff0c\u4f46\u662f

\u8fd9\u5e76\u4e0d\u662f\u8bf4\u5176\u4ed6\u547d\u4ee4\u5c31\u662f\u6ca1\u7528\u7684\uff0c\u6211\u4f1a\u5728\u8fd9\u91cc\u6309\u7167\u4f7f\u7528\u573a\u666f\u5206\u7c7b\uff0c\u5c3d\u53ef\u80fd\u5730\u4ecb\u7ecd Git \u547d\u4ee4\u3002

\u5e38\u7528\u547d\u4ee4

\u7531\u4e8e\u4e00\u822c\u6765\u8bf4\u8fd0\u884c\u547d\u4ee4\u90fd\u662f\u4ee5\u672c\u5730\u89c6\u89d2\uff0c\u6240\u4ee5\u8fd9\u91cc\u7684\u300c\u4f7f\u7528\u573a\u666f\u300d\u7684\u5212\u5206\u4e5f\u662f\u4ee5\u672c\u5730\u89c6\u89d2\u5c55\u5f00\u7684\u3002 \u5e76\u4e14\u5728\u67d0\u4e9b\u9700\u8981\u6d89\u53ca\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5730\u65b9\u4e3b\u8981\u4ee5 Github \u7684\u4f7f\u7528\u4e3a\u53c2\u8003\u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u7b80\u6d01\u7248\u672c","title":"\u7b80\u6d01\u7248\u672c","text":"

\u8be5\u6761\u76ee\u4e3b\u8981\u9002\u7528\u4e8e\u521d\u5b66\u4e0e\u7b80\u5355\u4f7f\u7528 Git \uff0c\u5e76\u4e0d\u9002\u5408\u957f\u671f\u7ef4\u62a4\u7684\u5927\u578b\u9879\u76ee\u3002

\u5feb\u9910
# \u5728 Github \u521b\u5efa\u4ed3\u5e93\n# \u83b7\u53d6\u4ed3\u5e93\u7684 http / SSH clone \u547d\u4ee4\n\n# \u4ece\u8fdc\u7a0b\u5c06\u4ed3\u5e93\u514b\u9686\u5230\u672c\u5730\ngit clone <repo-url>\n\n# \u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u540e\u5c06\u4fee\u6539\u6dfb\u52a0\u5230\u6682\u5b58\u533a\ngit add -A # \u6dfb\u52a0\u6240\u6709\u4fee\u6539\ngit add .  # \u6dfb\u52a0\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u4fee\u6539\n\n# \u63d0\u4ea4\u4fee\u6539\ngit commit -m \"Write commit message here.\"\n\n# push \u5230\u8fdc\u7a0b\u4ed3\u5e93\ngit push origin\n
"},{"location":"tech_accu/tool/Git/Commands/#\u914d\u7f6e","title":"\u914d\u7f6e","text":"

Git \u7684\u914d\u7f6e\u6587\u4ef6\u540d\u53eb .gitconfig\uff0c\u7528\u6765\u5b58\u653e\u4e00\u4e9b\u914d\u7f6e\u4fe1\u606f\uff0c\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u7684\u4e3a\u5168\u5c40\u914d\u7f6e\u4fe1\u606f\uff0c\u800c\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u7684\u5219\u4e3a\u9879\u76ee\u914d\u7f6e\u4fe1\u606f\u3002

# \u663e\u793a\u914d\u7f6e\ngit config --list\n
"},{"location":"tech_accu/tool/Git/Commands/#\u751f\u6210\u672c\u5730\u4ed3\u5e93","title":"\u751f\u6210\u672c\u5730\u4ed3\u5e93","text":"

\u672c\u5730\u751f\u6210\u4ed3\u5e93\u4e3b\u8981\u6709\u4e24\u79cd\u9014\u5f84\uff0c\u4e00\u662f\u5728\u672c\u5730\u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\uff0c\u800c\u662f\u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\u3002

# \u5728\u5f53\u524d\u76ee\u5f55 . \u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\ngit init\n\n# \u521b\u5efa\u4e00\u4e2a\u540d\u4e3a <dir-name> \u7684\u76ee\u5f55\uff0c\u5c06\u5176\u521d\u59cb\u5316\u4e3a\u4e00\u4e2a Git \u4ed3\u5e93\ngit init <dir-name>\n\n# \u4ece <repo-url> \u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\uff08\u5305\u62ec\u6240\u6709\u7684 git \u4fe1\u606f\uff09\ngit clone <repo-url>\n

\u4ece\u6587\u4ef6\u89d2\u5ea6\u6765\u8bb2\uff0c\u5b9e\u9645\u4e0a\u5b83\u662f\u751f\u6210\u4e86\u4e00\u4e2a\u6709.git\u6587\u4ef6\u5939\u7684\u6587\u4ef6\u5939\uff0c\u800c.git\u6587\u4ef6\u5939\u5b58\u50a8\u4e86 Git \u6240\u9700\u8981\u7684\u5927\u90e8\u5206\u4fe1\u606f\u3002 \u4f7f\u7528\u5e38\u89c1\u7684 shell \u8fdb\u5165\u4ed3\u5e93\u6587\u4ef6\u5939\u540e\uff0c\u4e00\u822c\u4f1a\u6709\u4e00\u4e2a label \u8868\u793a\u4f60\u5df2\u7ecf\u8fdb\u5165\u4e86\u4e00\u4e2a\u4ed3\u5e93\u7684\u67d0\u4e2a\u5206\u652f\u4e86\u3002\u6bd4\u5982\u8fdb\u5165\u4e00\u4e2a\u65b0\u7684\u4ed3\u5e93\u65f6\uff0c\u4f1a\u6709\u4e00\u4e2amaster\u7684 label \uff0c\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u4e3b\u8981\u770b\u4f60\u7684 shell \u548c\u4e3b\u9898\u4e86\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u672c\u5730\u76f4\u63a5\u521b\u5efa\u7684\u4ed3\u5e93\u4ec5\u4ec5\u53ea\u662f\u4e00\u4e2a\u672c\u5730\u4ed3\u5e93\uff0c\u4e0d\u5177\u5907\u8fdc\u7a0b\u534f\u4f5c\u529f\u80fd\uff0c\u9700\u8981\u8fdb\u884c\u5bf9\u5e94\u7684\u914d\u7f6e\uff0c\u53c2\u8003 \"Git Workflow\" \u6761\u76ee\uff1b\u800c\u4e00\u822c\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u514b\u9686\u4e0b\u6765\u7684\u4ed3\u5e93\u90fd\u5df2\u7ecf\u7ecf\u8fc7\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u8fdc\u7a0b\u534f\u4f5c\u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u7248\u672c\u7ba1\u7406","title":"\u7248\u672c\u7ba1\u7406","text":"

Git \u57fa\u4e8e\u7248\u672c\u4e4b\u95f4\u7684\u5dee\u5f02\u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\uff0c\u4f7f\u7528 Git \u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\u4e3b\u8981\u6307\u5728\u505a\u5b8c\u7279\u5b9a\u4fee\u6539\u4ee5\u540e\u5c06\u5176\u6dfb\u52a0\u5230\u5bf9\u5e94\u5206\u652f\u4e2d\u3002 \u5728\u8003\u8651 Git \u64cd\u4f5c\u4e4b\u524d\uff0c\u4f60\u53ef\u4ee5\u653e\u5fc3\u5730\u8fdb\u884c\u4f60\u7684\u4ee3\u7801\u7f16\u8f91\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8bb0\u5f97\u5728\u5408\u9002\u7684\u65f6\u673a\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","title":"\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","text":"

\u901a\u8fc7\u5982\u4e0b\u6307\u4ee4\u53ef\u4ee5 \u67e5\u770b\u5dee\u5f02\u6587\u4ef6\uff1a

# \u663e\u793a\u68c0\u6d4b\u5230\u5dee\u5f02\u7684\u6587\u4ef6\uff0c\u5b83\u4eec\u6b63\u5728\u7b49\u5f85\u88ab\u63d0\u4ea4\ngit status\n
"},{"location":"tech_accu/tool/Git/Commands/#\u6dfb\u52a0\u5230\u6682\u5b58\u533a","title":"\u6dfb\u52a0\u5230\u6682\u5b58\u533a","text":"

\u5728\u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u5de5\u4f5c\u540e\u9700\u8981\u5c06\u4ee3\u7801 \u6dfb\u52a0 \u5230\u6682\u5b58\u533a\uff1a

# \u5c06 <target> \u4e2d\u7684\u4fee\u6539\u6dfb\u52a0\u7684\u6682\u5b58\u533a\uff0c\u6587\u4ef6\u5939\u548c\u6587\u4ef6\u540c\u7406\uff0c'.' \u540c\u7406 \ngit add <target>\n\n# \u5bf9\u4e8e\u6240\u6709\u7684\u4fee\u6539\u4f9d\u6b21\u8fdb\u884c\u6dfb\u52a0\u786e\u8ba4\uff08\u5305\u62ec\u5355\u4e00\u6587\u4ef6\u7684\u591a\u5904\u4fee\u6539\uff09\ngit add -p\n\n# \u7528\u4ea4\u4e92\u5f0f\u7684\u65b9\u6cd5\u8fdb\u884c\u6dfb\u52a0\ngit add -i\n
"},{"location":"tech_accu/tool/Git/Commands/#\u63d0\u4ea4\u5230\u4ed3\u5e93","title":"\u63d0\u4ea4\u5230\u4ed3\u5e93","text":"

\u6dfb\u52a0\u5b8c\u540e\u9700\u8981\u8fdb\u884c \u63d0\u4ea4\uff0c\u5728\u4ed3\u5e93\u4e2d\u5f62\u6210\u4e00\u4e2a\u8282\u70b9\uff1a

# \u63d0\u4ea4\u5230\u4ed3\u5e93\ngit commit -m \"Write commit message here.\"\n\n# \u4fee\u6b63\u4e0a\u4e00\u6b21\u63d0\u4ea4\uff0c\u610f\u601d\u662f\u8bf4\u4f1a\u6269\u5145\u5e76\u66ff\u4ee3\u4e0a\u4e00\u6b21\u63d0\u4ea4\n# \u5e94\u7528\u573a\u666f\u5982\uff1a\u4e0a\u4e00\u6b21\u63d0\u4ea4\u6709\u9057\u6f0f\u3001\u4e0a\u4e00\u6b21\u63d0\u4ea4\u7684\u63d0\u4ea4\u4fe1\u606f\u6709\u95ee\u9898\u7b49\ngit commit --amend -m \"Write commit message here.\"\n
"},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","title":"\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","text":"

\u5b8c\u6210\u63d0\u4ea4\u540e\u8fd9\u4e00\u6b21\u4fee\u6539\u5c31\u4f1a\u88ab\u5199\u5165\u5386\u53f2\u8bb0\u5f55\u4e2d\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7log\u6765 \u67e5\u770b\uff1a

git log\n
"},{"location":"tech_accu/tool/Git/Commands/#\u56de\u6eaf--\u62b5\u6d88\u8bb0\u5f55","title":"\u56de\u6eaf / \u62b5\u6d88\u8bb0\u5f55","text":"

\u5728log\u4e2d\u53ef\u4ee5\u67e5\u8be2\u5f97\u5230\u6bcf\u4e00\u6b21commit\u7684\u54c8\u5e0c\uff0c\u5f97\u5230\u8fd9\u4e9b\u54c8\u5e0c(\u4e5f\u53ef\u4ee5\u4f7f\u7528\u6807\u7b7e)\u4ee5\u540e\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8fdb\u884c \u56de\u6eaf \u548c \u62b5\u6d88 \u64cd\u4f5c\uff1a

# \u56de\u6eaf\u5230\u7279\u5b9a commit \uff0c\u6bd4\u8f83\u5371\u9669\ngit reset HEAD                  # \u56de\u6eaf\u5230\u4e0a\u4e00\u4e2a commit \uff0c\u6548\u679c\u4e0a\u6e05\u7a7a\u4e86\u6682\u5b58\u533a\uff0c\u4e0d\u5f71\u54cd\u5de5\u4f5c\u533a\ngit reset --hard <commit-id>    # \u629b\u5f03\u5f53\u524d\u7684\u5de5\u4f5c\u533a\u5e76\u56de\u6eaf\u5230\u67d0\u4e2a\u7248\u672c\n\n# \u62b5\u6d88\u4e00\u6b21 commit \uff0c\u4ea7\u751f\u4e00\u4e2a\u4e0e\u76ee\u6807 commit \u4e92\u9006\u7684 commit\ngit revert HEAD                     # \u62b5\u6d88\u4e0a\u4e00\u6b21 commit\ngit revert <commit-id>              # \u62b5\u6d88\u7279\u5b9a commit\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5220\u9664--\u79fb\u52a8\u91cd\u547d\u540d","title":"\u5220\u9664 / \u79fb\u52a8(\u91cd\u547d\u540d)","text":"

\u5220\u9664 \u6587\u4ef6\u548c \u79fb\u52a8(\u91cd\u547d\u540d) \u6587\u4ef6\u53ef\u4ee5\u4f7f\u7528rm\u548cmv\uff0c\u5173\u4e8erm(mv)\u548cgit rm(git mv)\u7684\u533a\u522b\u53ef\u4ee5\u770b\u8fd9\u91cc\u3002 \u7b80\u5355\u6765\u8bf4\u5c31\u662f\uff0cgit rm <file>\u7b49\u4ef7\u4e8erm <file> ; git add <file>\uff1bmv\u540c\u7406\uff0c\u4f46\u662f\u4f60\u65e0\u6cd5\u628a\u4e00\u4e2a\u6587\u4ef6\u901a\u8fc7git mv\u79fb\u52a8\u5230 repo dir \u4e4b\u5916\u3002

# \u5220\u9664\u67d0\u4e2a\u6587\u4ef6\ngit rm <file>\n# \u79fb\u52a8(\u91cd\u547d\u540d)\u67d0\u4e2a\u6587\u4ef6\ngit mv <from> <to>\n\n# \u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u8fd8\u53ef\u4ee5\u505c\u6b62\u5bf9\u67d0\u4e2a\u6587\u4ef6\u7684\u8ffd\u8e2a\uff0c\u6700\u5e38\u7528\u7684\u60c5\u51b5\u4e00\u822c\u548c`.gitignore`\u6709\u5173\ngit rm --cache <file>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u6807\u7b7e\u64cd\u4f5c","title":"\u6807\u7b7e\u64cd\u4f5c","text":"

\u4e0a\u9762\u8bb8\u591a\u6d89\u53ca\u5b9a\u4f4d\u7279\u5b9a commit \u7684\u64cd\u4f5c\u90fd\u9700\u8981\u83b7\u53d6 commit \u7684\u54c8\u5e0c\u3002\u4e0d\u8fc7\u5982\u679c\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7248\u672c\u8fdb\u884c\u4e00\u4e9b\u6807\u7b7e\u7ba1\u7406\uff0c\u90a3\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee\u6807\u7b7e\u6765\u7d22\u5f15\u7279\u5b9a commit \uff0c\u56e0\u800c\uff0ctag \u5b9e\u9645\u4e0a\u662f\u4e0d\u53ef\u91cd\u590d\u7684\u3002

# \u4e3a\u7279\u5b9a commit \u6dfb\u52a0 tag\ngit tag <tag name> <commit id>\n\n# \u5220\u9664\u7279\u5b9a tag\ngit tag -d <tag name>\n

\u53e6\u5916\uff0c\u9700\u8981\u63d0\u9192\u7684\u662f\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0bgit push\u4e0d\u4f1a\u5c06 tag \u4e0a\u4f20\u5230\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u9700\u8981\u5728\u547d\u4ee4\u540e\u52a0\u5165--tags\u6765\u4e00\u6b21\u6027 push \u6240\u6709\u7684 tag \u6216\u8005\u6dfb\u52a0<tag name>\u6765\u4e0a\u4f20 tag \u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u534f\u4f5c","title":"\u8fdc\u7a0b\u534f\u4f5c","text":"

\u8fdc\u7a0b\u7ba1\u7406\u4e3b\u8981\u6307\u591a\u4eba\u9879\u76ee\u65f6\u9700\u8981\u901a\u8fc7\u8fdc\u7a0b\u4ed3\u5e93\u6765\u5b8c\u6210\u534f\u4f5c\u3002\u8fd9\u91cc\u4ee5 GitHub \u4e3a\u4f8b\u3002 \u5f53\u4f60\u5728 Github \u521b\u5efa\u4e00\u4e2a\u7a7a repo \u4ee5\u540e\uff0c\u4f1a\u6709\u8fd9\u6837\u4e00\u4e2a\u9ed8\u8ba4\u9875\u9762\uff1a

IsshikiHugh \u662f\u6211\u7684 User ID\uff0cnothing \u662f\u6211\u7684 Repo Name

\u6211\u4eec\u91cd\u70b9\u5173\u6ce8\u4e2d\u95f4\u4e24\u4e2a\u4ee3\u7801\u6846\uff0c\u5199\u7684\u5df2\u7ecf\u975e\u5e38\u6e05\u695a\u4e86\u3002

create a new repository on the command line\u6307\u5bfc\u4f60\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7a7a\u4ed3\u5e93\uff0c\u5e76\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\u94fe\u63a5\uff1b

push an existing repository from the command line\u6307\u5bfc\u4f60\u5982\u4f55\u5c06\u8fdc\u7a0b\u4ed3\u5e93\u548c\u672c\u5730\u4ed3\u5e93\u94fe\u63a5\u8d77\u6765\uff0c\u5e76 push \u3002

"},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","title":"\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","text":"

\u6765\u81ea GitHub \u7684\u6307\u5bfc\u6587\u4ef6\u4e2d\u6700\u6838\u5fc3\u7684\u4e00\u6761\u6307\u4ee4\u662f\u5982\u4f55\u94fe\u63a5\u672c\u5730\u4ed3\u5e93\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\uff1a

# \u5728\u672c\u5730\u6dfb\u52a0\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u547d\u540d\u4e3a <remote name> \uff0c\u6ce8\u610f\u8fd9\u91cc\u7684 <url> \u5e76\u4e0d\u662f\u6d4f\u89c8\u5668\u4e0a\u9762\n# \u90a3\u4e2a\uff0c\u800c\u662f\u4ece github \u590d\u5236\u8fc7\u6765\u7684 http \u6216\u8005 ssh \u63a8\u9001\ngit remote add <remote name> <url>\n# \u5e38\u7528\u7684 <remote name> \u662f origin\n
\u9664\u6b64\u4e4b\u5916\uff0c\u5173\u4e8e\u8fdc\u7a0b\u4ed3\u5e93\u7684\u76f8\u5173\u547d\u4ee4\u8fd8\u6709\u5982\u4e0b\uff1a
git remote -v                  # \u663e\u793a\u8fdc\u7a0b\u4ed3\u5e93(\u8be6\u7ec6\u4fe1\u606f)\ngit remote rm <remote name>    # \u89e3\u9664\u4e0e\u5bf9\u5e94\u8fdc\u7a0b\u4ed3\u5e93\u7684\u7ed1\u5b9a\u5173\u7cfb\ngit remote rename <from> <to>  # \u91cd\u547d\u540d\u7279\u5b9a\u8fdc\u7a0b\u4ed3\u5e93\n

"},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","title":"\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","text":"

\u4e3b\u8981\u6709\u4e24\u79cd\u65b9\u5f0f\uff0c\u5373pull\u548cfetch\uff0c\u533a\u522b\u5728\u4e8efetch\u5e76\u4e0d\u4f1a\u5408\u5e76\u5185\u5bb9\uff0c\u800c\u4ec5\u4ec5\u662f\u4e0b\u8f7d\u8fdc\u7a0b\u4ed3\u5e93\u4e2d\u7684\u53d8\u52a8\u4fe1\u606f\u3002\u7b80\u5355\u6765\u8bf4\u5c31\u662fpull\u7b49\u6548\u4e8efetch\u5e76merge\u3002

# \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u4e0b\u8f7d\u53d8\u52a8\u5185\u5bb9\ngit fetch <remote name>\n\n# \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u53d8\u52a8\u5185\u5bb9\u5e76\u4e14\u5408\u5e76\u5230\u6307\u5b9a\u5206\u652f\ngit pull <remote name> <branch>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","title":"\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","text":"

\u5728\u672c\u5730\u5b8c\u6210 commit \u64cd\u4f5c\u540e\uff0c\u5c31\u53ef\u4ee5 push \u5230\u8fdc\u7a0b\u4ed3\u5e93\uff1a

# \u63a8\u9001 <branch> \u7684\u5185\u5bb9\u5230 <remote> \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\uff0c\u8fd9\u610f\u5473\u7740\u5728\u8fd9\u4e2a\u5206\u652f\u91cc\uff0c\n# \u4e0b\u4e00\u6b21 push \u53ea\u9700\u8981\u8f93\u5165 git push \u5373\u53ef\ngit push -u <remote> <branch>\n# eg: \u63a8\u9001 master \u5206\u652f\u7684\u5185\u5bb9\u5230 origin \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\ngit push -u origin master\n\ngit push --force    # \u5f3a\u5236\u63a8\u9001\u5f53\u524d\u5206\u652f\uff0c\u5373\u4f7f\u6709\u51b2\u7a81\u5b58\u5728\n--all      # \u63a8\u9001\u6240\u6709\u5206\u652f\u7684\u5185\u5bb9\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u7ba1\u7406","title":"\u5206\u652f\u7ba1\u7406","text":""},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5206\u652f","title":"\u67e5\u770b\u5206\u652f","text":"
git branch        # \u663e\u793a\u672c\u5730\u6240\u6709\u5206\u652f\n-r     # \u663e\u793a\u8fdc\u7a0b\u6240\u6709\u5206\u652f\n-a     # \u663e\u793a\u6240\u6709\u5206\u652f\n
"},{"location":"tech_accu/tool/Git/Commands/#\u65b0\u5efa\u5206\u652f--\u5207\u6362\u5206\u652f--\u8bbe\u7f6e\u4e0a\u6e38","title":"\u65b0\u5efa\u5206\u652f / \u5207\u6362\u5206\u652f / \u8bbe\u7f6e\u4e0a\u6e38","text":"
# \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\uff0c\u4f46\u4e0d\u5207\u6362\ngit branch <branch name>\n# \u901a\u8fc7 checkout \u6765\u5207\u6362\u5206\u652f\uff0c\u6bd4\u5982\u8fdb\u5165\u5230\u521a\u521a\u521b\u5efa\u7684\u5206\u652f\u6c47\u603b\ngit checkout <branch>         # \u8be5\u547d\u4ee4\u4f1a\u66f4\u65b0\u5de5\u4f5c\u533a\n# \u521b\u5efa\u5b8c\u5206\u652f\u540e\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u8bbe\u7f6e\u4e0a\u6e38\ngit branch --set-upstream <local branch> <remote branch>\n\n# \u5c06\u4e0a\u9762\u7684\u547d\u4ee4\u8fdb\u884c\u96c6\u6210\uff0c\u6709\uff1a\n\n# \u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\u5e76\u5207\u6362\ngit checkout -b <branch name>\n# \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <local branch> \u7684\u65b0\u5206\u652f\uff0c\u5e76\u8bbe <remote branch> \u4e3a\u4e0a\u6e38\ngit branch --track <local branch> <remote branch>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5408\u5e76","title":"\u5206\u652f\u5408\u5e76","text":"
# \u5c06\u6307\u5b9a\u5206\u652f\u5408\u5e76\u5230\u5f53\u524d\u5206\u652f\uff0c\u9700\u8981\u5904\u7406\u51b2\u7a81\u90e8\u5206\uff08\u6c9f\u901a\u534f\u5546\u3001\u624b\u52a8\u89e3\u51b3\uff09\ngit merge <branch>\n\n# \u5c06\u7279\u5b9a commit \u5408\u5e76\u8fdb\u5f53\u524d\u5206\u652f\ngit cherry-pick <commit id>\n
"},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5220\u9664","title":"\u5206\u652f\u5220\u9664","text":"
# \u5220\u9664\u672c\u5730\u5206\u652f\ngit branch -d <branch>\n\n# \u5220\u9664\u8fdc\u7a0b\u5206\u652f\ngit push <remote> --delete <branch>\ngit branch -dr <remote>/<branch>\n# eg:\ngit branch -dr origin/testbrach\n
"},{"location":"tech_accu/tool/Git/Commands/#\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684--\u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","title":"\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684 / \u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","text":""},{"location":"tech_accu/tool/Git/Commands/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Git/Workflow/","title":"Git Workflow","text":"

\u7ea6 1267 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

\u7b80\u4ecb

\u672c\u6587\u5185\u5bb9\u57fa\u4e8e\u6211\u81ea\u5df1\u7684\u7406\u89e3\u548c\u4e00\u4e9b\u6587\u7ae0\uff0c\u662f\u5b66\u4e60\u7b14\u8bb0\uff0c\u4f46\u540c\u65f6\u6211\u4e5f\u5e0c\u671b\u5b83\u80fd\u88ab\u4f5c\u4e3a\u4e00\u4e2a\u5b66\u4e60\u53c2\u8003\u8d44\u6599\u3002

\u6240\u4ee5\u5982\u679c\u6709\u9519\u8bef\u8bf7\u53ca\u65f6\u8bc4\u8bba\u6216\u8005\u8054\u7cfb\u6211\uff0c\u5e0c\u671b\u80fd\u4e3a\u5927\u5bb6\u63d0\u4f9b\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u5b66\u4e60\u53c2\u8003\uff01

\u56e0\u4e3a\u6211\u81ea\u5df1\u7684\u5f00\u53d1\u7ecf\u5386\u6709\u9650\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u7406\u89e3\u662f\u5408\u9002\u4e14\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u5e0c\u671b\u5927\u5bb6\u72e0\u72e0\u5730 educate \u6211\uff01

\u672c\u6761\u76ee\u4e3b\u8981\u4ecb\u7ecd\u6709\u5173 Git Workflow \u7684\u6982\u5ff5\u6027\u8d28\u548c\u6307\u5bfc\u6027\u8d28\u7684\u4e00\u4e9b\u5185\u5bb9\uff0c\u5b83\u4eec\u5e76\u4e0d\u5177\u4f53\uff0c\u4f46\u662f\u4f1a\u6307\u5bfc\u60a8\u7684\u4f7f\u7528\u3002

\u7531\u4e8e mkdocs \u5e76\u6ca1\u6709\u6807\u7b7e\u529f\u80fd\uff0c\u6240\u4ee5\u5176\u5b9e\u8fd8\u662f\u8bed\u96c0\u4e0a\u7684\u6587\u7ae0\u66f4\u597d\u770b\uff0c\u4f46\u662f\u6211\u5e76\u4e0d\u6253\u7b97\u66f4\u65b0\u8bed\u96c0\u4e86\uff0c\u6545\u8fd9\u91cc\u53ea\u653e\u4e00\u4e2a\u4ee5\u524d\u7684\u6307\u8def\u94fe\u63a5\uff1a\ud83d\udd17\u3002

Git branch \u53ef\u89c6\u5316\u7ec3\u4e60\u7f51\u7ad9\uff1ahttps://note.isshikih.top/tech_accu/tool/Git/Workflow/

"},{"location":"tech_accu/tool/Git/Workflow/#\u4f55\u4e3a-git-workflow","title":"\u4f55\u4e3a 'Git Workflow'","text":"

Git Workflow \u662f\u4e00\u79cd\u89c4\u8303\u7684\u5de5\u4f5c\u6d41\u7a0b\uff0c\u800c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u5de5\u5177\u6216\u8005\u6280\u672f\uff0c\u5f53\u7136\u8c8c\u4f3c\u6709\u4e00\u4e2a\u53eb\u505a Gitflow \u7684\u5de5\u5177\uff0c\u4f46\u5728\u672c\u6587\u4e2d\u6682\u65f6\u4e0d\u4ecb\u7ecd\u3002 \u73b0\u5728\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684 Workflow \u4e3b\u8981\u6709\u4e09\u79cd\uff1a

\u4ed6\u4eec\u7684\u5173\u7cfb\u662f\uff0c\u4f9d\u6b21\u5438\u6536\u4e0e\u6539\u8fdb\uff0c\u5404\u6709\u7279\u70b9\uff0c\u4e14\u4e0e\u5bf9\u5e94\u7684\u4f7f\u7528\u5e73\u53f0\u76f8\u9002\u5e94\uff0c\u4e0b\u9762\u5c06\u5206\u6761\u6982\u8ff0\u3002 \u5728\u4e0d\u540c\u7684 Workflow \u4e2d\uff0c\u6700\u4e3b\u8981\u7684\u533a\u522b\u5c31\u662f\u4e0d\u540c\u5206\u652f\u95f4\u7684\u5408\u4f5c\u5f62\u5f0f\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u5982\u679c\u4f60\u5bf9 Git \u7684\u5206\u652f\u8fd8\u4e0d\u662f\u5f88\u719f\u6089\uff0c\u8bf7\u5148\u53c2\u8003 Git Commands \u7684\u90e8\u5206\u5185\u5bb9\uff0c\u7b80\u5355\u4e86\u89e3\u4e00\u4e0b\u57fa\u7840\u6307\u4ee4\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#git-workflow_1","title":"Git Workflow","text":"

[Source] https://gitbook.tw/chapters/gitflow/why-need-git-flow

Tips: \u5728\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u4e00\u4e9b\u8bf4\u660e\u65f6\uff0c\u53ef\u4ee5\u8054\u7cfb\u4e0a\u65b9\u8fd9\u5f20\u56fe\u8fdb\u884c\u7406\u89e3\u3002

\u5728 Git Workflow \u4e2d\uff0c\u4e3b\u8981\u6709 5 \u7c7b\u5206\u652f\uff0c\u4ed6\u4eec\u5206\u522b\u662f master hotfix release develop feature\uff0c\u5b83\u4eec\u6709\u7740\u4e0d\u540c\u7684\u4f5c\u7528\u548c\u4f7f\u7528\u89c4\u8303\u3002\u5176\u4e2dmasterdevelop\u662f\u957f\u671f\u5206\u652f\uff0c\u4ed6\u4eec\u4f1a\u968f\u7740\u9879\u76ee\u7684\u7ef4\u62a4\u4e00\u76f4\u5b58\u5728\uff0c\u800chotfixreleasefeature\u8fd9\u4e9b\u77ed\u671f\u5206\u652f\u5219\u4f1a\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u88ab\u5408\u5e76\u6216\u8005\u5220\u9664\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#master-\u5206\u652f\u4e3b\u5206\u652f","title":"Master \u5206\u652f\uff08\u4e3b\u5206\u652f\uff09","text":"

\u76f4\u63a5\u9762\u5411\u4f7f\u7528\u65b9\u7684\u5206\u652f\uff0c\u5728master\u4e2d\u5b58\u653e\u7684\u5e94\u5f53\u662f\u53ef\u4ee5\u4f7f\u7528\u7684\u7a33\u5b9a\u7248\u672c\uff0c\u56e0\u800c\u901a\u5e38\u4e5f\u4f1a\u5728\u5176\u4e2d\u6dfb\u52a0\u7248\u672c\u7f16\u53f7\u3002 \u6211\u4eec\u5e0c\u671b master \u4e2d\u7684\u4ee3\u7801\u603b\u662f\u4ece\u522b\u7684\u5206\u652f\u4e2d\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u800c\u5e76\u4e0d\u5e0c\u671b\u4efb\u4f55\u4eba\u76f4\u63a5 commit \u5230 master \u4e2d\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#develop-\u5206\u652f\u5f00\u53d1\u5206\u652f","title":"Develop \u5206\u652f\uff08\u5f00\u53d1\u5206\u652f\uff09","text":"

\u6240\u6709\u5f00\u53d1\u5de5\u4f5c\u90fd\u57fa\u4e8e\u8be5\u5206\u652f\u8fdb\u884c\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u9879\u76ee\u4ee3\u7801\u7684\u6c47\u6d41\u5904\uff0c\u800c master \u5219\u662f develop \u4e2d\u7279\u5b9a\u8282\u70b9\u53ef\u7528\u53d1\u884c\u3002 \u5f53\u9700\u8981\u6dfb\u52a0\u65b0\u7684\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u9700\u8981\u65b0\u5efa\u4e00\u4e2a feature (\u5982\u56fe)\uff0c\u7136\u540e\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u5408\u5e76\u56de develop\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#hotfix-\u5206\u652f\u8865\u4e01\u5206\u652f","title":"Hotfix \u5206\u652f\uff08\u8865\u4e01\u5206\u652f\uff09","text":"

\u5f53 master \u4e2d\u51fa\u73b0\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u51fa\u95ee\u9898\u7684\u8282\u70b9\u4e3a\u57fa\u7840\u521b\u5efa\u4e00\u4e2a hotfix\uff0c\u7136\u540e\u5728\u8fd9\u4e2a hotfix \u4e2d\u8fdb\u884c bug \u7684\u4fee\u590d\u5de5\u4f5c\u3002 \u5728\u5b8c\u6210\u4fee\u590d\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a\u8fd9\u4e2a hotfix \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop(\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8be5 bug\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#release-\u5206\u652f\u9884\u53d1\u5206\u652f","title":"Release \u5206\u652f\uff08\u9884\u53d1\u5206\u652f\uff09","text":"

\u5f53 develop \u8db3\u591f\u6210\u719f\u65f6\uff0c\u6211\u4eec\u4f1a\u5e0c\u671b\u5b83\u88ab\u5408\u5e76\u5230 master \u4e2d\u4f5c\u4e3a\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53d1\u5e03\uff0c\u4f46\u5728\u8fd9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5728 release \u4e2d\u8fdb\u884c\u6700\u540e\u7684\u6d4b\u8bd5\u548c\u4fee\u6b63\u3002 \u5728\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a release \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop (\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8fd9\u4e9b\u95ee\u9898\u3002

hotfix\u548crelease\u662f\u7c7b\u4f3c\u7684\uff0c\u4ed6\u4eec\u4e00\u4e2a\u662f\u57fa\u4e8emaster\u5bf9\u4e24\u4e2a\u957f\u671f\u5206\u652f\u8fdb\u884c\u7ef4\u62a4\uff0c\u4e00\u4e2a\u662f\u57fa\u4e8edevelop\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#feature-\u5206\u652f\u529f\u80fd\u5206\u652f","title":"Feature \u5206\u652f\uff08\u529f\u80fd\u5206\u652f\uff09","text":"

\u5f53\u6211\u4eec\u9700\u8981\u5f00\u53d1\u65b0\u7684\u529f\u80fd\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u5927\u90e8\u5206\u5f00\u53d1\u5de5\u4f5c\uff0c\u5728\u5408\u7406\u7684\u6a21\u5757\u5212\u5206\u540e\uff0c\u5c31\u9700\u8981\u521b\u5efa\u5408\u9002\u7684 feature \u5206\u652f\u6765\u8fdb\u884c\u5bf9\u5e94\u7684\u5f00\u53d1\u5de5\u4f5c\u3002\u56e0\u4e3a feature \u5f80\u5f80\u6bd4\u8f83\u591a\uff0c\u6240\u4ee5\u8981\u6c42\u5404\u4e2afeature\u4e4b\u95f4\u8026\u5408\u7a0b\u5ea6\u4e0d\u5b9c\u8fc7\u9ad8\uff0c\u4ee5\u51cf\u5c11\u51b2\u7a81\uff0c\u8fd9\u5c31\u9700\u8981\u8fdb\u884c\u5408\u7406\u7684\u5212\u5206\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#github-workflow","title":"Github Workflow","text":"

Github Workflow \u5bf9 Git Workflow \u8fdb\u884c\u4e86\u7b80\u5316\uff0c\u5728 Github Workflow \u4e0b\u4ec5\u4ec5\u533a\u5206 master \u548c branch\uff0c\u800c\u5177\u4f53\u529f\u80fd\u7531\u5404\u4e2a branch \u7684\u547d\u540d\u6765\u4f53\u73b0\uff0c\u5373\u8981\u6c42 branch \u7684\u547d\u540d\u5177\u6709\u53d9\u4e8b\u6027\u3002

\u6700\u91cd\u8981\u7684\u662f\uff0c\u6ca1\u6709\u4e86 develop \u5206\u652f\u4ee5\u540e\uff0c\u957f\u671f\u7ef4\u62a4\u7684\u5c31\u53ea\u6709 master \u4e86\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u53d1\u5e03\u7684\u4ee3\u7801\u4e00\u822c\u90fd\u662f\u8fdb\u5ea6\u6700\u65b0\u7684\u4ee3\u7801\u3002\u800c\u8fd9\u4ef6\u4e8b\u662f\u6709\u597d\u6709\u574f\u7684\u3002 \u57fa\u4e8e Github Workflow \u7684\u5de5\u4f5c\u6d41\u7a0b\u4e3b\u8981\u5982\u4e0b\uff1a

  1. \u521b\u5efa\u5206\u652f (create a branch or fork)\uff1b
  2. \u5728\u5206\u652f\u4e2d\u8fdb\u884c\u5f00\u53d1\u5e76\u5b8c\u6210\u63d0\u4ea4 (add commits)\uff1b
  3. \u53d1\u9001 Pull Request (open a pull request)\uff1b
  4. \u4eba\u5de5\u5ba1\u6838\u4ee3\u7801\u3001\u6c9f\u901a\u4ea4\u6d41\uff0c\u4ee5\u53ca\u5fc5\u8981\u7684\u6d4b\u8bd5 (discuss and review)\uff1b
  5. \u5408\u5e76\u8fdb master (merge)

\u56e0\u800c\uff0c\u5728\u8fd9\u6837\u4e00\u4e2a\u5de5\u4f5c\u6d41\u7a0b\u4e0b\uff0c\u5408\u4f5c\u8005\u4e4b\u95f4\u7684\u4ea4\u6d41\u5c31\u66f4\u52a0\u91cd\u8981\u4e86\u3002

"},{"location":"tech_accu/tool/Git/Workflow/#gitlab-workflow","title":"Gitlab Workflow","text":""},{"location":"tech_accu/tool/Git/Workflow/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Shell/","title":"Shell","text":"

\u7ea6 4930 \u4e2a\u5b57 462 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 22 \u5206\u949f

\u6587\u7ae0\u76ee\u6807

\u5728\u5b8c\u6210\u672c\u6587\u5b66\u4e60\u540e\uff0c\u6211\u4eec\u671f\u5f85\u60a8\u5bf9 Shell \u80fd\u6709\u66f4\u5177\u4f53\u7684\u8ba4\u8bc6\uff0c\u5e76\u80fd\u505a\u5230\u901a\u8fc7 Command Line \u5b9e\u73b0\u57fa\u7840\u4ea4\u4e92\u5e76\u4e86\u89e3\u5982\u4f55\u5b66\u4e60 Shell\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u64b0\u5199 Shell \u811a\u672c\u6765\u5b9e\u73b0\u4e00\u4e9b\u81ea\u52a8\u5316\u3002

\u6b64\u5916\uff0c\u4ece Shell \u5165\u95e8\u5230\u547d\u4ee4\u884c\u5927\u5e08\uff0c\u5176\u4e2d\u80af\u5b9a\u6709\u5f88\u957f\u7684\u8def\u8981\u8d70\uff0c\u6211\u4eec\u6ca1\u6cd5\u6d89\u53ca Shell \u7684\u5168\u90e8\u77e5\u8bc6\u70b9\uff0c\u5149\u547d\u4ee4\u5c31\u80fd\u8bb2\u4e0a\u5f88\u4e45\uff0c\u6240\u4ee5\u4e00\u5b9a\u8981\u5b66\u4f1a\u5982\u4f55\u5229\u7528\u624b\u518c\u548c\u6587\u6863\u7b49\u67e5\u8be2\u547d\u4ee4\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u672c\u6587\u5e0c\u671b\u505a\u5230\u7684\u662f\u6388\u4eba\u4ee5\u6e14\u800c\u975e\u6388\u4eba\u4ee5\u9c7c\u3002

\u6b64\u5916\uff0c\u6211\u4f1a\u5728\u6587\u4e2d\u591a\u6b21\u5c06 Shell \u4e0e C \u8bed\u8a00\u7684\u4e00\u4e9b\u5185\u5bb9\u76f8\u8054\u7cfb\uff0c\u5982\u679c\u60a8\u6709 C \u7684\u57fa\u7840\uff0c\u90a3\u5c06\u518d\u597d\u4e0d\u8fc7\u3002

"},{"location":"tech_accu/tool/Shell/#\u6982\u8ff0","title":"\u6982\u8ff0","text":""},{"location":"tech_accu/tool/Shell/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

Shell \u7684\u4e2d\u6587\u540d\u79f0\u4e3a\u201c\u58f3\u5c42\u201d\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u201c\u6700\u5916\u5c42\u201d\u3002Wiki \u5bf9\u5176\u63cf\u8ff0\u4e3a\uff1a

It is named a shell because it is the outermost layer around the operating system.

\u7b80\u5355\u6765\u8bf4\uff0cShell \u5c06\u8bfb\u5165\u6765\u81ea Keyboard \u7684\u5185\u5bb9\uff0c\u5e76\u5c06\u6307\u4ee4\u53d1\u9001\u7ed9 OS \u4ee5\u8c03\u7528\u7cfb\u7edf\u670d\u52a1\u3002

\u5728\u5e38\u89c1\u7684\u65e5\u7528\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5982 Windows \u4e0e MacOS\uff0c\u4f60\u53ef\u80fd\u5c1d\u8bd5\u8fc7\u4f7f\u7528 GUI(Graphical User Interface)\uff0c\u5373\u56fe\u5f62\u7528\u6237\u754c\u9762\u6765\u4e0e\u4f60\u7684\u7cfb\u7edf\u6109\u5feb\u73a9\u800d\uff1b\u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0cShell \u5219\u662f\u4e00\u79cd CLI(Command Line Interface)\uff0c\u4e0d\u540c\u4e8e GUIs \u901a\u8fc7\u70b9\u51fb\u6309\u94ae\u7b49\u64cd\u4f5c\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u7b49\u65b9\u5f0f\uff0cCLI \u8981\u6c42\u7528\u6237\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u3002\u800c\u4f5c\u4e3a\u4e00\u4e2a\u5408\u683c\u7684\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u63a5\u89e6\u5230\u7684\u5927\u591a\u6570\u751f\u4ea7\u573a\u666f\u4e2d\uff0c\u4f7f\u7528 CLI \u662f\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\u7684\u9009\u62e9\uff0c\u4e8b\u5b9e\u4e0a\u4f60\u4e5f\u5f88\u96be\u907f\u514d\u5b83\u2014\u2014\u56e0\u800c\uff0c\u6211\u4eec\u9700\u8981\u638c\u63e1 Shell \u7684\u57fa\u672c\u4f7f\u7528\u3002

\u5982\u4eca\uff0c\u5df2\u7ecf\u6709\u975e\u5e38\u591a\u7684 Shell \u53ef\u4ee5\u4f7f\u7528\uff0c\u800c\u4ed6\u4eec\u57fa\u672c\u4e0a\u90fd\u4ee5 sh \u7ed3\u5c3e\uff0c\u4f8b\u5982\u5e38\u89c1\u7684 bash \u548c zsh ,\u518d\u6bd4\u5982\u8bb8\u591a\u57fa\u4e8e Alpine \u7684 Docker Image\uff0c\u5185\u7f6e\u7684 Shell \u90fd\u662f sh\u3002\u5176\u4ed6\u7684\u8fd8\u6709 dash csh ksh \u7b49\u7b49\u3002

"},{"location":"tech_accu/tool/Shell/#shell-vs-terminal","title":"Shell vs Terminal","text":"

\u5728\u6b63\u5f0f\u5f00\u59cb\u4ecb\u7ecd Shell \u4e4b\u524d\uff0c\u6211\u8ba4\u4e3a\u6709\u5fc5\u8981\u505a\u4e00\u4e9b\u8fa8\u6790\u3002

\u5728\u73b0\u4ee3\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\uff0c\u60f3\u8981\u4f7f\u7528 Shell\uff0c\u4f60\u9700\u8981\u501f\u52a9 Terminal\uff0c\u5373\u7ec8\u7aef\uff08\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u662f terminal emulator\uff0c\u4e0d\u8fc7\u5728\u672c\u6587\u4e2d\u6211\u4eec\u5e76\u4e0d\u4f1a\u5c31\u6b64\u5c55\u5f00\uff09\u3002Terminal \u4e4b\u4e8e Shell\uff0c\u5c31\u597d\u50cf\u7535\u8bdd\u4e4b\u4e8e\u901a\u8baf\u670d\u52a1\u3002

\u4f8b\u5982\uff0c\u56fe\u4e2d\u6253\u5f00\u7684\u8fd9\u4e2a\u201c\u7a97\u53e3\u201d\u5c31\u662f\u4e00\u4e2a\u53eb\u505a iTerm2 \u7684 terminal emulator\uff0c\u800c\u6211\u4f7f\u7528\u7684 fish \u5219\u662f\u4e00\u79cd Shell\u3002

\u80fd\u4e0e\u8fd9\u4e24\u4e2a\u4e1c\u897f\u8fdb\u884c\u6bd4\u8f83\u548c\u8fa8\u6790\u7684\u4e1c\u897f\u5176\u5b9e\u8fd8\u6709\u5f88\u591a\uff0c\u4f46\u5e76\u975e\u672c\u6587\u4e3b\u9898\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

"},{"location":"tech_accu/tool/Shell/#\u4ee5-bash-\u4e3a\u4f8b","title":"\u4ee5 Bash \u4e3a\u4f8b","text":"

bash \u5168\u79f0 Bourne Again Shell\uff0c\u662f\u5982\u4eca\u6700\u5e38\u7528\u7684 Shell \u4e4b\u4e00\uff0c\u4e14\u5927\u90e8\u5206 Linux \u90fd\u4f1a\u5185\u7f6e bash\uff0c\u8fd9\u4e5f\u907f\u514d\u4e86\u66f4\u591a\u7684\u73af\u5883\u914d\u7f6e\u8d1f\u62c5\uff0c\u6240\u4ee5\u5728\u672c\u7ae0\u79cd\uff0c\u6211\u4eec\u5c06\u4ee5 bash \u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u4e00\u4e9b Shell \u5e38\u7528\u6307\u4ee4\u548c\u6280\u5de7\u3002

\u6b64\u5916\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u63d0\u4f9b\u7684\u5927\u591a\u6570\u8bba\u65ad\u4e3b\u8981\u57fa\u4e8e Linux \u7cfb\u7edf\u3002\u90e8\u5206\u7ed3\u8bba\u5728 Windows \u7b49\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5e76\u4e0d\u6210\u7acb\u3002\u5982\u679c\u60a8\u6709\u5174\u8da3\uff0c\u53ef\u4ee5\u81ea\u884c\u67e5\u8be2\u8d44\u6599\u3002

"},{"location":"tech_accu/tool/Shell/#\u51c6\u5907\u5de5\u4f5c","title":"\u51c6\u5907\u5de5\u4f5c","text":"

\u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u5e0c\u671b\u60a8\u786e\u4fdd\u60a8\u672c\u5730\u5df2\u6709\u53ef\u7528\u7684 bash \u73af\u5883\uff0c\u4ee5\u4fbf\u4e8e\u60a8\u80fd\u8ddf\u7740\u6559\u7a0b\u8fb9\u5b9e\u8df5\u8fb9\u5b66\u4e60\u3002

\u5728\u8fd9\u91cc\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u79cd\u7b80\u5355\u7684\u914d\u7f6e bash \u73af\u5883\u7684\u65b9\u6848\uff1a

\u5f53\u7136\uff0c\u6211\u4eec\u6700\u63a8\u8350\u7684\u8fd8\u662f\u60a8\u53ef\u4ee5\u914d\u7f6e\u4e00\u4e2a Linux \u73af\u5883\u4ee5\u8fdb\u884c\u5b9e\u8df5\u548c\u5b66\u4e60\u3002

\u5f53\u60a8\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u60a8\u53ef\u80fd\u770b\u5230\u7c7b\u4f3c\u4e8e\u5982\u4e0b\u5217\u4e3e\u7684\u5185\u5bb9\u7684\u60c5\u51b5\uff1a

# \u4e5f\u8bb8\u662f\u8fd9\u6837\nxxx:~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u6216\u8005\u8fd9\u6837\n[xxx@yyy]~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u53c8\u6216\u8005\u8fd9\u6837\nxxxx yyyy ~\n$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# ...\n

\u5b9e\u9645\u60c5\u51b5\u8fd8\u6709\u5f88\u591a\u79cd\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u201c\u5f62\u5f0f\u201d\u90fd\u662f\u53ef\u4ee5\u88ab\u8bbe\u7f6e\u7684\u3002\u6bd4\u5982\u8fd9\u91cc\u7684 $ \u88ab\u79f0\u4e3a prompt\uff0c\u5728\u672c\u6587\u7b2c\u4e00\u5f20\u56fe\u7247\u4e2d\u6211\u5c31\u5c06\u5b83\u8bbe\u7f6e\u4e3a\u4e86\u4e00\u4e2a Emoji \u56fe\u6807\u3002\u800c\u6211\u4eec\u53d1\u73b0\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e2a ~ \uff0c\u5b83\u8868\u793a\u7684\u662f\u60a8\u7684\u201c\u5bb6\u76ee\u5f55\u201d\u3002\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u5b83\u7684\u542b\u4e49\u662f\u60a8\u5f53\u524d\u6240\u5728\u7684\u4f4d\u7f6e\u662f\u60a8\u7684\u5bb6\u76ee\u5f55\u3002\u5173\u4e8e\u8fd9\u4e00\u70b9\u6211\u4eec\u5c06\u5728\u63a5\u4e0b\u6765\u5c55\u5f00\u3002

\u6b64\u5916\uff0c\u5982\u679c\u60a8\u5bf9 Linux \u7cfb\u7edf\u6709\u4e00\u5b9a\u8ba4\u8bc6\uff0c\u90a3\u65e0\u7591\u4f1a\u5e2e\u52a9\u60a8\u7406\u89e3\u672c\u6587\u3002

\u90a3\u4e48\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u5f00\u59cb\u5427\uff01

"},{"location":"tech_accu/tool/Shell/#\u5e2e\u52a9\u624b\u518c","title":"\u5e2e\u52a9\u624b\u518c","text":"

\u5de6\u601d\u53f3\u60f3\uff0c\u6700\u540e\u6211\u8fd8\u662f\u628a\u8fd9\u6761\u6307\u4ee4\u653e\u5230\u4e86\u6700\u524d\u6765\u8bb2\u3002\u6211\u4eec\u4e0d\u53ef\u80fd\u4ec5\u4ec5\u901a\u8fc7\u4e00\u7bc7\u6587\u7ae0\u5c31\u4e86\u89e3\u547d\u4ee4\u884c\u7684\u5168\u90e8\u77e5\u8bc6\uff0c\u6240\u4ee5\u6211\u89c9\u5f97\u628a man \u653e\u5230\u6700\u524d\u9762\u6765\u8bb2\u662f\u5f88\u6709\u610f\u4e49\u7684\u3002

man \u7684\u4f5c\u7528\u662f\u6253\u5f00\u4e00\u4e2a user manual\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6211\u4eec\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165 man man\uff0c\u5c31\u4f1a\u5f97\u5230\u5982\u4e0b\u7ed3\u679c\uff0c\u5373\u4f7f\u7528 man \u6253\u5f00\u4e86 man \u7684\u624b\u518c\uff1a

man(1)                                     General Commands Manual                                    man(1)\n\nNAME\n       man - format and display the on-line manual pages\n\nSYNOPSIS\n       man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B\n       browser] [-H htmlpager] [-S section_list] [section] name ...\n\nDESCRIPTION\n       man formats and displays the on-line manual pages.  If you specify section, man only looks in that\n       section of the manual.  name is normally the name of the manual page, which is typically the name of\n       a command, function, or file.  However, if name contains a slash (/) then man interprets it as a file\n       specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.\n\n       See below for a description of where man looks for the manual page files.\n\n......\n

\u4e3a\u4e86\u5b9e\u73b0\u629b\u7816\u5f15\u7389\u7684\u76ee\u7684\uff0c\u73b0\u5728\u6211\u4eec\u4ec5\u4ec5\u4ecb\u7ecd man \u7684\u8fd9\u4e9b\u90e8\u5206\uff0c\u5b9e\u9645\u4e0a\u5149\u770b manual \u7684\u6587\u672c\u91cf\u5c31\u80fd\u611f\u53d7\u5230\uff0c man \u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u4f46\u672c\u6587\u5e76\u4e0d\u6253\u7b97\u5c31\u6b64\u6df1\u5165\u3002\u800c\u5728\u8fd9\u91cc\u4ecb\u7ecd man \u7684\u76ee\u7684\uff0c\u4e00\u65b9\u9762\u662f\u5e0c\u671b\u5927\u5bb6\u5728\u5b66\u4e60\u4e4b\u540e\u7684\u547d\u4ee4\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003 user manual\uff0c\u4e8b\u5b9e\u4e0a\u672c\u6587\u6d89\u53ca\u7684\u547d\u4ee4\u4e5f\u5e76\u4e0d\u4f1a\u4ecb\u7ecd\u5176\u5168\u90e8\u7528\u6cd5\uff1b\u53e6\u4e00\u65b9\u9762\u662f\u9f13\u52b1\u5927\u5bb6\u5728\u9047\u5230\u4e3a\u6b62\u7684\u6307\u4ee4\u65f6\uff0c\u901a\u8fc7\u624b\u518c\u7b49\u9014\u5f84\u5148\u67e5\u8be2\u5176\u884c\u4e3a\u3001\u7528\u6cd5\uff0c\u518d\u4f7f\u7528\u5b83\u3002

"},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u5b57\u7b26\u4e32--echo","title":"\u6253\u5370\u5b57\u7b26\u4e32 | echo","text":"

echo \u5373\u56de\u54cd\uff0c\u8fd9\u4e2a\u5355\u8bcd\u975e\u5e38\u5f62\u8c61\u5730\u63cf\u8ff0\u4e86\u8fd9\u4e2a\u547d\u4ee4\u7684\u4f5c\u7528\uff0c\u5c06\u5176\u63a5\u53d7\u5230\u7684\u5185\u5bb9\u201c\u56de\u54cd\u201d\u51fa\u6765\u3002

# echo \u4f1a\u5c06\u5b83\u62ff\u5230\u7684\u53c2\u6570\u5168\u90fd\u5f53\u4f5c\u5b57\u7b26\u4e32\u6253\u5370\u51fa\u6765\uff0c\u4f46\u6210\u5bf9\u5f15\u53f7\u5e76\u4e0d\u4f1a\n$ echo <something>\n$ echo \"something 1 2 3\"\nsomething 1 2 3\n$ echo something 1 2 3\nsomething 1 2 3\n\n# \u5982\u679c\u4f60\u53ea\u8f93\u5165\u4e86\u4e00\u4e2a\u5f15\u53f7\uff0c\u5b83\u4f1a\u7b49\u4f60\u628a\u4ed6\u8865\u5b8c\u518d\u8f93\u51fa\n# \u5982\u679c\u60f3\u8f93\u51fa\u5f15\u53f7\uff0c\u9700\u8981\u4f7f\u7528 \\\" \u8f6c\u4e49\n$ echo \"\nFine, \\\"I\\\" will finish the string.\n\"\nFine, \"I\" will finish the string.\n\n# echo \u652f\u6301\u8f93\u51fa\u53c2\u6570\uff0c\u4ee5 $ \u5f00\u5934\uff0c\u5728\u547d\u4ee4\u884c\u73af\u5883\u4e0b\u4ed6\u4eec\u6307\u73af\u5883\u53d8\u91cf\uff0c\u5728\u811a\u672c\u73af\u5883\u4e0b\u8fd8\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u53c2\u6570\u4f20\u9012\n# \u4e0b\u9762\u7684\u547d\u4ee4\u8f93\u51fa\u4e86\u5f53\u524d\u7528\u6237\uff0cUSER \u662f\u4e00\u4e2a\u503c\u4e3a\u5f53\u524d\u7528\u6237\u7684\u7528\u6237\u540d\u7684\u73af\u5883\u53d8\u91cf\u3002\necho $USER\nisshikih\n
"},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u5f53\u524d\u8def\u5f84--pwd","title":"\u67e5\u770b\u5f53\u524d\u8def\u5f84 | pwd","text":"

\u5728\u8fd9\u91cc\u6211\u4eec\u60f3\u4ecb\u7ecd\u7684\u7b2c\u4e8c\u4e2a\u6307\u4ee4\u662f pwd\uff0c\u5b83\u7684\u6548\u679c\u662f\u8f93\u51fa\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u3002

$ pwd\n# \u6bd4\u5982\u6211\u7684\u73af\u5883\u4e0b\uff0c\u5728 ~ \u4e0b\u8f93\u51fa\u5982\u4e0b\n/Users/isshikih\n# \u8868\u793a\u6211\u5f53\u524d\u7684\u4f4d\u7f6e\u662f /Users/isshikih\n

\u4e00\u5207\u7686\u6587\u4ef6 \u662f Linux \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u800c Shell \u7684\u4f7f\u7528\u6709\u76f8\u5f53\u4e00\u90e8\u5206\u662f\u57fa\u4e8e\u6587\u4ef6\u4f53\u7cfb\u7684\u3002\u800c\u5982\u4f55 \u7d22\u5f15 \u4e00\u4e2a\u6587\u4ef6\u5462\uff1f\u6211\u4eec\u9700\u8981\u63d0\u4f9b\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u548c\u6587\u4ef6\u540d\uff01\u4f8b\u5982\uff0c\u60a8\u9700\u8981\u53bb\u4e00\u53f0 Windows \u7535\u8111\u4e2d\u627e\u5230\u60a8\u4e0a\u5b66\u671f\u7684\u8bfe\u7a0b\u4f5c\u4e1a\uff0c\u5b83\u7684\u6587\u4ef6\u540d\u4e3a myHomework.pdf \uff0c\u4e5f\u8bb8\u4f60\u9700\u8981\u6253\u5f00D\u76d8\u4e2d\u7684 Homework \u6587\u4ef6\u5939\u3002\u90a3\u4e48\u62bd\u8c61\u5730\u6765\u8bf4\uff0c\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u4e3a D:\\Homework\\myHomework.pdf \uff08\u8fd9\u662f\u5728 Windows \u4e0a\u7684\u5199\u6cd5\uff09\u3002\u8fd9\u79cd\u5f62\u5f0f\u7684\u201c\u4f4d\u7f6e\u201d\u88ab\u79f0\u4e3a \u7edd\u5bf9\u8def\u5f84\uff0c\u5373\u6211\u4eec\u9700\u8981\u586b\u5199\u6587\u4ef6\u7684\u5b8c\u6574\u8def\u5f84\u624d\u80fd\u627e\u5230\u8fd9\u4e2a\u6587\u4ef6\u3002\u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u63d0\u5230\u7684<filename><dirname>\u7b49\u90fd\u5305\u62ec\u4e86\u6587\u4ef6\u7684\u8def\u5f84\u3002

\ud83d\udc49\u00a0\u4e8b\u5b9e\u4e0a\uff0c\u6709\u76f8\u5f53\u4e00\u90e8\u5206 Shell \u8bed\u6cd5\u662f\u56f4\u7ed5\u7740\u6587\u4ef6\u5c55\u5f00\u7684\u3002

"},{"location":"tech_accu/tool/Shell/#\u5207\u6362\u76ee\u5f55--cd","title":"\u5207\u6362\u76ee\u5f55 | cd","text":"

cd \u662f change directory \u7684\u7f29\u5199\uff0c\u5b83\u7684\u6548\u679c\u662f\u5c06\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u8f6c\u79fb\u5230\u76ee\u6807\u76ee\u5f55\u4e2d\u3002\u5b83\u7684\u5199\u6cd5\u5982\u4e0b\uff1a

cd {target directory}\n\n# eg 1: =========================================\n$ pwd\n/home/username\n\n$ cd /home/username/aaa\n$ pwd\n/home/username/aaa\n\n# eg 2: =========================================\n$ pwd\n/home/username\n\n$ cd ./aaa/bbb\n$ pwd\n/home/username/aaa/bbb\n\n# eg 3: =========================================\n$ pwd\n/home/username\n\n$ cd ./../aaa\n$ pwd\n/home/aaa\n

\u63a5\u4e0b\u6765\u5bf9\u4e0a\u9762 eg \u7684\u90e8\u5206\u7b26\u53f7\u505a\u4e00\u4e0b\u89e3\u91ca\uff1a

\u6b64\u5916\uff0c\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e9b\u5feb\u6377\u65b9\u5f0f\uff1a

"},{"location":"tech_accu/tool/Shell/#\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9--ls","title":"\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9 | ls","text":"

ls \u6307\u4ee4\u7528\u6765\u67e5\u770b\u76ee\u6807\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u3002\u5e38\u7528\u7684\u53c2\u6570\u4e3b\u8981\u6709 -l \uff08\u957f\u683c\u5f0f\uff09\u548c -a \uff08\u663e\u793a\u5168\u90e8\uff09\u3002

\u5177\u4f53\u5199\u6cd5\u5982\u4e0b\uff1a

# \u5047\u8bbe\u6211\u4eec\u5f53\u524d\u5728\u6587\u4ef6\u5939 my_ \u4e0b\uff0c\u6587\u4ef6\u5939\u5185\u6709\u4e24\u4e2a\u6587\u4ef6\u548c\u4e00\u4e2a\u6587\u4ef6\u5939\n# \u6587\u4ef6 .hidden \u548c\u6587\u4ef6 file1.md\n# \u6587\u4ef6\u5939 dir1\uff0c\u91cc\u9762\u6709\u4e2a\u6587\u4ef6 file2.md\n\n$ ls\ndir1        file1.md\n\n$ ls -a\n.               ..      .hiden1     dir1        file1.md\n\n$ ls -l\ndrwxr-xr-x  2 isshikih  staff  64 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff   7 10 12 12:16 file1.md\n\n$ ls -la\ndrwxr-xr-x  5 isshikih  staff  160 10 12 12:15 .\ndrwxr-xr-x  6 isshikih  staff  192 10 12 12:14 ..\n-rw-r--r--  1 isshikih  staff    0 10 12 12:15 .hiden1\ndrwxr-xr-x  2 isshikih  staff   96 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff    7 10 12 12:16 file1.md\n\n# \u5982\u679c\u540e\u9762\u8ddf\u7740\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5219\u663e\u793a\u76ee\u6807\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\uff0c\u5426\u5219\u663e\u793a\u5f53\u524d\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\u3002\n$ ls dir1\nfile2.md\n
-rw-------   1 me       me            576 Apr 17  2019 weather.txt\ndrwxr-xr-x   6 me       me           1024 Oct  9  2019 web_page\n-rw-rw-r--   1 me       me         276480 Feb 11 20:41 web_site.tar\n-rw-------   1 me       me           5743 Dec 16  2018 xmas_file.txt\n\n----------  -------  -------     -------- ------------ -------------\n|          |        |            |         |             |\n|          |        |            |         |\n|          |        |            |         |           \u6587\u4ef6\u540d\n|          |        |            |         |\n|          |        |            |         +---       \u4fee\u6539\u65f6\u95f4\n|          |        |            |\n|          |        |            +-------------   \u6587\u4ef6\u5927\u5c0f(in bytes)\n|          |        |\n|          |        +--------------------------       \u6240\u5c5e\u7528\u6237\u7ec4\n|          |\n|          +-----------------------------------       \u6240\u5c5e\u7528\u6237\n|\n+----------------------------------------------       \u6587\u4ef6\u6743\u9650\n# Edited from https://linuxcommand.org/lc3_lts0030.php\n
"},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u5185\u5bb9--cat","title":"\u6253\u5370\u6587\u4ef6\u5185\u5bb9 | cat","text":"

cat \u6307\u4ee4\u4f1a\u8fde\u63a5\u6587\u4ef6\u5e76\u5c06\u5185\u5bb9\u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u6d41\u3002

# <filename> \u662f\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\u3002\n$ cat <filename>\n
"},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9--head--tail","title":"\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9 | head & tail","text":"

head \u548c tail \u8bed\u6cd5\u7c7b\u4f3c\uff0c\u529f\u80fd\u7c7b\u4f3c\uff0c\u5206\u522b\u4e3a\u67e5\u770b\u76ee\u6807\u6587\u4ef6\u7684\u5f00\u5934\u90e8\u5206\u7684\u5185\u5bb9\u548c\u7ed3\u5c3e\u90e8\u5206\u7684\u5185\u5bb9\u3002\u4e0d\u8fc7\u7531\u4e8e\u6211\u4eec\u5bf9\u6587\u672c\u6587\u4ef6\u9664\u4e86\u8bfb\u5199\uff0c\u8fd8\u6709\u4e00\u4e2a\u53eb\u505a\u201c\u8ffd\u52a0\u201d\u7684\u64cd\u4f5c\uff08\u7c7b\u6bd4 C \u8bed\u8a00\u4e2d fopen() \u7684 \u2018a\u2019 \u6a21\u5f0f\uff09 tail \u4f1a\u6301\u7eed\u6253\u5370\u65b0\u8ffd\u52a0\u8fdb\u6587\u4ef6\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u82b1\u6837\u7a0d\u5fae\u6bd4 head \u591a\u4e00\u70b9\u3002

# `head` \u548c `tail` \u90fd\u6709\u9ed8\u8ba4\u53c2\u6570 `-n 10`\n# \u4e5f\u5c31\u662f\uff0c\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u524d 10 \u884c\n$ head <filename>\n$ head -n 10 <filename>\n# \u4e0b\u9762\u8fd9\u4e24\u6761\u6307\u4ee4\u4e5f\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u672b 10 \u884c\n$ tail <filename>\n$ tail -n 10 <filename>\n\n# \u5c06 10 \u6539\u6210\u5176\u4ed6\u6570\u5b57\u5c31\u53ef\u4ee5\u4fee\u6539\u663e\u793a\u7684\u884c\u6570\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 4 \u884c\n$ head -n 4 <filename>\n$ tail -n 4 <filename>\n\n# \u9664\u4e86\u884c\u6570\uff0c\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u6253\u5370\u7684\u5b57\u8282\u6570\uff0c\u5982\u4e0b\u9762\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 20 \u4e2a\u5b57\u8282\n$ head -c 20 <filename>\n$ tail -c 20 <filename>\n

# `tail` \u6bd4 `head` \u8fd8\u8981\u591a\u4e00\u4e9b\u53c2\u6570\uff0c\u6bd4\u5982 `-f`\n# `-f` \u5728\u6253\u5370\u5b8c\u5df2\u6709\u7684\u6587\u4ef6\u5185\u5bb9\u540e\u4f1a\u963b\u585e\uff0c\u7b49\u5f85\u76ee\u6807\u6587\u4ef6\u7684\u66f4\u65b0\n# \u4e00\u65e6\u6709\u5185\u5bb9\u8ffd\u52a0\u8fdb\u76ee\u6807\u6587\u4ef6\uff0c`tail` \u5c31\u4f1a\u5c06\u5b83\u6253\u5370\u51fa\u6765\n$ tail -f <filename>\n

\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684 echo \u5f00\u5934\u7684\u8bed\u53e5\u662f\u5728\u505a\u8ffd\u52a0\u64cd\u4f5c\uff0c\u4e4b\u540e\u4f1a\u8bb2\u5230\u3002

\u800c\u81f3\u4e8e\u5177\u4f53\u7684\u5f15\u7528\u573a\u666f\uff0c\u6bd4\u5982\u6709\u4e9b\u5de5\u5177\u7684\u65e5\u5fd7\u4f1a\u4e0d\u65ad\u8ffd\u52a0\u5230\u67d0\u4e2a\u65e5\u5fd7\u6587\u4ef6\u4e2d\uff0c\u8fd9\u65f6\u5019\u5c31\u53ef\u4ee5\u7528 tail -f \u6765\u5b9e\u65f6\u8ddf\u8e2a\u65e5\u5fd7\u4fe1\u606f\u3002

"},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9--less","title":"\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9 | less","text":"

less \u5219\u662f\u771f\u6b63\u7528\u6765\u663e\u793a\u6587\u4ef6\u5185\u5bb9\u7684\u6307\u4ee4\uff0c\u5b83\u4f1a\u4ee5\u6587\u672c\u6587\u4ef6\u7684\u5f62\u5f0f\u5c55\u793a\u6587\u4ef6\u5185\u5bb9\u2014\u2014\u8fd9\u610f\u5473\u7740\u4f60\u5982\u679c\u5f3a\u884c\u4f7f\u7528 less \u6765\u67e5\u770b\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5219\u4f1a\u5f97\u5230\u4e00\u5806\u4e71\u7801\u3002

# <textFilename> \u4e3a\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\n$ less <textFilename>\n

\u4f7f\u7528 less \u67e5\u770b\u6587\u4ef6\u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u4f60\u6253\u5f00\u4e86\u4e00\u4e2a\u5f88\u50cf man \u7684\u754c\u9762\uff08\u76f8\u4fe1\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\u8fd9\u4e2a\u8bf4\u6cd5\u6709\u70b9\u672c\u672b\u98a0\u5012\uff09\uff0c\u90a3\u5b9e\u9645\u4e0a\u6d4f\u89c8\u7684\u65b9\u5f0f\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u518d\u591a\u4ecb\u7ecd\u4e00\u4e9b\u5728\u6d4f\u89c8\u6587\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u7528\u5230\u7684\u6280\u5de7\uff1a

"},{"location":"tech_accu/tool/Shell/#\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027\u521b\u5efa\u6587\u4ef6--touch","title":"\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027(\u521b\u5efa\u6587\u4ef6) | touch","text":"

touch\u5b9e\u9645\u4e0a\u662f\u7528\u6765\u4fee\u6539\u6587\u4ef6\u548c\u76ee\u5f55\u7684\u65f6\u95f4\u5c5e\u6027\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u5177\u6709\u201c\u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u4e00\u4e2a\u201d\u7684\u7279\u6027\uff0c\u6240\u4ee5\u4e5f\u5e38\u5e38\u7528\u6765\u521b\u5efa\u4e00\u4e2a\u65b0\u6863\u6848\u3002

$ ls -l\ntotal 0\n\n# \u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6ca1\u6709\u53eb\u505a <filename> \u7684\u6587\u4ef6\uff0c\u5219\u521b\u5efa\u4e00\u4e2a <filename>\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:07 file\n# \u5176\u4e2d\u6587\u4ef6\u7684\u65f6\u95f4\u4e3a\u7cfb\u7edf\u7684\u5f53\u524d\u65f6\u95f4\n\n# \u5982\u679c\u6b64\u65f6\u518d\u6b21 touch <filename>\uff0c\u5219\u4f1a\u66f4\u65b0\u5176\u65f6\u95f4\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:10 file\n
"},{"location":"tech_accu/tool/Shell/#\u521b\u5efa\u6587\u4ef6\u5939--mkdir","title":"\u521b\u5efa\u6587\u4ef6\u5939 | mkdir","text":"

mkdir\u662f make directory \u7684\u7f29\u5199\uff0c\u4e5f\u5c31\u662f\u521b\u5efa\u4e00\u4e2a\u201c\u6587\u4ef6\u5939\u201d\u3002

# <dirname> \u53ef\u4ee5\u662f\u4e00\u4e2a\u590d\u6742\u8def\u5f84\u4e0b\u7684\u76ee\u5f55\uff0c\u4f46\u662f\u4e00\u5b9a\u8981\u6c42\u5176\u524d\u7f6e\u76ee\u5f55\u90fd\u5b58\u5728\n$ mkdir <dirname>\n$ ls -l\ntotal 0\n$ mkdir dir1/dir2\nmkdir: dir1: No such file or directory\n# \u8bf4\u660e\u76ee\u6807\u76ee\u5f55 dir2 \u7684\u524d\u7f6e\u8def\u5f84 ./dir1 \u7f3a\u5931\n\n# \u6211\u4eec\u53ef\u4ee5\u4f9d\u6b21\u521b\u5efa\u8fd9\u4e9b\u76ee\u5f55\n$ mkdir dir1 dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n\n# \u6216\u8005\u4f7f\u7528 -p \u53c2\u6570\uff0c\u5b83\u5141\u8bb8\u521b\u5efa\u5d4c\u5957\u76ee\u5f55\uff0c\u5373\u5982\u679c\u524d\u7f6e\u76ee\u5f55\u4e0d\u5b58\u5728\u5b83\u4f1a\u521b\u5efa\u4e00\u4e2a\n$ mkdir -p dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
"},{"location":"tech_accu/tool/Shell/#\u79fb\u52a8\u91cd\u547d\u540d--mv","title":"\u79fb\u52a8(\u91cd\u547d\u540d) | mv","text":"

mv\u5373 move\uff0c\u542b\u4e49\u5f88\u660e\u663e\uff0c\u5373\u6539\u53d8\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u4f4d\u7f6e\u3002\u4e0d\u8fc7\u7531\u4e8e\u201c\u4f4d\u7f6e\u201d\u8fd9\u4ef6\u4e8b\uff0c\u5b9e\u9645\u4e0a\u4e5f\u53ef\u4ee5\u5305\u542b\u6587\u4ef6\u672c\u8eab\u7684\u540d\u5b57\uff0c\u6240\u4ee5\u4e5f\u53ef\u4ee5\u7528\u6765\u505a\u91cd\u547d\u540d\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4fee\u6539\u76ee\u6807\u4f4d\u7f6e\u5230\u540c\u4e00\u4e2a\u8def\u5f84\u4e0b\u7684\u53e6\u5916\u4e00\u4e2a\u540d\u5b57\u3002

# \u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u4e00\u8282\u4e34\u65f6\u628a <path> \u4ece <filename> \u548c <dirname> \u4e2d\u62c6\u51fa\u6765\n# \u8be5\u6307\u4ee4\u4f1a\u5c06 <target1> \u79fb\u52a8\u5230 <path2> \u5e76\u6539\u540d\u4e3a <target2>\uff0c\u5f53\u7136\u5141\u8bb8\u540c\u540d\n$ mv <path1>/<target1> <path2>/<target2>\n\n# \u7701\u7565 <target2>\uff0c\u5219\u4f1a\u79fb\u52a8\u6587\u4ef6\u4f4d\u7f6e\u4f46\u4e0d\u4fee\u6539\u6587\u4ef6\u540d\uff0c\u5373\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u7b49\u4ef7\n$ mv <path1>/<target1> <path2>\n$ mv <path1>/<target1> <path2>/<target1>\n\n# \u79fb\u52a8\u5230\u540c\u4e00\u76ee\u5f55\uff0c\u5373\u5b9e\u73b0\u91cd\u547d\u540d\uff0c\u5f53\u7136 <path1>/ \u53ef\u4ee5\u7701\u7565\uff0c\u5373\u6b64\u65f6 <path1> \u4e3a .\n$ mv <path1>/<target1> <path1>/<target2>\n
"},{"location":"tech_accu/tool/Shell/#\u590d\u5236--cp","title":"\u590d\u5236 | cp","text":"

cp\u5373 copy\uff0c\u7528\u6765\u590d\u5236\u6587\u4ef6\u6216\u76ee\u5f55\uff0c\u57fa\u672c\u8bed\u6cd5\u548cmv\u7c7b\u4f3c\uff0c\u6211\u4eec\u518d\u591a\u4ecb\u7ecd\u4e00\u4e2a-r\u53c2\u6570\u3002

# \u8be5\u6307\u4ee4\u4f1a\u590d\u5236\u4e00\u4e2a\u6587\u4ef6 <filename> \u5230 <path> \u4e0b\n$ cp <filename> <path>\n\n# cp \u65e0\u6cd5\u590d\u5236\u6587\u4ef6\u5939\n$ cp <dir> <path>\ncp: <dir> is a directory (not copied).\n# \u4f46\u662f\u4f7f\u7528 -r \u53c2\u6570\u53ef\u4ee5\u590d\u5236 <path1> \u4e0b\u6240\u6709\u5185\u5bb9\u5230 <path2> \u4e0b\n$ cp -r <path1> <path2>\n$ cp -r dir1 newDir\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
"},{"location":"tech_accu/tool/Shell/#\u5220\u9664--rm","title":"\u5220\u9664 | rm","text":"

\u628arm\u653e\u5728\u6700\u540e\u8bb2\u662f\u6709\u539f\u56e0\u7684\uff0c\u6216\u8bb8\u4f60\u542c\u8bf4\u8fc7 rm / -rf \u8fd9\u6761\u6307\u4ee4\uff0c\u5374\u4e0d\u77e5\u9053\u5b83\u7684\u542b\u4e49\uff0c\u90a3\u4e48\u770b\u5b8c\u8fd9\u4e00\u5c0f\u8282\u4f60\u5c31\u77e5\u9053\u8fd9\u4e2a\u6307\u4ee4\u6709\u591a\u6050\u6016\u4e86\uff08\u5343\u4e07\u4e0d\u8981\u8dd1\u8fd9\u6761\u6307\u4ee4\uff09\u3002

\u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\uff0cLinux \u4e0brm\u6307\u4ee4\u5e76\u4e0d\u5b58\u5728\u201c\u5783\u573e\u7bb1\u201d\u8fd9\u4e2a\u673a\u5236\uff0c\u5373\u7528rm\u5220\u6389\u7684\u4e1c\u897f\u662f\u6ca1\u6cd5\u901a\u8fc7\u6b63\u5e38\u624b\u6bb5\u590d\u539f\u7684\uff0c\u800c\u4e0a\u9762\u90a3\u6761\u6307\u4ee4\u7684\u610f\u601d\u5c31\u662f\u5f3a\u5236\u9012\u5f52\u5220\u9664\u7cfb\u7edf\u6839\u76ee\u5f55\u4e0b\u6240\u6709\u5185\u5bb9\uff0c\u4e5f\u5c31\u662f \u5565\u90fd\u5220\u5149\u4e86\u3002

\u6240\u4ee5\uff0c\u4e00\u822c\u6211\u4eec\u90fd\u4f1a\u5efa\u8bae\u4f7f\u7528alias\u4fdd\u62a4rm\u6307\u4ee4\uff08\u6211\u5199\u8fc7fish\u7684rmalias\u4fdd\u62a4\u6d41\u7a0b\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002

rm\u5373 remove\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u7528\u6765\u5220\u9664\u4e1c\u897f\u7684\uff0c\u8fd9\u662f\u4e2a\u975e\u5e38\u5371\u9669\u7684\u6307\u4ee4\u3002\u5e38\u7528\u7684\u53c2\u6570\u6709-r\u548c-f\uff0c\u5206\u522b\u8868\u793a\u9012\u5f52\u5220\u9664\u548c\u5f3a\u5236\u5220\u9664\uff1b\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c06\u4ecb\u7ecd\u4e00\u4e2a-i\u53c2\u6570\u3002

# \u5220\u9664\u4e00\u4e2a\u6587\u4ef6\n$ rm <filename>\n\n# \u5220\u9664 <dirname> \u4e0b\u6240\u6709\u7684\u4e00\u7ea7\u6587\u4ef6\n$ rm <dirname>/*\n\n$ tree\n.\n\u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file3\n\u251c\u2500\u2500 file1\n\u2514\u2500\u2500 file2\n\n1 directory, 3 files\n$ rm ./*\nrm: ./dir2: is a directory\n$ tree\n.\n\u2514\u2500\u2500 dir2\n    \u2514\u2500\u2500 file3\n\n1 directory, 1 file\n# \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e2d\u9014\u62a5\u9519\u8bf4 dir2 \u662f\u4e2a\u76ee\u5f55\u5e76\u4e14\u6ca1\u6709\u5220\u6389\uff0c\u5b9e\u9645\u4e0a\uff0c\u5982\u679c dir2 \u662f\u4e2a\u7a7a\u76ee\u5f55\uff0c\u90a3\u5b83\u662f\u4f1a\u88ab\u5220\u6389\u7684\n# \u800c\u5982\u679c\u8981\u771f\u6b63\u5220\u9664\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u6240\u6709\u7684\u5185\u5bb9\uff0c\u5c31\u9700\u8981\u6211\u4eec\u201c\u9012\u5f52\u201d\u5220\u9664\uff0c\u5373\u4f7f\u7528 -r\n\n# \u9012\u5f52\u5220\u9664 <dirname> \u4e0b\u6240\u6709\u5185\u5bb9\n$ rm -r <dirname>/*\n\n# \u9012\u5f52\u5220\u9664 <dirname>\n$ rm -r <dirname>\n\n# \u5371\u9669\uff1a\u5f3a\u5236\u9012\u5f52\u5220\u9664 <dirname>\n$ rm -rf <dirname>\n\n# \u63a8\u8350\uff1a\u9012\u5f52\u5220\u9664\u65f6\u9010\u4e00\u786e\u8ba4\n$ rm -ri dir2\nexamine files in directory dir2/? y     # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2//file3? y                                   # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2/? y                                             # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\n
"},{"location":"tech_accu/tool/Shell/#\u91cd\u5b9a\u5411\u76f8\u5173-","title":"\u91cd\u5b9a\u5411\u76f8\u5173 \ud83d\udca1","text":"

\u53ef\u4ee5\u8bf4\u8fd9\u662f Shell \u4e2d\u6700\u6709\u610f\u601d\u7684\u77e5\u8bc6\u70b9\u4e4b\u4e00\u4e86\u3002\u91cd\u5b9a\u5411\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u91cd\u65b0\u5b9a\u5411\uff0c\u66f4\u51c6\u786e\u7684\u6765\u8bf4\u662f\u7ed9\u6570\u636e\u6d41\u91cd\u65b0\u5b9a\u5411\u3002\u9996\u5148\uff0c\u6211\u4eec\u6765\u770b\u770b\u8fd9\u5f20\u56fe\uff0c\u5b83\u63cf\u8ff0\u4e86\u547d\u4ee4\u8fd0\u884c\u65f6\u7684\u6570\u636e\u4ea4\u4e92\u3002

flowchart TD;\ninput[\"file, keyboard, etc\"] \ncommand\noutput[\"file, screen, etc\"]\nerror[\"file, screen, etc\"]\n\ninput -->|\"Standard Input (stdin)\"| command\ncommand -->|\"Standard Output (stdout)\"| output\ncommand -->|\"Standard Error (stderr)\"| error

\u7b80\u5355\u7684\u63cf\u8ff0\u4e00\u4e0b\uff0c\u547d\u4ee4\u4ece\u6807\u51c6\u8f93\u5165\u6d41 stdin \u4e2d\u8bfb\u53d6\u8f93\u5165\u6570\u636e\uff0c\u5904\u7406\u8fc7\u7a0b\u4e2d\u6216\u8005\u662f\u5904\u7406\u7ed3\u675f\u540e\uff0c\u4f1a\u5411\u6807\u51c6\u8f93\u51fa\u6d41 stdout \u548c\u6807\u51c6\u9519\u8bef\u6d41 stderr \u4e2d\u5199\u5165\u6570\u636e\uff0c\u4e00\u822c\u6765\u8bf4 stdout \u627f\u8f7d\u7684\u662f\u6b63\u5e38\u7684\u8f93\u51fa\u6570\u636e\uff0c\u800c stderr \u627f\u8f7d\u7684\u662f\u62a5\u9519\u7b49\u4fe1\u606f\u3002

\u800c\u6240\u8c13\u7684\u91cd\u5b9a\u5411\uff0c\u6b63\u662f\u6307\u91cd\u5b9a\u5411\u8fd9\u4e09\u4e2a\u6d41\uff0c\u800c\u4e14\u66f4\u591a\u7684\u6307\u7684\u662f\u91cd\u5b9a\u5411 stdin \u548c stdout\u3002

\u800c\u5728 Shell \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ed6\u4eec\u7684\u4ee3\u7801\u6765\u6307\u4ee3\u4ed6\u4eec\uff0c\u5177\u4f53\u5185\u5bb9\u672c\u6587\u4e0d\u4f1a\u8fc7\u591a\u6d89\u53ca\uff0c\u5982\u679c\u60f3\u8981\u6df1\u5165\u4e86\u89e3\u53ef\u4ee5\u4ed4\u7ec6\u770b\u770b\u201c\u5408\u5e76\u201d\u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u3002

Stream: stdin stdout stderr Code: 0 1 2"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411---","title":"\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411 | > >>","text":"

\u57fa\u672c\u4e0a\u6240\u6709\u8bed\u8a00\u7684\u6559\u7a0b\u4e2d\u90fd\u4f1a\u5148\u4ecb\u7ecd\u5982\u4f55\u8f93\u51fa \u201dHello World!\u201c\uff08\u5f53\u7136\u4ed6\u4eec\u4e5f\u53ef\u80fd\u66f4\u60f3\u548c\u522b\u4eba\u6253\u62db\u547c\uff09\u3002\u603b\u800c\u8a00\u4e4b\uff0c\u8f93\u51fa\u5bf9\u4e00\u4e2a\u547d\u4ee4\u3001\u4e00\u4e2a\u7a0b\u5e8f\u662f\u81f3\u5173\u91cd\u8981\u7684\u3002\u4f46\u662f\u4f60\u4f1a\u53d1\u73b0\uff0c\u8fd9\u4e9b\u6307\u4ee4\u90fd\u53ea\u662f\u5c06\u5185\u5bb9\u6253\u5370\u5230\u4f60\u7684\u7ec8\u7aef\u91cc\uff0c\u5373 stdout \u91cc\uff0c\u53ea\u4e0d\u8fc7\u4e00\u822c\u88ab\u9001\u8fdb stdout \u7684\u4e1c\u897f\u4f1a\u88ab\u6253\u5370\u5728 screen \u4e0a\u3002

\u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u8981\u5b83\u88ab\u5199\u5165\u5230\u4e00\u4e2a\u53eb chat.txt \u7684\u6587\u4ef6\u91cc\uff0c\u4f60\u5f53\u7136\u53ef\u4ee5\u4f7f\u7528 fopen() \u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u5b9e\u73b0\uff0c\u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u7528 Shell \u6765\u5b9e\u73b0\u8fd9\u4e2a\u6548\u679c\u3002

\u6211\u4eec\u518d\u6b21\u56de\u5fc6\u6574\u4e2a\u8fc7\u7a0b\u4e2d\u6570\u636e\u7684\u6d41\u52a8\uff1a\u7a0b\u5e8f\u4e2d\u7684\u6570\u636e \u2192 stdout \u2192 screen\uff0c\u800c\u91cd\u5b9a\u5411\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u6539\u53d8 stdout \u2192 screen \u8fd9\u4e2a\u6b65\u9aa4\u3002

# \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command > file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u5199\u5165\u4e86 chat.txt\n$ echo \"Hello World!\" > chat.txt\n$ cat chat.txt\nHello World!\n\n# \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u8ffd\u52a0\u8fdb chat.txt\n$ echo \"Hello Human!\" >> chat.txt\n$ cat chat.txt\nHello World!\nHello Human!\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5b9e\u73b0\u4e86\u5c06\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\u5199\u5165 \"index.txt\"\n$ ls -al > index.txt\n

\u8bf6\u7b49\u7b49\uff0c\u4e0a\u9762\u600e\u4e48\u7a81\u7136\u51fa\u73b0\u4e86\u201c\u8ffd\u52a0\u201d\u8fd9\u4e2a\u8bcd\uff1f\u522b\u6025\u3002\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b fopen() \u3002\u5982\u679c\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u53ef\u5199\u6587\u4ef6\uff0cfopen() \u7684\u6a21\u5f0f\u53c2\u6570\u4e00\u822c\u662f w \uff0c\u6216\u8005\u662f a\u3002\u4ed6\u4eec\u5206\u522b\u4ee3\u8868 write \u548c append\uff0c\u5373\u8986\u5199\u548c\u8ffd\u52a0\u3002\u524d\u8005\u5c06\u76ee\u6807\u6587\u4ef6\u7684\u5185\u5bb9\u5168\u90e8\u8986\u76d6\uff0c\u5199\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5373\u76f8\u5f53\u4e8e\u6e05\u7a7a\u76ee\u6807\u6587\u4ef6\u7136\u540e\u5199\u5165\u5185\u5bb9\uff1b\u540e\u8005\u662f\u5728\u76ee\u6807\u6587\u4ef6\u7684\u5c3e\u90e8\u5f00\u59cb\u5199\u5165\u65b0\u5185\u5bb9\uff0c\u65e7\u7684\u5185\u5bb9\u4ecd\u7136\u4fdd\u7559\u3002\u6240\u4ee5\u4e0a\u9762\u7684\u4ee3\u7801\u4f1a\u51fa\u73b0 \u201cHello Human!\u201d \u88ab\u8ffd\u52a0\u5728 \u201cHello World!\u201d \u540e\u9762\u7684\u60c5\u51b5\u3002

\u73b0\u5728\uff0c\u5982\u679c\u4f60\u60f3\u8ba9\u4f60\u7684 a.exe \u8f93\u51fa\u7684\u4e1c\u897f\u88ab\u5199\u5165 out.txt \u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u8fd9\u6837\u8fd0\u884c\u5b83\uff1a

$ a.exe > out.txt\n
"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411--","title":"\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411 | <","text":"

\u4e0e\u8f93\u51fa\u76f8\u5bf9\u5e94\uff0c\u5982\u679c\u6211\u4eec\u60f3\u4ece\u6587\u4ef6\u4e2d\u8bfb\u53d6\u6570\u636e\u800c\u975e\u4ece Keyboard \u5199\u5165\u7684\u7f13\u51b2\u533a\u8bfb\u53d6\u5185\u5bb9\uff0c\u800c\u662f\u4ece\u67d0\u4e2a\u6587\u4ef6\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528 < \u6765\u91cd\u5b9a\u5411\u8f93\u5165\u3002

// \u5047\u8bbe a.exe \u7684\u6e90\u7801\u662f\u8fd9\u6837\u7684\n#include <stdio.h>\nint main(){\nchar str[1024];\nscanf(\"%s\", str);\nprintf(\"Hello %s!\", str);\n}\n
// \u5047\u8bbe in.txt \u4e2d\u7684\u5185\u5bb9\u4e3a\u5982\u4e0b\nisshikih\n
# \"file\" \u4f1a\u88ab\u5f53\u4f5c \"command\" \u7684\u8f93\u5165\u53c2\u6570\n$ command < file\n\n# \"a.exe\" \u4f1a\u8bfb\u5165 \"chat.txt\" \u7684\u5185\u5bb9\u4f5c\u4e3a\u8f93\u5165\n$ a.exe < in.txt\nHello isshikh!\n\n# \u7efc\u5408\u8d77\u6765\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u8fd9\u6837\n$ a.exe < in.txt > out.txt\n$ cat out.txt\nHello isshikih! 
"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411--2-2","title":"\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411 | 2> 2>>","text":"

stderr \u7684\u91cd\u5b9a\u5411\u57fa\u672c\u4e0a\u548c stdout \u662f\u4e00\u6837\u7684\u3002

# \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command 2> file\n\n# \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n

\u4f46\u5bf9\u4e8e stderr \uff0c\u6211\u4eec\u4f7f\u7528\u91cd\u5b9a\u5411\u7684\u76ee\u7684\u4e5f\u53ef\u80fd\u662f\u4e3a\u4e86\u8ba9\u4ed6\u4e0d\u8981\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u51fa\u6765\uff0c\u5373\u5c06\u5b83\u91cd\u5b9a\u5411\u5230\u522b\u7684\u5730\u65b9\u53bb\u3002

\u8fd9\u91cc\u9700\u8981\u4ecb\u7ecd\u4e00\u4e2a\u7279\u6b8a\u7684\u201c\u6587\u4ef6\u201d\uff0c /dev/null \u2014\u2014\u4efb\u4f55\u5199\u5165\u5230\u5b83\u7684\u5185\u5bb9\u90fd\u4f1a\u88ab\u4e22\u5f03\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u5c06 stderr \u91cd\u5b9a\u5411\u5230 /dev/null \uff0c\u5c31\u80fd\u5b9e\u73b0\u7c7b\u4f3c\u4e8e\u201c\u5ffd\u7565\u9519\u8bef\u6d41\u201d\u7684\u6548\u679c\u3002

# \"command\" \u7684\u9519\u8bef\u4fe1\u606f\u90fd\u4f1a\u88ab\u4e22\u5f03\n$ command 2> /dev/null\n
"},{"location":"tech_accu/tool/Shell/#\u5408\u5e76--","title":"\u5408\u5e76 | <& >&","text":"

\u6b64\u5916\uff0c\u8fd8\u6709 <& \u548c >& \u8fd9\u4e24\u4e2a\u7b26\u53f7\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u6211\u4e0d\u6253\u7b97\u5c55\u5f00\u8bb2\u8fd9\u4ef6\u4e8b\u3002\u8fd9\u91cc\u5f15\u7528\u8fd9\u4e00\u6279\u56de\u7b54\uff1a

n>&p\u00a0and\u00a0n<&p\u00a0are the same operator and are for duplicating the file descriptor (fd)\u00a0p\u00a0onto the file descriptor\u00a0n. Or said otherwise, they redirect the file descriptor\u00a0n\u00a0to whatever resource fd\u00a0p\u00a0is redirected to.

The\u00a0<\u00a0and\u00a0>\u00a0are not used to determine what direction (reading or writing) the redirected file descriptor will be used.\u00a0n\u00a0will get the same direction as\u00a0p. That is, if\u00a0p\u00a0was open for writing, so will be\u00a0n\u00a0even if the\u00a0n<&p\u00a0operator is used.

The only difference between the two operators is when\u00a0n\u00a0is not specified.\u00a0>&p\u00a0redirects stdout (is like\u00a01>&p\u00a0or\u00a01<&p) and\u00a0<&p\u00a0redirects stdin (is like\u00a00<&p\u00a0or\u00a00>&p).

So\u00a0<&0\u00a0is like\u00a00<&0, so redirects stdin to whatever resource stdin was redirected to, so does nothing useful, it's usually a no-op and doesn't make much sense.

But not always a no-op, not in every shell. When job control is disabled, POSIX requires stdin of command in the background to be redirected to\u00a0/dev/null\u00a0or an equivalent file. In Bash (tested in 4.4.12)\u00a0<&0\u00a0overrides this. Compare\u00a0(ls -l /proc/self/fd/0 &)\u00a0and\u00a0(<&0 ls -l /proc/self/fd/0 &). In some cases this is useful.

>&0\u00a0duplicates the fd 0 onto the fd 1. Because the fd 1 (stdout), is by convention only used for writing, that\u00a0>&0\u00a0only makes sense if fd 0 was open in read+write mode.

That would be the case in cases where fd 0 points to the terminal device, because terminal emulators or\u00a0getty\u00a0would generally open the terminal device in read+write mode and assign fds 0, 1 and 2 to it.

So maybe whoever wrote that wanted to redirect stdout to the terminal assuming that stdin was pointing to it.

One place where\u00a0n>&n\u00a0makes sense is with zsh and its\u00a0mult_IOs\u00a0feature. In\u00a0zsh:

some-cmd >&1 > some-file\n# that is: some-cmd 1>&1 1> some-file\n

Redirects the standard output of\u00a0some-cmd\u00a0to both whatever stdout was before (&1) and\u00a0some-file, as if you had written:

some-cmd | tee some-file\n

While

some-cmd <&0 < some-file\n# that is: some-cmd 0<&0 0< some-file\n

would feed first the original stdin and then\u00a0some-file\u00a0as input to\u00a0some-cmd\u00a0as if you had written:

cat - some-file | some-cmd\n

But in\u00a0cmd <&0 >&0, fd 0 is redirected only once, so that does not apply.

n>&n\u00a0can also have an interesting side effect in some shells (ksh,\u00a0zsh, not\u00a0dash,\u00a0bash\u00a0nor\u00a0yash) in that it triggers an error and gives up running the command if the file descriptor\u00a0n\u00a0is not open. So, in those shells,

cmd 0<&0\n

would avoid running\u00a0cmd\u00a0in the pathological condition where\u00a0stdin\u00a0is closed:

$ ksh -c 'cat file - <&0' <&-\nksh: 0: cannot open [Bad file descriptor]\n$ mksh -c 'cat file - <&0' <&-\nmksh: <&0 : bad file descriptor\n$ zsh -c 'cat file - <&0' <&-\nzsh:1: 0: bad file descriptor\n\n$ bash -c 'cat file - <&0' <&-\ncontents of file\ncat: -: Bad file descriptor\ncat: closing standard input: Bad file descriptor\n
"},{"location":"tech_accu/tool/Shell/#\u7ba1\u9053\u7b26--","title":"\u7ba1\u9053\u7b26 | |","text":"

\u524d\u9762\u8bb2\u4e86\u5982\u4f55\u5c06\u8f93\u5165\u8f93\u51fa\u91cd\u5b9a\u5411\u81f3 \u6587\u4ef6\uff0c\u5373\u6570\u636e\u7684\u6d41\u52a8\u662f \u4ece\u547d\u4ee4\u5230\u6587\u4ef6 \u6216\u662f \u4ece\u6587\u4ef6\u5230\u547d\u4ee4\u3002\u800c\u7ba1\u9053\u7b26 | \u5219\u5b9e\u73b0\u4e86\u5c06\u6570\u636e\u7684\u6d41\u52a8\u5b9a\u5411\u4e3a \u4ece\u547d\u4ee4\u5230\u547d\u4ee4\u3002

# \"command_1\" \u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a \"command_2\" \u7684\u8f93\u5165\n$ command_1 | command_2\n\n# \u4f7f\u7528 less \u6765\u67e5\u770b\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\n$ ls -al | less\n\n# \u4e00\u4e2a\u5e38\u7528\u7684\u7528\u6cd5\u662f\u642d grep \u5728\u65e5\u5fd7\u4e2d\u627e\u5230\u4f60\u60f3\u8981\u7684\u4e00\u884c\n# \u6bd4\u5982\u4e0b\u9762\u7684\u547d\u4ee4\u4f1a\u5728 xxx.log \u6587\u4ef6\u4e2d\u627e\u5230\u5e26\u6709\u5173\u952e\u8bcd \"lean_shell\" \u7684\u82e5\u5e72\u884c\n$ cat xxx.log | grep \"lean_shell\"\nLet us learn_shell together!\nLearn_shell means learn_shell and learn_shell!\n$ cat xxx.log\nCommand line is powerful!\nLet us learn_shell together!\nHave you ever see this?\nLearn_shell means learn_shell and learn_shell!\n\n# \u53c8\u6216\u8005\u8ba1\u7b97\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u591a\u5c11\u6587\u4ef6\u5939\u548c\u6587\u4ef6\n$ ls -a | wc -w\n5\n$ ls -a\n.   ..  x   xx  xxx.log\n\n# \u518d\u6bd4\u5982\uff0c\u7edf\u8ba1\u5f53\u524d\u76ee\u5f55\u4e0b\u5404\u4e2a\u6587\u4ef6\u5939\u7684\u5927\u5c0f\uff0c\u5e76\u8f93\u51fa\u4ece\u5927\u5230\u5c0f\u7684 10 \u9879\n$ du | sort -nr | head\n# \u627e\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\uff08\u9012\u5f52\uff09\u6240\u6709\u53eb\u505a \"xxx\" \u7684\u6587\u4ef6\u5e76\u5220\u9664\n$ find . -name \"xxx\"  | xargs rm -f\n
"},{"location":"tech_accu/tool/Shell/#\u7b5b\u9009\u5668","title":"\u7b5b\u9009\u5668","text":"

\u53ef\u4ee5\u53d1\u73b0\uff0c\u91cd\u5b9a\u5411\u7684\u529f\u80fd\u975e\u5e38\u5f3a\u5927\u3002\u540c\u65f6\uff0c\u8fd9\u91cc\u4e5f\u6709\u5f88\u591a\u7b5b\u9009\u5668\u4f9b\u4f60\u9009\u62e9\uff0c\u4ed6\u4eec\u7ecf\u5e38\u642d\u914d\u7ba1\u9053\u7b26\u4f7f\u7528\uff0c\u4ee5\u8f85\u52a9\u7ba1\u9053\u7b26\u8fdb\u884c\u4e00\u4e9b\u66f4\u590d\u6742\u7684\u5de5\u4f5c\u3002

Source: https://linuxcommand.org/lc3_lts0070.php

"},{"location":"tech_accu/tool/Shell/#\u811a\u672c-shell","title":"\u811a\u672c Shell","text":"

\u7b80\u5355\u6765\u8bf4\uff0cShell \u811a\u672c\u53ef\u4ee5\u770b\u4f5c\u4e00\u6761\u6761 Shell \u6307\u4ee4\u7684\u96c6\u5408\uff0c\u6211\u4eec\u5728\u8fd0\u884c Shell \u811a\u672c\u65f6\uff0cShell \u811a\u672c\u4e2d\u7684\u6307\u4ee4\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u4e00\u884c\u4e00\u884c\u7684\u88ab\u6267\u884c\u4e0b\u6765\u3002

Shell \u811a\u672c\u4e00\u822c\u662f\u4ee5 .sh \u4e3a\u540e\u7f00\u7684\u7eaf\u6587\u672c\u6587\u4ef6\uff0c\u800c\u6267\u884c Shell \u811a\u672c\u7684\u65b9\u6cd5\u5927\u81f4\u6709\u4e09\u79cd\uff1a

\u4ed6\u4eec\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a

"},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u6761\u4ef6\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u6761\u4ef6\u8bed\u53e5","text":"
# \u6761\u4ef6\u5206\u652f\u8bed\u53e5\nif condition1\nthen\ncommands\nelif condition2\nthen\ncommands else\ncommands\nfi\n
# \u5f53 $var \u4e3a \"A\" \u65f6\u6267\u884c\u7b2c\u4e00\u5757\uff0c\u5f53 $var \u4e3a \"B\" \u65f6\u6267\u884c\u7b2c\u4e8c\u5757\uff0c*) \u5373\u5176\u4ed6\u60c5\u51b5\ncase $var in \"A\")\ncommands\n    ;;\n\"B\")\ncommands\n    ;; *)\ncommands\n    ;;\nesac\n
"},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u5faa\u73af\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u5faa\u73af\u8bed\u53e5","text":"
# \u4f9d\u6b21\u679a\u4e3e\u82e5\u5e72 item\uff0cvar \u8868\u793a\u6b63\u5728\u679a\u4e3e\u7684\u5185\u5bb9\nfor var in item1 item2 ... itemN\ndo\ncommands\ndone\n
# \u8fd0\u884c\u5230 condition \u4e3a\u5047\u65f6\u7ed3\u675f\nwhile condition\ndo\ncommands\ndone\n
# \u8fd0\u884c\u5230 condition \u4e3a\u771f\u65f6\u7ed3\u675f\nuntil condition\ndo\ncommands\ndone\n
"},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u51fd\u6570","title":"\u6d41\u7a0b\u63a7\u5236 - \u51fd\u6570","text":"
# \u5b9a\u4e49\u4e86\u4e00\u4e2a\u53eb\u505a foo \u7684\u51fd\u6570\uff0cfunction \u53ef\u4ee5\u4e0d\u5199\nfunction foo(){\ncommands\n}\n
"},{"location":"tech_accu/tool/Shell/#\u53c2\u6570\u4f20\u9012","title":"\u53c2\u6570\u4f20\u9012","text":"

\u5bf9\u4e8e\u51fd\u6570\u6216\u547d\u4ee4\u53ef\u4ee5\u7528 $n \u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002\u4f46\u5f53 n \u4e0d\u6b62\u4e00\u4f4d\u6570\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 ${n} \u7684\u65b9\u5f0f\u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002

#! /bin/bash\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n
$ ./foo.sh a b c d e f g h i j\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
#! /bin/bash\nfunction foo(){\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n}\n\nfoo a b c d e f g h i j\n
$ ./script.sh\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
"},{"location":"tech_accu/tool/Shell/#\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","title":"\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","text":"

\u56de\u5fc6\u5faa\u73af\u8bed\u53e5\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u9700\u8981\u5199\u51fa\u679a\u4e3e\u7684\u6bcf\u4e00\u4e2a\u9879\u76ee\u3002\u663e\u7136\uff0c\u5728\u5927\u91cf\u679a\u4e3e\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\uff0c\u624b\u5199\u51fa\u5168\u90e8\u7684\u679a\u4e3e\u53ef\u80fd\u4e0d\u592a\u73b0\u5b9e\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u4f1a\u60f3\u8981\u4f7f\u7528\u6587\u4ef6\u503c\u6216\u662f\u547d\u4ee4\u7684\u8f93\u51fa\u6765\u5b9e\u73b0\u3002\u8fd9\u4e2a\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 ``` \u628a\u628a\u547d\u4ee4\u7ed9\u62ec\u8d77\u6765\u3002

A\nB\nC\n
for var in `cat file`\ndo\necho - var done\n
- A\n- B\n- C\n
"},{"location":"tech_accu/tool/Shell/#\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684-shell","title":"\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684 Shell","text":"

\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u524d\u9762\u7ed9\u51fa\u7684\u82e5\u5e72\u811a\u672c\u6837\u4f8b\u4e2d\uff0c\u6211\u4eec\u7684\u7b2c\u4e00\u884c\u90fd\u6709\u4e00\u884c\u5947\u602a\u7684\u6ce8\u91ca\uff1a

#! /bin/bash\n

\u8fd9\u53e5\u8bdd\u7684\u610f\u601d\u662f\uff0c\u6307\u5b9a\u8be5\u811a\u672c\u9ed8\u8ba4\u4f7f\u7528 /bin/bash \u6765\u6267\u884c\u3002\u8fd9\u91cc\u9700\u8981\u4f7f\u7528\u7edd\u5bf9\u8def\u5f84\u6765\u7d22\u5f15 Shell \u7684\u53ef\u6267\u884c\u6587\u4ef6\u3002

"},{"location":"tech_accu/tool/Shell/#\u4e00\u4e2a\u6a21\u677f","title":"\u4e00\u4e2a\u6a21\u677f","text":"

\u8fd9\u91cc\u518d\u8d34\u4e00\u4e2a\u6211\u81ea\u5df1\u5199 Shell \u811a\u672c\u7684\u65f6\u5019\u4f1a\u91c7\u7528\u7684\u6a21\u677f\u3002

#! /bin/bash\n\n# get current direction\ncurDir=`pwd`\n# get shell direction\nworkDir=$(cd \"$(dirname \"$0\")\";pwd)\n\ncd $workDir\n\n# Write your script here.\n\ncd $curDir\n
"},{"location":"tech_accu/tool/Shell/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"

\u547d\u4ee4\u884c\u5e38\u89c1\u5feb\u6377\u952e\uff0cSource: https://lym.readthedocs.io/en/latest/startingcommands.html?highlight=mkdir#moving-around-in-the-command-line

"},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u8d44\u6599","title":"\u76f8\u5173\u8d44\u6599","text":""},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u77e5\u8bc6\u70b9","title":"\u76f8\u5173\u77e5\u8bc6\u70b9","text":""}]} \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 8aa14033..c5cc5799 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ