首页 > 其他分享 >【笔记】复杂性理论

【笔记】复杂性理论

时间:2023-12-04 23:55:48浏览次数:39  
标签:wedge phi le text 理论 复杂性 笔记 多项式 NP

上接 可计算理论

相比可解性,我们还关注一些可解问题的效率——是否存在一个“高效”算法?
计算复杂性理论关注问题是否“实际可解

时间复杂性度量

Def. 时间复杂度 time complexity
确定型:设 \(M\) 是一个在所有输入上都停机的确定型图灵机。\(M\) 的“运行时间”或者“时间复杂度”是一个函数 \(f:\N→\N\),\(f(n)\) 是 \(M\) 在所有长度为 \(n\) 的输入上运行时所经过的最大步数。
对应地,称 \(M\) 在时间 \(f(n)\) 内运行,\(M\) 是 \(f(n)\) 时间的图灵机。
非确定型:设 \(N\) 是一个非确定型图灵机,并且是个判定机。\(N\) 的运行时间是函数 \(f:\N\to\N\),其中 \(f(n)\) 是在任何长度为 \(n\) 的输入上所有计算分支中的最大步数。

进一步地,考虑称为“渐进分析”的估计方法

Def. 渐进上界(\(O,o\))
设函数 \(f,g:\N→\R^+\)。称 \(f(n)=O(g(n))\),若存在正整数 \(c, n _0\),使得对所有 \(n\ge n _0\),有

\[f(n)≤cg(n) \]

则称 \(g(n)\) 是 \(f(n)\) 的上界(upper bound),或更准确地说,\(g(n)\) 是 \(f(n)\) 的渐近上界(asymptotic upper bound),以强调没有考虑常数因子。
这种大 \(O\) 记法表示了函数渐进地不大于某个函数;此外还有小 \(o\) 记法,表示函数渐进地小于某个函数:
设函数 \(f,g:\N→\R^+\)。若

\[\lim _{n\to\infty} \frac{f(n)}{g(n)}=0 \]

则称 \(f(n)=o(g(n))\)。换言之,意味着对于任何实数 \(c>0\),存在一个数 \(n _0\),使得对所有 \(n≥n _0\),\(f(n)<cg(n)\)

例如:\(\sqrt{n}=o(n),f(n)=O(f(n)),f(n)\ne o(f(n))\)
此外,还有一些渐进分析的记号:

Def. \(\Omega\) 记号
设函数 \(f,g:\N→\R^+\)。称 \(f(n)=\Omega(g(n))\),若存在正整数 \(c, n _0\),使得对所有 \(n\ge n _0\),有

\[f(n)\ge cg(n) \]

Def. \(\Theta\) 记号
设函数 \(f,g:\N→\R^+\)。称 \(f(n)=\Theta(g(n))\),若同时有 \(f(n)=O(g(n)), f(n)=\Omega(g(n))\),即存在正整数 \(c _1, c _2, n _0\),使得对所有 \(n\ge n _0\),有

\[c _1 g(n)\le f(n)\le c _2 g(n) \]

例如,\(2 ^{\Theta(\log n)}\),等价于 \(2 ^{c _1\log n}\le 2 ^{\Theta(\log n)}\le 2 ^{c _2\log n}\),等价于 \(n ^{c _1}\le 2 ^{\Theta(\log n)}\le n ^{c _2}\),等价于 \(n ^{\Theta(1)}\)

进一步地,用图灵机运行的时间复杂度给语言分类:

Def. 时间复杂性类
设函数 \(t:\N→\R^+\)。定义时间复杂性类(time complexity class)\(\text{TIME}(t(n))\) 为由 \(O(t(n))\) 时间的图灵机判定的所有语言的集合

例题:语言 \(A=\{0 ^n1 ^n|n\in\N\}\)
单带图灵机最优可以在 \(O(n\log n)\) 时间判定 \(A\),从而 \(A\in\text{TIME}(n\log n)\);而多带图灵机就可以 \(O(n)\) 判别;
它们区别在于模型的复杂度,因此我们先考虑一下计算模型的选择如何影响语言的时间复杂度

Th. 模型间的时间复杂度
设函数 \(t(n)\),\(t(n)≥n\)。则每一个 \(t(n)\) 时间的多带图灵机都和某一个 \(O(t ^2(n))\) 时间的单带图灵机等价。
设函数 \(t(n)\),\(t(n)≥n\)。则每一个 \(t(n)\) 时间的非确定型单带图灵机都与某一个 \(2 ^{O(t(n))}\) 时间的确定型单带图灵机等价。

这些都是技术上的事,不多讲述

P 类

Def. P 类(Polynomial time)
\(P\) 是确定型单带图灵机在多项式时间内可判定的语言类:

\[P = \bigcup _k \text{TIME}(n ^k) \]

在理论中,P 类的重要性在于:

  • 对于所有与确定型单带图灵机多项式等价的计算模型来说,P 是不变的
  • P 大致对应于在计算机上实际可解的那一类问题;当然还是包含了一些复杂度太高的算法

例题:\(\{\lang x,y\rang:\gcd(x,y)=1\}\in P\)
构造子程序 \(E\) 为(欧几里得算法):
\(E=“\) 对输入 \(\lang x,y\rang\),\(x\) 和 \(y\) 是二进制表示的自然数:
\(\quad\) 1. 重复下面的操作,直到 \(y=0\)
\(\quad\) 2. \(\quad\) 赋值 \(x←x\text{ mod } y\)
\(\quad\) 3. \(\quad\) 交换 \(x,y\)
\(\quad\) 4. 输出 \(x\ ”\)
从而求解该问题的算法 \(R\) 为
\(R=“\) 对输入 \(\lang x,y\rang\),\(x\) 和 \(y\) 是二进制表示的自然数:
\(\quad\) 1. 在 \(\lang x,y\rang\) 上运行 \(E\)
\(\quad\) 2. 若结果为 \(1\),就接受;否则,就拒绝 \(”\)

复杂度分析:表示长度为 \(O(\log x+\log y)\),运行时间也为 \(O(\log x+\log y)\),故执行步数为 \(O(n)\);\(E\) 的每一步也是消耗多项式时间,故总体运行时间是多项式的

例题:
Th. 每一个上下文无关语言都是 P 的成员
可以用动态规划解决,这是证明 P 常见的方法

NP 类

有些问题的多项式时间算法还没找到。但是,关于该问题的一个不寻常的发现是,许多问题的复杂性是联系在一起的:发现其中一个问题的多项式时间算法就可以用来解决整类问题

例题(哈密顿路径):\(\text{HAMPATH}=\{ \lang G,s,t \rang| G 是包含 s 到 t 的哈密顿路径的有向图\}\)
尽管不确定是否有多项式时间算法,但是显然找到路径后,就很容易让人相信其存在。换言之,验证存在性比确定存在性要容易
例题(合数):\(\text{COMPOSITES}=\{\lang x\rang|x=pq\wedge p,q>1\}\)
尽管不确定是否有多项式时间算法,但是显然只需给出该数的一个因子,就能验证之
对于上述关于验证的直觉,形式化定义如下:

Def. 验证机
语言 \(A\) 的验证机(verifier)是一个算法 \(V\),从而

\[A=\{w|对某个字符串c, V接受\lang w,c\rang\} \]

若 \(V\) 在 \(w\) 的长度的多项式时间内运行,则称为多项式时间验证机(polynomial time verifier);若语言 \(A\) 有一个多项式时间验证机,则称它为多项式可验证的(polynomially verifiable)
其中,\(c\) 是验证机 \(V\) 验证 \(w\in A\) 使用的额外信息,也称为 \(A\) 的证书(certificate)或证明(proof);对于多项式时间验证机,证书具有(\(w\) 的)多项式长度,因为验证机在多项式时间内只能访问 \(c\) 的多项式长度的信息

Def. NP 类(Nondeterministic polynomial time)
\(NP\) 是具有多项式时间验证机的语言类

所谓 NP(非确定型多项式时间,nondeterministic polynomial time)来源于非确定型多项式图灵机,这是因为只需构造多项式时间的 NTM,通过猜想证书即可模拟验证机

Th. 一个语言在 NP 中,当且仅当它能被某个非确定型多项式时间图灵机判定
Def. NP 类,等价定义
\(NP\) 是能被不确定型图灵机在多项式时间判定的语言类

例题():\(\text{CLIQUE}=\{ \lang G,k\rang|G是包含k团的无向图 \}\in NP\)
其中 \(k\) 团指 \(k\) 个节点的完全子图。证明思路,团就是证书;或者也可以从非确定型多项式图灵机的等价角度来证明,构造对应的 NTM 即可
例题(子集和):\(\text{SUBSET-SUM}=\{ \lang s,t\rang|s=\{x _i\} _{i=1}^{k} \wedge \exist \{y _j\} _{j=1} ^l,\sum _j y_j=t \}\in NP\)
其中 \(\{x _i\} _{i=1}^{k},\{y _j\} _{j=1} ^l\) 为多重集。证明思路,子集就是证书。

NPC 类

显然 \(P\sube NP\),但是目前还不知道是否 \(NP\sube? P\)。
但是,Stephen Cook 和 Leonid Levin 发现 NP 中某些问题的复杂性和整个 NP 类相关联:这些问题中任何一个如果存在多项式时间算法,那么所有 NP 问题都是多项式时间可解的。这些问题称为 NP 完全的(NP-complete, NPC)。试图证明 P 等于 NP 只需为一个 NP 完全问题找到多项式时间算法就可以了
一个 NPC 问题为可满足问题(satisfiability problem, SAT),后面会进行说明
现在先让我们考虑下,什么叫做“一个多项式可解、另一个就可解”?引入“多项式时间可规约”:

Def. 多项式时间可计算函数
若存在多项式时间图灵机 \(M\),使得在任何输入 \(w\) 上,\(M\) 停机时 \(f(w)\) 恰好在带子上,则称函数 \(f:\Sigma ^ * → \Sigma ^{ * }\) 为多项式时间可计算函数(polynomial time computable function)
Def. 多项式时间可规约
语言 \(A\) 称为多项式时间(映射)可归约(polynomial time (mapping) reducible)到语言 \(B\),记为 \(A≤ _P B\),若存在多项式时间可计算函数 \(f:\Sigma ^ * →\Sigma ^{ * }\),对于每一个 \(w\),有

\[w\in A\lrArr f(w)\in B \]

函数 \(f\) 称为 \(A\) 到 \(B\) 的多项式时间归约(polynomial time reduction)
它的含义就是将对 \(w\in A\) 的判定有效地转化成对 \(f(w)\in B\) 的判定。它和 \(\le _m\) 的区别就是受到“多项式时间”的约束
显然有定理:

Th. 多项式时间规约的性质

  • 若 \(A\le _P B, B\le _P C\),则 \(A\le _P C\)
  • 若 \(A\le _P B,B\in P\),则 \(A\in P\)
  • 若 \(A\le _P B,A\notin P\),则 \(B\notin P\)
  • 若 \(A\le _P B,B\in NP\),则 \(A\in NP\)
  • 若 \(A\le _P B,A\notin NP\),则 \(B\notin NP\)

现在可以利用多项式时间可规约,对 NP 完全做一个定义

Def. NP 完全(NP-complete, NPC)
如果语言 \(B\) 满足下面两个条件,就称为 NP 完全:

  1. \(B\in NP\)
  2. \(NP\) 中的每个 \(A\) 都多项式时间可归约到 \(B\)

注意到,条件 2 并不能推出 1;因此还有 NP-Hard 问题的定义:

Def. NP 难问题(NP‐Hard)
问题 \(B\) 是 NP 难问题,当且仅当 \(NP\) 中的每个 \(A\) 都多项式时间可归约到 \(B\)

显然有如下定理
Th. 若 \(B\in NPC,B\in P\),则 \(P=NP\)
Th. 若 \(B\in NPC,B\le _P C, C\in NP\),则 \(C\in NPC\)

可见一个问题是 NPC 问题,说明它目前对我们来说很难,但还不足以说明它不存在多项式算法
总之,现在我们要找出第一个 NPC 问题了,它就是可满足问题 \(\text{SAT}\)

Def. 布尔表达式的一些术语,简要介绍
称布尔变量 \(x\) 或者其非 \(\bar{x}\) 为文字(literal)
令布尔表达式 \(φ\) 所有变量表示为 \(\text{var}(φ)\),则 \(φ\) 的赋值 \(\tau\) 是一个形如 \(\text{var}(φ)\to\{0, 1\}\) 的函数,\(\tau(φ)\) 表示表达式 \(φ\) 在赋值 \(\tau\) 下的取值
布尔表达式 \(φ\) 是可满足的当且仅当存在 \(\tau\) 使得 \(\tau(φ) = 1\)

Def. 可满足问题(satisfiability problem, SAT)

\[\text{SAT}=\{ \lang\phi\rang | \phi 是可满足的布尔表达式\} \]

Th.(库克-列文定理) \(\text{SAT}\in NPC\)
Co. \(\text{SAT}\in P\),当且仅当 \(P=NP\)

如何证明呢? TODO p193-195 为了增加上这课的价值,我们来学一下方法
首先,很容易证明 \(\text{SAT}\in NP\),我们取非确定型图灵机猜测 \(\phi\) 的一个赋值,当赋值满足 \(\phi\) 时接受之
接下来,对应任意 \(A\in NP\),证明 \(A\le _P \text{SAT}\):假设 \(N\) 是在 \(n ^k\) 时间判定 \(A\) 的非确定型图灵机,我们将运行在 \(w\) 上的 \(N\) 的每一个计算分支都对应转化成一个“画面”:将从起始格局开始的每一个格局(形如 \(\#X _1 X _2\dotsb q X _i\dotsb X _m\#\))都逐行列成一个 \(n ^k\times n ^k\) 的表格,若表格内某一行为接受格局,则称该画面为接受画面,从而接受等价于存在一个接受画面
现在描述 \(A\) 到 \(\text{SAT}\) 的多项式时间规约 \(f\):对于算法 \(A\) 的输入 \(w\),生成布尔表达式 \(\phi=f(w)\)。思想很简单,我们只需通过这个接受画面生成一个应当被满足的布尔表达式来刻画它,并且反之布尔表达式被满足也意味着存在对应的一个接受画面,我们就大功告成了
如何刻画?一个画面包括 \((n ^k) ^2\) 个格子,每个格子分别是 \(\{Q, \Gamma, \#\}\) 的一个元素,因此,定义变量 \(x _{i,j,s}\),其中 \(i,j\in[2 ^k], s\in \{Q, \Gamma, \#\}\),从而 \(x _{i,j,s}=1\) 意味着格子 \([i,j]\) 为符号 \(s\)
现在利用这些变量刻画一个合法的接受画面——也就是构造一个被满足时与接受画面等价的布尔表达式 \(\phi\)
\(\phi\) 由四个部分组成,为:\(\phi = \phi _{cell}\wedge \phi _{start}\wedge \phi _{accept}\wedge\phi _{move}\),分别刻画了一个合法的接受画面需要满足的四个方面:
\(\phi _{cell}\) 刻画:每个格子有且只有一个符号,如下:

\[\phi _{cell} = \bigwedge _{1\le i,j\le n ^k}\Big[ \big(\vee _{s} x _{i,j,s}\big)\wedge \big(\wedge _{s\ne t} (\overline{x _{i,j,x}}\vee\overline{x _{i,j,t}})\big)\Big] \]

\(\phi _{start}\) 刻画:第一行是起始格局,如下:

\[\phi _{start} = x _{1,1,\#}\wedge x _{1,2,q _0}\wedge x _{1,3,w _1}\wedge x _{1,4,w _2}\wedge \dotsb\wedge x _{1,n +2,w _n}\wedge x _{1,n+3, \_}\wedge\dotsb\wedge x _{1,n ^k-1, \_}\wedge x _{1,n ^k, \#} \]

\(\phi _{accept}\) 刻画:接受格局在画面中,如下:

\[\phi _{accept} = \bigvee _{1\le i,j\le n ^k} x _{i,j,q _{accept}} \]

\(\phi _{move}\) 刻画:每一步转移都是合法的;事实上相邻两行的转移只体现在某个 \(2\times 3\) 的格子里,事实上枚举一下可以知道对于每个 \(2\times 3\) 的格子,合法的形式有限(如果实在不放心,\(2\times 4\) 也行),所以这一部分是可以刻画出来的
综上,这个规约是多项式时间的,且存在接受画面和可满足性是等价的,得证

现在,若我们试图证明某个 \(A\) 为 NPC,就可以证明 \(\text{SAT}\le _P A, A\in NP\);当然,我们可以使用更简单的 \(\text{3SAT}\) 完成这个过程
考虑 \(\text{SAT}\) 的特殊情况 \(\text{CNF-SAT, 3SAT}\)

Def. \(\text{CNF-SAT, 3SAT}\)
称布尔变量 \(x\) 或者其非 \(\bar{x}\) 为文字,称由 \(\vee\) 连接的若干文字为子句,称由 \(\wedge\) 连接的若干子句为合取范式(cnf 公式);特别地,若所有子句都只有三个文字,则称为 3cnf 公式

\[\begin{aligned} \text{CNF-SAT} &= \{ \lang\phi\rang : \phi 是可满足的 cnf 公式 \} \\ \text{3SAT} &= \{ \lang\phi\rang : \phi 是可满足的 3cnf 公式 \} \end{aligned} \]

Th. \(\text{CNF-SAT}\in NPC\)
Th. \(\text{3SAT}\in NPC\)

证明,可以通过 \(\text{SAT}\le _P \text{CNF-SAT}\le _P\text{3SAT}\)
或者直接证明 \(\forall A\in NP, A\le _P \text{CNF-SAT, 3SAT}\),可以利用库克-列文定理的证明
总之,只需稍加修改令布尔表达式 \(\phi\) 转化为 \(cnf,3cnf\),然后沿用该证明即可
转化成 \(cnf\) 简单,就是布尔表达式的等价运算
转化成 \(3cnf\) 也不难,事实上我们在 \(cnf\) 的基础上,有如下方式等价地填充/拆开一个子句 \(x _1\vee x _2\vee\dotsb\vee x _k\):

  • 填充:\(x _1\vee x _2\vee\dotsb \vee x _k \vee x _k\)
  • 拆开:\((x _1\vee x _2\vee\dotsb\vee x _{k-1}\vee z)\wedge(x _k \vee \bar{z})\)

现在开始我们的第一个比较跳跃的规约:

Def. 团 \(\text{CLIQUE}=\{ \lang G,k\rang|G是包含k团的无向图 \}\)
Th. \(\text{3SAT}\le _P \text{CLIQUE}\)
Th. \(\text{CLIQUE}\in NPC\)

证明思路,也就是要找到一个多项式时间规约 \(f\):对于 \(\phi=(a _1\vee b _1\vee c _1)\wedge\dotsb\wedge(a _k\vee b _k\vee c _k)\),规约 \(f\) 生成 \(\lang G,k\rang\),其中将 \(\text{3SAT}\) 的每个子句对应生成三个节点,称为一个三元组;然后将组间不是互补文字的节点连边
接下来要证明 \(\phi\in\text{3SAT}\lrArr f(\phi)= \lang G,k\rang\in \text{CLIQUE}\)
前推后,即每个子句里都至少有一个为真,任取其一,在图 \(G\) 里对应的子图显然是 \(k\) 团;后推前,这个 \(k\) 团的每个节点必定分别属于一个三元组,令其对应的文字赋值为真即可,这显然可以做到

在构造从 \(\text{3SAT}\) 到一个语言的多项式时间归约时,我们寻找这个语言中能模拟布尔公式的变量和子句的结构,这种结构有时称为构件(gadget),设计之需要一定的技巧
NP 完全性现象是很广泛的,众多领域中都有 NP 完全问题。由于某些没有被深入认识的原因,多数自然出现的 NP 问题不是 P 类就是 NP 完全的。所以,如果在为一个新的 NP 问题寻找多项式时间算法,付出部分精力尝试证明它是 NP 完全的是一种明智的做法,从而使得最后又归于 P=NP 这个问题上
现在进一步介绍几个 NPC 问题,也可以从它们出发证明更多的 NPC 问题

Def. 顶点覆盖问题 \(\text{VERTEX-COVER} = \{ \lang G,k\rang | G 是具有 k 个节点的顶点覆盖的无向图 \}\)
其中,无向图 \(G\) 的顶点覆盖是节点的一个子集,使得对于 \(G\) 的每条边,都存在子集中某个节点与其关联
Th. \(\text{3SAT}\le _P\text{VERTEX-COVER}\)
Th. \(\text{VERTEX-COVER}\in NPC\)

证明,为布尔表达式 \(\phi\) 构造刻画它的 \(\lang G, k\rang\),思路为,首先每个变量对应的 0/1 赋值对应到图中的变量构件——令其为两个被边连接的节点,这样两个节点之一一定会出现在覆盖中;其次对于子句构件,要寻找这样的结构:它使得顶点覆盖所包含的变量构件结点中,至少有一个结点对应着该子句中至少一个取值为真的文字;子句构建包含三个节点以及于其相连的边。
构造如下:归约 \(f\) 把布尔公式 \(\phi\) 映射为一个图 \(G\) 和值 \(k\)。对于 \(\phi\) 中的每个变量 \(x\),产生一条连接着两个结点的边,把这个构件中的两个结点标记为 \(x, \bar{x}\)。把 \(x\) 赋值为 1 对应于顶点覆盖选择该边的 \(x\) 结点,否则反之。
每个子句的构件是用该子句的三个文字标记的结点组成的三元组。这三个结点互相连接,并且与变量构件中具有相同标记的结点相连接。
因此出现在 \(G\) 中的结点总数是 \(2m+3l\),其中 \(\phi\) 有 \(m\) 个变量和 \(l\) 个子句。令 \(k\) 等于 \(m+2l\)。

接下来证明归约满足要求。
前推后,从一个满足赋值开始,首先把变量构件中对应于赋值中真文字的结点放入顶点覆盖中。然后,在每个子句中挑选一个真文字,把每个子句构件中剩下的两个结点放人顶点覆盖中。
后推前,如果 \(G\) 有 \(k\) 个结点的顶点覆盖,为了
覆盖变量构件的边和子句构件的三条边,顶点覆盖必须包含每个变量构件的一个结点以及每个子句构件的两个结点。这就占用了全部顶点覆盖的结点,没有剩余的份额。选取变量
构件中在顶点覆盖中的结点,把相应的文字赋值为真。这个赋值满足 \(\phi\),因为每个子句构件连接到变量构件的三条边都被覆盖了,其中必有一条边被变量构件中的一个结点覆盖,因此赋值满足相应的子句。

Def. 哈密顿路径 \(\text{HAMPATH}=\{ \lang G,s,t \rang| G 是包含 s 到 t 的哈密顿路径的有向图\}\)
Th. \(\text{3SAT}\le _P\text{HAMPATH}\)
Th. \(\text{HAMPATH}\in NPC\)

证明 TODO p198

Th. \(\text{UNHAMPATH}\in NPC\)
其中 \(\text{UNHAMPATH}\) 为无向图的哈密顿路径问题

证明 TODO p200

Def. 子集和 \(\text{SUBSET-SUM}=\{ \lang s,t\rang|s=\{x _i\} _{i=1}^{k} \wedge \exist \{y _j\} _{j=1} ^l,\sum _j y_j=t \}\)
其中 \(\{x _i\} _{i=1}^{k},\{y _j\} _{j=1} ^l\) 为多重集
Th. \(\text{3SAT}\le _P\text{SUBSET-SUM}\)
Th. \(\text{SUBSET-SUM}\in NPC\)

证明 TODO p201

空间复杂性度量

Def. 图灵机的空间复杂性(Space complexity)
给定 \(k\) 带图灵机 \(M\)(1 条输入带,\(k-1\) 条存储带),若对每个长度为 \(

标签:wedge,phi,le,text,理论,复杂性,笔记,多项式,NP
From: https://www.cnblogs.com/zhyh/p/17876318.html

相关文章

  • 2023.12.4学习笔记(stm32跑马灯实验——库函数)
     STM32f4有七组引脚(GPIOx),每组引脚有16个IO口,每组由十个寄存器控制。   查找STM32引脚的功能,可以在STM32F04ZGT6文件50页左右查询,此文件所在的位置为硬件资料、芯片资料文件夹里。跑马灯实验思路步骤:1:使能时钟,调用函数RCC_AHB1PeriphClockCmd();       ......
  • 《卓有成效的程序员》读书笔记1
    我觉得此书第一部分总结的一些法则非常好,我提取了一下:法则:1.加速法则  关注本质,而非形式  一个应用程序列表的有用程度与它的长度成反比  程序员的很多时间都浪费在找东西上  华而不实的东西中看不中用  键盘输入总比导航快  首选键盘而非鼠标  ......
  • STM32学习笔记_前置知识
    STM简介STM32是ST公司基于ARMCortex-M内核开发的32位微控制器,本次课程采用的STM32F1系列,ARM公司设计ARM内核,半导体厂商完善内核周边电路并产生芯片STM32F103C8T6参数RAM:20K指运行内存,实际存储介质是SRAMROM:64K指程序存储器,实际存储介质是Flash内存供电:2.0-3.6V标准3.3V封装:LQFP......
  • [机器学习复习笔记] SVM 支持向量机
    SVM支持向量机1.SVM基本模型1.1线性可分问题给定一个训练样本集\(D=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\},\;y_i\in\{-1,+1\}\)。假设两个点集\(D_0\)和\(D_1\),且\(D_0\subsetD,D_1\subsetD\),若存在一个\(d\)维向量\(w\)和实数\(b\),使得......
  • 代码大全阅读笔记
    协同构建能够有效的改善软件质量尝试用多种方法重现错误以准确判断错误原因抛开问题休息一下开发阶段的重构是提升程序质量的最佳时机。增量集成有助于项目增长注释写的糟糕很容易,写的出色很难,注释写的不好只会帮倒忙?注释的种类,重复代码,解释代码,代码标记,概述代码,代码意图说......
  • 十二月阅读笔记一
    《实例化需求》阅读笔记一在苦寻敏捷测试的过程中,看一本书,关于如何提高敏捷过程中需求、开发和验收的测试效率,让我很是感兴趣,这本书名《实例化需求:团队如何交付正确的软件》。关于如何处理需求说明与测试,不同的组织使用不同的名称,或者说是不同的定义,但他们都有一套共同的核......
  • 【刷题笔记】124. Binary Tree Maximum Path Sum
    题目Givena non-empty binarytree,findthemaximumpathsum.Forthisproblem,apathisdefinedasanysequenceofnodesfromsomestartingnodetoanynodeinthetreealongtheparent-childconnections.Thepathmustcontain atleastonenode anddoes......
  • openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引
    openGauss学习笔记-141openGauss数据库运维-例行维护-例行重建索引141.1背景信息数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。数据库支持的索引类型为B-tree索引,例行重建索引可有效的提高查询效率。如果数据发生......
  • openGauss学习笔记-142 openGauss 数据库运维-例行维护-导出并查看wdr诊断报告
    openGauss学习笔记-142openGauss数据库运维-例行维护-导出并查看wdr诊断报告生成快照数据需参数enable_wdr_snapshot=on,访问WDR快照数据需要sysadmin或monadmin权限,因此需要使用root账号或其他拥有权限的账号来生成WDR诊断报告。执行如下命令新建报告文件。touch/home/om/w......
  • Python上课笔记2
    Python中可以一次行输入多个数字的方法a,b=map(int,input().split())#split()函数就是可以自动识别空格断开猜数字游戏这里需要调用一下random这个库importrandomasra#当然我这里给他重新定义了一个名字i=0x=ra.randint(0,100)whilei<3:a=int(i......